1. 程式人生 > 其它 >學習數學應當從線性代數開始

學習數學應當從線性代數開始

線性代數是高等教育中一門重要的課程。不但是理工科一部分人文科學也將線性代數作為必修或選修課程。這門課程在高等院校的課程安排中,屬於較「初級」的課程,通常是和微積分並列,作為大學一年級新生的數學入門課程。按照這樣的課程安排,線性代數按道理應當是一門比較簡單或容易的課程,但是事實卻完全相反,線性代數的教學口碑一直是惡名昭彰。和微積分相比,線性代數離直覺、我們過去的數學經驗更遠,一堆被稱作「矩陣」的莫名其妙的數字陣列被倒來倒去,沒有任何意義。線性代數課程開始時,我們被告知線性代數就是是解線性方程組的學科,但是我們在中學已經學習了三元以下方程組的解法,雖然不是什麼快樂的記憶,但是比起手頭的線性代數,中學的解方程組方法不知輕鬆多少倍。學習噩夢真正開始於解方程組之後:一堆和解方程組無關的晦澀難懂的概念、術語對我們進行狂轟濫炸,使我們毫無招架之力,幾近精神崩潰,不少人乾脆躺平,不再追究線性代數的真實意義,勉強對付考試及格了事。但是工作後,人工智慧大盛,據說基礎之一就是線性代數,不得已又拿起書,但是那些令人生厭不知所云的語言、符號、公式一陣陣襲來,頓感嫌惡睏倦之意。如果你隨意翻看一本線性代數教科書,會發現和微積分相比,線性代數的各個部分內容的排列完全是是東一榔頭西一棒子,後一章的內容和前一章沒有承接關係,就像是讀《儒林外史》每個故事獨立成章。剛剛會解線性方程組,就轉入沒有什麼太大關係的行列式,然後又進入莫名其妙的矩陣矩陣,折騰進向量空間還沒弄明白,經特徵值特徵向量、線性運算元,一路走來,大量的不是解說而是無窮無盡的定義定理證明,無休止的公式連著公式。此時只覺得我已經成了局外人,甚至已經是徹底抓狂。更惡劣的是,線性代數的這些內容的安排往往是任意的,幾乎每本教科書都不同,完全根據教科書作者的主觀意志而定,這在其它數學課程中是非常罕見的。最令人稱奇的是,這不是一個區域性現象,而是跨越中外所有線性代數教育都存在的普遍問題。對於如何教線性代數,一直是一個令人棘手的問題。美國於上世紀還特意成立了 Linear Algebra Curriculum Study Group(線性代數課程研究小組)。加拿大數學學會於1999年召開年會,專門討論線性代數教材的改革問題。這些專門會議和組織召集各路專家,經過一番研究討論後得出的結論是:Linear algebra as a cognitively and conceptually difficult subject。自那以後,20年過去了,線性代數的教學仍然沒有明顯的變化。許多人視線性代數為畏途。如此說來,線性代數既然是一門 cognitively and conceptually difficult subject,那為什麼又要當作數學的入門課程?線性代數儘管在認知和概念上難學,但又是一門極為有用的、現代科學工程必須的基礎知識,這使得任何教育機關不敢也無法忽略線性代數在教學中的地位,所以老師只能糊里糊塗地教,學生囫圇吞棗地學,許多人畢業多年,至今不知道線性代數到底是一門學問。在 Quora 中,甚至有教線性代數的老師居然問:What is the point of linear algebra? How can I motivate students to study this? Are there any tangible reasons why students should study linear algebra?

我自己的線性代數學習,也經歷了這個痛苦過程。迄今為止一共學過三遍,最痛切的感覺就是:沒有一部教科書完全能理解。並不完全是內容本身無法理解,而是不知道為什麼要學這個!線性代數每個部分的細節都可以理解,但是無法拼成一個完整的全圖,我的困惑和上面那個教線性代數的老師的問題基本相同。最終讓我「開竅」的,是後來風靡世界的3Blue1Brown在油管上的視訊系列《Essence of Linear Algebra》——建議所有想認真學習線性代數的初學者都應當至少看一遍這個視訊(這個視訊在B站已經有中文版)。但是經過一段時間的學習,感覺這個視訊雖然點到了問題的實質,但有些問題仍然沒有說透,講清楚。再經過大量教科書的反覆閱讀和思考(從未做習題)體味其中真實含義,結合數理邏輯、數學基礎和其它代數(包括抽象代數和邏輯代數)的學習,終於可以把線性代數的內容用一個統一的框架和洞見一般化。為此,寫了一系列的《從零開始學習線性代數》的筆記,從中提煉出線性代數最核心的概念是【基】(basis)。

