王磊 程明松

【摘要】學數學的本質在于學習一種思維方法.大學數學課程的學習要更注重學生邏輯思維的培養,應避免學生采用為做題而做題的“題海戰術”.本文結合算法思維,嘗試從計算機語言的角度梳理高等數學中微分方程這一章的思想框架.以算法思維來求解微分方程的題目,并通過完整的“算法框圖”展示算法在哪些問題上有效.學生在初學階段,可以通過這一過程逐漸加深理解思維的邏輯性并對整個課程中涉及的微分方程的知識圖譜有更全面地認識,從中體會算法思維對學習數學類課程的“奇妙功效”.
【關鍵詞】高等數學;算法思維;微分方程;教學研究
一、算法思維與高等數學
隨著阿爾法狗2.0完勝柯潔的新聞播出,象征著人類頂級智慧的圍棋也成了人工智能的手下敗將,從國際象棋到圍棋,這中間經歷了幾十年的時間,甚至我們一度以為圍棋對計算機來說“太難了”,卻在此時敗給了機器人.更耐人尋味的是,完勝柯潔后的阿爾法狗宣布封機、不玩了,就好像說,跟人類下棋毫無挑戰一樣.很多人不得不承認,當今時代是算法的時代,未來是人工智能的天下,是計算機的天下,借助人工智能已是大勢所趨.很多年前,國際象棋的選手們就在接受人工智能算法的“訓練”,如今圍棋也不可避免地獲得了同等的待遇.一個很重要的原因是,算法思維提供了一種可能性,是我們正常的思維邏輯永遠不會考慮的一些方面,或者我們已經形成了思維定式,無法從中跳出,而一旦跳出,很可能會別有一番風景.
這種計算機思維或者算法思維能幫助我們學習高等數學嗎?或者我們這樣去思考,如果計算機都能解決得很好了,我們還要不要學了呢?如果學的話要怎樣去學呢?本文將嘗試用算法思維來復習或總結微分方程這一章的內容,并希望通過這一過程能減輕初學者的厭學情緒,尤其想到這些內容連只有線性邏輯的計算機都能做到,我們為什么不行?我們還會發現,與算法程序相比,人類自身一些獨特的優勢仍是計算機目前階段無法比擬的.
《高等數學》無疑是大學期間最重要的一門基礎課,學習起來的滋味一定讓剛剛入大學校門的學子們印象深刻.如何才能學好呢?有很多同學上課都會,看書都懂,但其實大多數同學只是停留在了“眼熟”的階段,距離“理解”還差得很遠,而這需要通過做題、測驗和考試來增加反饋,大學期間的課程教學與初高中相比,最欠缺的就是這種閉環.我們并不是說大學需要題海戰術,但必要的練習量是學好這門課不可或缺的.
二、計算機如何求解微分方程的題目
我們設想一下,如果一道微分方程的題目讓計算機程序去求解,它會怎么做呢?在這個過程中我們又可以得到一些什么樣的額外收獲呢?
我想,“要把大象放冰箱只需要三步”,利用程序解決一道微分方程的題目也只有三步,首先,要“認出來”對象,程序需要把題目所有的“偽裝”都去掉,也就是說,先分辨要求解的到底是哪種類型的微分方程,程序做這件事很容易,通常就是把最高階導數前的系數變為1即可,這就得到了微分方程的標準型;其次,“對癥下藥”,根據第一步得到的標準型設計求解的具體流程;最后,驗證一下得到的解是否滿足原方程并輸出.
可能有同學會問:真的如此簡單嗎?其實面對很多問題無從下手往往只是因為第一步沒有做,也就是題目可能設計了一些干擾性的偽裝讓你一下子沒有認出來要求解的對象到底是誰.一旦研究對象被識別出來了(實際上需要在這個階段掌握的標準型也少得可憐),就可以利用相應的求解方法對其進行求解,而每個標準型的具體解法,也沒有超過兩種的.總的來說,我們需要預置的“求解模塊”也是有限的,即使需要把所有的可能模塊都算一遍,對當今的計算機來說可能連小菜都算不上一碟吧.
我們來看看具體的算法框圖.(如圖1)
下面的框圖當然并不像數學那樣嚴謹,也不是所有的題目都可以用這個流程求解出來,比如,我們看這樣一個例子:y″+y′=1+e-2x,按照計算機的程序可能直接會被當作二階線性非齊次微分方程來處理,這會讓計算變得異常煩瑣,計算機可能不在乎,但在考場上的學生可能會受不了.所以剝去外面的偽裝,真正辨認出研究對象的本質才是最關鍵的.如果能看出來這個方程不顯含y,直接可以降階化為一階的微分方程進行求解,問題就會簡化很多.當然,我們還可以利用線性疊加原理將方程的右端分為1和e-2x兩部分,分別求兩個微分方程的解,再把這兩個解疊加起來,這未嘗也不是個好的解決思路.無論是哪種策略,這可能是目前為止我們能比計算機做得更好的一點.
三、算法的局限
雖然我們的算法流程不是萬能的,但仍然可以從中感受到算法思維或者計算機程序到底是怎么工作的,那就是“化繁為簡”.只需要處理幾種標準類型的問題就可以了,而其他復雜問題就通過“標準化”的過程化成其中某一種類型.這何嘗不是數學追求的境界呢?很多人誤會了數學,以為數學太抽象了而覺得煩瑣,其實越抽象的才越能說明本質,我們只要弄清楚了最抽象的,其他的知道怎么化標準型就好了.
假設用這套算法流程去求解高等數學里微分方程的問題,再假設已經積累了足夠多的求解過程,那這個程序本身還能帶給我們什么信息嗎?我們還可以把這個框圖看作是一個復雜網絡,
從這個角度來看,
我們會發現有些節點被大量使用,而有些節點很少觸及.那些使用率非常高的節點對應的知識點就是核心內容,比如一階方程中的分離變量法和常數變異法,二階方程中的常系數齊次方程的通解形式,這些都是必須要掌握的.而有些知識點涉及的非常少,比如變系數的歐拉方程、非線性的伯努利方程,這些盡管不常見,但這些也都是不能忽略的,只需要記得認出來后如何做相應的變換就可以了.
著名的計算機科學家格里高里·蔡廷(Gregory Chaitin)曾經指出:“計算機不僅是一種極其有用的技術,還是一種具有革命性意義的新數學,它帶來了深刻的哲學后果,它揭示了一個新世界的面紗.”科學和數學正在開放、擁抱程序性思維.算法思維,并不是對一些已經設計好的內容進行反復背誦,而是自己對于問題的抽象能力的練習,即從抽象問題到解決實際問題的一個能力.算法思維經常會讓人們誤解它只會堅持原則,缺少靈活性,從圖1上看,算法規則的邏輯性越強就越顯得“呆板”,尤其對需要降階的高階問題來說,往往要多走幾步“冤枉路”了.然而,這不能理解為是算法本身的“僵化”,其實恰恰相反,算法思維不僅能夠堅持原則,還可以兼顧更多,這還需要我們為其添加更有效的判斷準則.對微分方程這一章內容來說,隨著學習的不斷深入,題目的不斷積累,我們會“自發”地找到一些關鍵的“局部”特征,這樣在每步判斷的時候就可以再增加一定的“輔助”信息,幫助我們設計更好的求解方案.
最后,本文還是要強調這里的“算法思維”只是幫助我們學習高等數學的一種輔助手段,通過算法思維來增強自身邏輯性、嚴謹性的思考.具體的解題過程并不是我們關注的重點,通過做題對所學內容和知識框架有更好的理解才是最終目的.比如,很多求解的方法只對線性微分方程才適用,其中蘊含了什么道理?這里的線性到底指的是什么?能不能和線性疊加原理放到一起去思考?通解的結構為什么要求一種不相關性?微分方程的解為什么可以通過求解對應的代數方程來得到?這些疑問只有都想清楚,才能說明我們對這部分的知識體系有了更高級的認識,而這也是計算機程序和算法思維無法做到的.
【參考文獻】
1.金正國,金光日.工科數學分析基礎[M].大連:大連理工大學出版社, 2008.
2.樓紅衛,微積分進階[M]. 北京:科學出版社, 2009.
3.李繼成, 數學實驗[M]. 北京:高等教育出版社, 2014.
4.樓紅衛,常微分方程[M].上海:復旦大學出版社,2007.