本系列筆記,可以看作是這些體會的一個總結。通過線性代數的學習,讓我體會最深的問題就是:當我們學習數學時我們究竟是在學什麼?也就是上面那位老師提到的 point 和 motivation。

回到標題,為什麼我這裡這裡主張將線性代數作為數學學習的起點、換句話說,為什麼線性代數的學習應當先於微積分的學習?首先宣告,這只是我個人以及一部分其他人的觀點,遠不是教育界的共識,但是目前正在引起越來越多人的共鳴。本篇的內容,基本是在講「大道理」而不是學習者學習時的選擇策略。

首先,我這裡所說的的「數學」,特指20世紀以後產生、發展、成熟後的的現代數學,它發源於古希臘的以邏輯推理為基礎的歐氏的《原本》,其特徵是公理化。這個傳統在20世紀初經希爾伯特的公理化運動以及1930年代布林巴基學派的數學重構之後,已經定型為形式化、結構化,高度抽象化的基於邏輯推理演算的公理系統。相對於這個體系,我們在中學所學習的數學,相當於中國傳統意義上的被稱為「算學」的學科。算學與數學的區別在於,前者關注特定的實際問題的解決,而後者關注的是理論體系的完備,解決具體問題僅僅是理論體系的應用。而目前我們所接受的所謂數學教育無一不是以做難題為目標,刷題作為手段,其核心思想精神仍然是「算學」,而不是上述意義的數學。而線性代數,則完全脫離了「算學」的範疇,是最初級的公理化數學。要想一窺現代數學的真容就要從線性代數開始。而初級微積分仍然沒有脫離「算學」的範圍,我們學了導數微分積分公式,做題時只要套公式即可。而線性代數之所以讓人覺得陌生,其理由之一就是你將「算學」棄之腦後,真正開始學習「數學」。下面就展開談一下這個問題。

首先、學習現代數學從線性代數開始的理由,在於隱藏線上性代數背後的基本思想,是對數學中最本質的兩個物件——數與形性質的再認識和再塑造,而沒有全新的完全陌生的概念。數與形,是我們再熟悉不過的兩個概念。例如我們都學過如何求長方形面積,這是我們生平第一次將形狀(大小)的概念和算數聯絡在一起。我們學得了長方形的面積是一個乘法運算:長 × 寬。由此算術和圖形的聯絡,隨著我們可以計算更多類別幾何物件的面積、體積等得到了加強。到了中學,算術變成了代數,我們很少再對具體的數字感興趣,更多的是在操作符號。以等號為界,把兩邊的字母按照基本的代數規則移來移去,得到我們想要的結果。這時,解析幾何出現了,這門課程藉助直角座標系讓我們系統地將幾何圖形與代數中符號聯絡在一起,我們不必再畫圖,而是藉助符號表達式來表示圖形、求解問題,代數方程成為幾何圖形的「代數解釋」。同時,函式概念使我們進一步瞭解到如何將數「投射」到平面直角座標系上得到直線或曲線。函式是代數的概念,而直線和曲線則是它們的「幾何解釋」。到了開始學習線性代數的時候,我們應當建立的是一種更加清晰更加一般的數形聯絡:任何代數運算都可以找到相應的幾何解釋,任何幾何圖形都應當可以找到相應的精確或近似的代數描述。

而線性代數,則是將代數→幾何、幾何→代數之間的關係進一步昇華——將靜態幾何物件變成動態的「動畫」,而產生「動畫」的基本機制就是是動態的代數幾何關係——線性轉換。一個線性轉換,就像是視訊或者GIF的一幅幀圖。如果說,解析幾何是從代數的角度研究幾何,函式是通過幾何影象解釋代數,那線性代數則是完完全全將代數和幾何融為一個整體,一個數學物件。

第二,線性代數讓我們重新思考什麼是數,讓我們重新思考什麼是數學,讓我們重新思考數學和算學的區別,這不是學習全新的概念,而只是對已知概念的進一步昇華與抽象度的提高。而這一點,和微積分很不相同,因為對極限概念的理解需要很高的概念提升門檻和質的飛躍,連續、變化、極限、無窮小等都是我們知識儲備全無的概念。而線性代數中的基礎概念,並不需要全新的革命性改變,而只是對小學數學基本概念的抽象度的提升。

我們已經知道,數,是計數和測量對所獲得的量的符號表達。數的第一含義就是大小,有了大小,兩個數就可以進行比較。從計數,我們獲得了自然數的概念,從測量,我們獲得了小數的概念。通過「切分」,我們獲得了分數的概念,而更一般的有理數、實數和複數概念則是在加入計算後、特別是通過解方程這一基本數學活動得到。

對於數的第二次理解是通過正負數和數軸我們獲得了方向的概念,數不僅有大小還有方向,只是此時數的方向僅限於 0°(向右)和 180°(向左)。而通過解方程,是我們認識了虛數,而虛數把方向擴充套件到了 90°(向上) 和 270°(向下)。

由於虛數的產生,我們對於數的理解就不再是一條直線上一字排開的線性序列,而有了立體感,數的幾何概念,變成了平面。要確定一個數,需要兩個部分,它的一般形式成為 a + bi。複數系的建立,有三個革命性的意義:
1. 數,不僅有大小、有方向,還必須有維度。有了維度,數的方向也就不再受限於幾個特殊方向,在平面上,數的方向可以是任何方向。
2. 加法,被賦予了新的意義:除了可以表示同一維度上兩個量的疊加,還可以表示維度的增加。例如複數的一般形式 a + bi,代表這個數是兩個維度的。
3. 數軸,作為數的幾何解釋,成為更大維度的座標系的一個部分。我們除了可以將平面直角座標系的 x 軸和 y 軸看作是數軸之外,還可以把這個座標系上的任何直線也當作數軸,也就是說,數軸也未必是水平直線,而可以是任何方向的直線。
有了任意數軸的概念,推而廣之,平面直角座標系,放在三維空間裡,也可以看作是空間座標系的一部分,這個平面直角座標系可以出現在空間座標系的任何位置。

所有這一切,使我們擴大了對「什麼是數」概念的理解。數,是一個複合概念,有大小、有方向、有維度。而這些,正是線性代數要討論的主題。

線性代數和我們過去學過的數學內容一個很大不同就是,它不再對個別的數學物件和運算,例如整數、有理數,加減乘除和解方程感興趣,它所研究的物件是整個數系——包含了大小、方向和維度的複合概念的數的整體。我個人覺得,這是現代意義上的數學和傳統意義上的「算學」的本質區別。我們中國有著非常令人自豪的數學傳統和文獻,例如數論中著名的 Chinese Remainder Theorem,就是關於一元線性同餘方程組的定理,說明了一元線性同餘方程組有解的準則以及求解方法。但是,中國的古代數學就像19世紀前的西方數學一樣,都是專注於特定問題的解決,例如義大利人求解三次、四次方程。這樣的求解具體問題的數學,在中國的傳統中被稱為「算學」,以算盤為計算器,求解特定的數學問題。而現代意義上的數學,亦即,從20世紀初開始的公理化數學,其研究視角,不再是個別的數學物件和數學問題,而是物件的整體——數學物件的集合。把數學物件的集合作為研究物件。這一點線上性代數、乃至所有數學領域中都得到了充分的體現。

對數學物件的整體而不是個別數學物件的研究,是現代數學的最大特徵。通過線性代數的學習,我們可以進一步深刻認識代數的本質:代數的物件是【符號】的集合以及在這個符號集合上進行【操作的各種規則】。反過來,這種將研究物件從個別數學物件擴充套件到一個物件集合的研究又對研究個別問題提供了洞見和方法。例如伽羅瓦的群論,為解高次方程指明瞭方向:為什麼五次和五次以上的方程沒有一般的代數解,有代數解的高次方程和沒有代數解的方程的區別在哪裡。而線性代數的最大應用也是用來解多元線性方程組。雖然我個人不太贊成「線性代數就是解線性方程組的學問」的定義,因為解線性方程組僅僅是線性代數的應用之一,但無論如何解線性方程組是是線性代數的非常重要的應用,是學習線性代數在重要組成部分。所以,我們這裡理解的現代意義上的數學(20世紀初開始的公理化數學),和傳統的以解個別問題的「算學」的最大區別就在於系統性,以集合與運算規則為核心概念的研究。

第三、線性代數的學習,使我們可以見識什麼是數學的代數化。我們在上面給出了代數的定義:
「代數是研究符號集合與該集合之上操作規則的數學分支」。這個定義的關鍵詞是「集合」和「操作規則」,確定研究物件的集合,例如、數的集合、函式的集合、向量的集合、矩陣的集合、多項式的集合等,然後確定在這些集合之上可以進行哪些操作,進而確定這些操作的基本規則——公理,然後從這些公理出發進行推理論證,產生數學證明,獲得數學定理。以這些公理、定理為工具可以解決許許多多的科學問題。把這一套系統理論化,我們可以得到一個抽象的數學概念:【結構】,這個過程就是數學的代數化。如果這個代數化的數學結構可以使用一階邏輯語言表達,就稱作數學的形式化,或者,該數學分支的公理系統。數學結構概念的建立和一階邏輯語言的完美對接,形成了數學結構的語言介面,這使得數學更加精密完整。但是,在數學家們對這樣的精緻的理論感到讚歎的同時,另一方面,對學習數學的初學者來說,這樣數學變成了晦澀難懂的天書,學習的噩夢,因為這樣的數學,使得一些完全可以用日常語言理解的概念成為了數學代數化、公理化、形式化的犧牲品,使得大多數人視數學為畏途,談數學而色變,數學成了少數學霸精英的樂園。

第四、學習線性代數,並不僅僅是學習其中的基本術語、概念,而是從中學習上面所指出的更本質的東西。但是現實是,所有的數學教科書、包括線性代數教科書在內,過多地強調了上面第三點的數學的形式化特性,以常人難以理解的一階語言語法,加上大量的、在日常生活中從未出現過的術語和高度抽象的概念,使得這門學問成為曲高和寡的陽春白雪。我們需要這樣的嚮導,不是從膚淺又高深的術語開始,而是從數學的本質出發,將那些抽象高深的概念抽絲剝繭,對接我們熟悉的現實世界。毛主席曾經說過:感覺到了的東西,我們不能立刻理解它;只有理解了的東西才能更深刻地感覺它。我們現在的數學教育,只是讓我們的孩子通過刷題「感覺」數學,而從未將「理解」作為數學教育的本質。

那麼,為什麼數學的學習要從線性代數而不是從其它數學分支開始?除了上面列舉的理由之外,還有以下幾點:首先,現代意義上的數學,是一個綜合體,它集成了本欄目公告欄中總結的六個方面。線性代數是這六個方面最典型的學科,也是學習其它學科的基礎。這個基礎就是上面所說的代數化——數學結構的學習。而與此相對應的微積分或者數學分析,是關於實數、連續和變化這三個概念的學問。但是這三個方面,只是數學本質的部分總結,我們現在尚無法完全對分析進行完全的公理化和代數化。同時,對於無窮、無限這些概念,是否已經從底層概念得到解決仍沒有定論。第二、最重要的是,在數學的物理化——計算機化的過程揭示了分析學中的的大部分概念是形而上的、抽象的、只存在於意識中的東西,無法落地、具現化。要將這樣的數學物件在計算機上實現,就必須要將其離散化,變成像線性代數那樣的有著實證的、物理的基礎的物件。例如,我們可以直接利用程式語言的資料型別編碼向量、矩陣、多項式之類的數學物件,卻無法描述理論意義上的極限概念。例如求面積,我們只能使用積分的數值解法,把無窮小的子面積ƒ(x)dx 離散化為一個確定的量然後使用有窮數量的加法完成整體面積的計算。而線性代數之所以能完美地和現代計算機上實現而不須經過所謂「數值化」亦即離散化過程。這固然和線性代數的本質——線性關係有關,但是不能否認的是,線性代數是完全代數化的數學分支,是學習數學結構——代數結構的最理想例項。有了對線性代數的深刻理解,就可以從代數結構的角度觀察、審視其它數學分支,例如數論,例如分析等。更重要的是,線性代數提供了一個平臺,使我們可以全面理解多種數學物件集合的共性:實數、向量、矩陣、函式和多項式,這個理解的基礎就是代數結構。有了代數結構,就可以派生許多其它數學分支:代數數論、代數幾何、代數拓撲、代數概率論,而微積分的代數化——代數微積分,目前也有人在嘗試。總之,數學的形式化就是代數化,用代數結構作為統一的介面,這樣就可以使用一階邏輯語言進行統一的描述,為未來的數學完全演算法化、自動化鋪平道路。

我在本欄目的公告欄中列出了數學學習的六個方面,這六個方面,也是我們學習線性代數的學習指標和方向。這裡再次列舉如下:
1. 系統學習什麼是抽象,抽象的過程、抽象過程後的結果、如何抽象,訓練自己的思維從具體到抽象,從低度抽象到高度抽象的能力,充分認識、熟悉、理解各種不同抽象度的數學物件。數學的學習,其實學習各種不同抽象度的物件,不但認識當前所學物件的抽象度,還可以降維,獲得抽象度較低一層數學物件的例項。理解抽象的現實工具是【集合】的概念以及相應的集合運算。

2. 學習數學的專用語言:一階邏輯語言。數學之所以晦澀難懂同時被標榜嚴密精確,和數學所使用的語言不無關係。雖然中外教科書都使用自然語言,但我們會發現教科書中的數學語言和我們現實生活中的語言有很大的差異,而且這種差異不是零散的、偶然的、個別的現象,而是系統的、全面的差異。本質上,數學教科書中的語言是一階邏輯語言的直譯。同時,數學文字中使用了大量的符號,包括拉丁、希臘字母,特殊的非線性符號,如和、積符號、積分符號,極限表示式、矩陣等。這裡需要注意的是:數學教科書中的定義只關心概念在當前抽象度上的意義,而不關心在下位抽象度的解釋和說明,如果學習者沒有達到和作者同等的抽象度的認知高度,那麼書中的定義、說明、解釋將是是毫無意義的,這就是數學難懂的最基礎原因。我經常被一些同學要求提供學習數學教科書,但不幸的是,絕大多數教科書都是數學專業人士的作品,他們只是在他們自己的抽象度中解釋需要解釋的概念,術語,而不會降維解釋。這就像你不會講外語,我再怎麼用外語解釋外語,你仍然聽不懂。所以,讀懂數學文字的關鍵,首先是學習數學的語言,包括作為詞彙的各種符號符號,一階語言特有的語法,格式,以及對所有表示式的語義的理解。

3. 數學的學習包括了計算和證明兩大活動。我們的教育這兩種活動的教學是單向的,從解決問題本身出發,學習如何解類似問題。華羅庚先生在《數學歸納法》曾經提到,應當從正反兩個方向解決問題,除了學會從教科書的示例從問題提出開始出發,獲得已知條件,需要解決問題的工具,設定輔助條件,按照一定的規則、定義、定理和邏輯推理解決問題,還要學會從問題的答案反推這個問題是如何產生的。同學們在解一道難題,是否想過出這道題的老師是如何設計這道題的,要設計這樣的題,需要哪些知識、包括數學知識、邏輯知識、知識合成、綜合分析判斷的知識等。因此解數學問題,其實是數學知識和邏輯知識的綜合能力的體現。另一方面,我們在刷題過程中掌握了大量的「題型」,卻不會從中得到演算法的概念,然後從演算法的角度理解做題的本質。第三方面是對證明題的掌握。證明題,說到底就是以數學內容作為推理論證的過程,除了理解各個數學物件之間的關係外,最主要的是掌握邏輯論證的方法,因為做證明題的過程就是邏輯推理的過程。

4. 數學抽象概念的例項化理解。這個和上面的第1、2緊密相關。我們通過學習抽象化過程,不僅可以將具體的物件集合抽象,可以將低抽象度的物件、概念抽行為高抽象度的物件、概念,還可以反向,將高抽象度的概念、物件、術語還原為低抽象度的概念、物件,把低抽象度的概念、物件抽象為具體的物件。這種從具體到抽象,從低抽象度到高抽象度雙向的轉換,是我們學習數學是最最重要、最基本的訓練活動。但可惜的是,現在很少有人注意到、意識到這個問題,期望有人在這個方面給予我們指導更是不可能。

5. 數學的抽象和哲學的抽象有很多相似點,二者都是從形而上的角度解釋世界。但二者的不同是,數學對世界的解釋是微觀的,詳細的、嚴密的、精確的,邏輯的,而哲學對世界的解釋往往是巨集觀的,敘述的,雜湊的,模糊的、定性的,邏輯的。如果認識到數學與哲學的這層關係,對於我們認識世界改變世界具有重大的意義。馬克思說過,批判的武器不能代替武器的批判;毛主席也說過,人類認識世界的目的是改造世界。我們通過對數學和哲學對比的認識,可以利用數學作為解決問題的工具,同時,在有了哲學高度之後,對這個工具會產生新的認識,甚至可以依靠這種見識作為創新的源泉。

6. 數學中存在大量的術語,在有了上述的見識之後,術語的學習就變成了對新符號的解釋問題。而解釋,按照邏輯學術語,則是對符號與模型之間的繫結過程——將數學術語與現實經驗的聯絡問題。

而實現上面的理念,線性代數是一個非常理想的平臺。首先,我們可以通過線性代數,理解任何數學物件都有代數幾何兩個側面,從而得到相關數學物件的抽象度,這個過程是我們訓練自己學會從具體到抽象,從低抽象度到高抽象度的轉換,訓練自己學會反向轉換;第二、學習公理化的形式語言——一階邏輯語言;第三、對線性代數中的所有抽象概念、術語,可以根據抽象度降維的方式得到深刻的獨特的理解。第四、通過做證明題,掌握邏輯論證的方法,做計算題,掌握演算法的概念,以演算法統領整個數學學習;第五、得到對所學習物件的高維度理解——哲學式的的理解。例如,向量空間,是一個抽象了所有多維物件集合體,它的例項表達可以是向量、矩陣、多項式、函式所抽象的所有例項的總和。這個問題的哲學命題就是——事物存在的方式、它們之間的聯絡以及運動(轉換)的方式。

今後的【線性代數】系列,將從微觀的角度探討下列主題:
. 作為所有數學基礎的【集合】,【結構】,這是學習線性代數和其它所有數學知識的前提和必須;
.【數】的起源:計數與測量;理論化:德國數學家外爾的「座標化」
.【基】,是所有離散化數學物件的基本元素,是學習線性代數的起點
. 加法運算和乘法運算:是定義任何線性空間的基本工具;標量/純量的概念
. 代數結構:集合 + 操作規則,線性代數是如何實現這個框架的
. 向量空間:複合代數結構,雙代數結構的例項
.【基】概念在向量空間定義的基礎:張成、線性獨立性
. 一階語言線上性代數的應用:公理化表示
. 解方程組:數學的演算法化和計算複雜性
. 對數學物件的度量:行列式與內積空間
. 矩陣與運算元的概念
. 特徵值與特徵向量
. 向量的變體:多項式——如何從高抽象度理解向量與多項式的統一
. 線性轉換:向量空間內的動畫科學與藝術
其它話題,將隨時更新。

本系列作為將數學核心內容與邏輯融為一體的初步嘗試,我將稱之為「邏輯數學」—— 形式系統與代數結構形成的代數公理系統的例項——向量空間。這個嘗試的目的則是通過一門最典型數學分支——線性代數展示數學邏輯中的形式系統,代數結構,形式語言的句法和語義,然後降維到一個合理的抽象度,以獲得真正的理解而不僅僅是做題技巧上的熟練。

本系列的真正目的,是探索一條新的、更符合線性代數知識邏輯規律的、使初學者更容易接近的線性代數教學體系。

未來筆記系列中的思想靈感除了我的書單開列線性代數教科書、專著以外,還來自於下列三部文獻:
<a href="https://book.douban.com/subject/25862912/">沙法列維奇《代數的基本概念》</a>,不過我讀的是<a href="https://book.douban.com/subject/2868177/">英文版</a>
<a href="https://book.douban.com/subject/2036531/">柯斯特利金《代數學引論(第一卷)》</a>
赫爾曼·外爾的講義稿《The Classical Groups》關於 coordinatization 的概念
這三本書都不適合沒有基礎的人自學,但如果你是數學物理學計算機專業且有導師輔導前兩本書是非常好的參考書。