大人,時代變了!||Mathematica學習記錄

//這是一篇關于Wolfram Mathematica的文章,主要記錄軟件學習過程中的一些困難與感想
//本文基于Mathematica 11.3編寫。

摘要
本文記錄了筆者學習Wolfram Mathematica軟件的過程、遇到的困難與一些簡單的應用。文章中簡單記錄了軟件的基本使用方法、筆者在學習過程中的遇到的多種Bug,以及筆者在計算機基礎等課程中對軟件的應用。
1. 認識Mathematica
我首次見識Wolfram系列產品是在三年前,那時我還是個有夢想的物理競賽菜鳥,而我遇到的第一個難題正是:微積分!(感謝當時的我在徐van♂強的"數(shù)學基礎知識補充"下活了下來)經過幾個月艱難的思考,剛剛勉強看懂定積分的我立刻又要面對一個更大的難題:如何求原函數(shù)!啥是三角換元?啥是分步積分?這玩意怎么算出來的?
這時候,同學手機里的Wolfram Alpha秀出了它的首殺!那是一個讓我絞盡腦汁也算不出來的不定積分,記不太清但是它大概長這樣...
同學默默打開了手機里的Wolfram Alpha,并輸入原函數(shù),然后我就看到...

連計算過程都能給我寫出來!這是我第一次見到有軟件能把不定積分這么困難的東西處理得這么完美!
再后來,高二暑假在廈大的蘇國珍教授的競賽課上,(教授真的講得很好!)我再次感受到被Wolfram產品支配的恐懼。我還記得教授聽到我們反映有的例題計算量太大算不出來時的回答:“這個你們算不出來嗎?太難算了?我是用數(shù)學軟件算的...” 沒錯這個數(shù)學軟件,又是Mathematica...這兩件事讓Wolfram產品給我留下深刻的印象,于是來到大學有了自己的電腦后,我裝上了這個軟件,并打算讓它像以前一樣終結那些難題。
2. 基本操作與簡單應用
當然,要讓它發(fā)揮作用還沒那么容易。畢竟Mathematica本質上是一種計算機語言,特別適合數(shù)學計算,但同樣有局限性,同樣有Bug。要用好它是需要時間的。好在我們學校的一本計算機教材里面有一些簡單的教程,[1]以及這個軟件自帶了非常詳細的幫助文檔!

于是就開始照著案例學了起來。先來個簡單的計算...

還算簡單,只要注意調用函數(shù)用方括號,所有函數(shù)都需要首字母大寫。
再來算一個極限...
這里就遇到了一個困難:這里的x→∞的“→”是怎么打出來的?看看書上的源代碼:

再看看自己的鍵盤...沒有右箭頭?。吭俸髞?,突發(fā)奇想:
(用減號和大于號組成的箭頭也太抽象了吧!)
稍微熟悉一些函數(shù)之后,就來砍一道高數(shù)題練練手吧...[2]
聽說有的不定積分很難?
不好意思,秒了

到這里我的大腦中一直回蕩著的聲音是:“大人,時代變了!”
3. 微分方程終結者
作為一個物院人,每天的日常之一,當然是微分方程:
有了Manthematica,人手能算的它幾乎都能算...
不過,也并不是所有微分方程都能算出解析解,比如大角度單擺:
可以用NDSolve命令帶上初始值數(shù)值求解,

也要記得把結果可視化,否則就只是一堆數(shù)字。定義函數(shù)存儲前面的計算結果:
大家可能注意到這個First[]有點不好理解。這也是我遇到的最大困難,畫圖經常畫不出來,后來向同學求教,知道了Mathematica的一個極為神奇的設定:大家可以看看前面的圖六中的輸出,輸出結果外面帶著兩層括號!這也就意味著這里的y[t]/.s1或theta[t]/.s2被認為是數(shù)組,而直接用數(shù)組作為輸入進行作圖就會出Bug。所以用First提取了數(shù)組的第一個元素(唯一的元素)才終于解決了這個問題。計算成功的界面:

4. 大人,時代變了!
有了強大的軟件,許多過去難以完成的計算現(xiàn)在變得可行了。我的計算機大作業(yè)就是《基于Mathematica求解混沌擺運動》;在力學大作業(yè)的理論分析里也利用到了Mathematica對微分方程的數(shù)值求解。
在計算機大作業(yè)中,我和物院同班一位同學主要負責的是物理建模和程序的測試(約等于絕大部分工作...)(是我高估了組里的數(shù)院人,真就從建模到微分方程再到軟件使用都不懂啊)(不過選題也比較倉促,沒有考慮到組內平均水平也是我大E了啊)那么以下簡單描述一下理論模型:
兩個質量為1kg, 長度為1m,粗細可以忽略的細棍首尾相接,并懸掛于固定點,所有連接均為光滑鉸接。給定初始值,求解自由端的運動。我們直接采用分析力學求解。分兩種情況討論:
(1)擺動限制在一個豎直平面
如圖,此時決定兩個細棍位置的廣義坐標只有α,β。

寫下系統(tǒng)的勢能:
以及動能:
然后就是萬能的拉格朗日方程:
其中.?再給出合適的初值就可以用軟件數(shù)值求解這些微分方程了。(當然這些微分方程組都沒有解析解)
轉換成代碼:
再畫出自由端的軌跡:
結果如下...

甚至可以做出動畫:
輸出結果(計算量挺大的,耐心等待...)

(emm...B站投稿的文章好像放不了動圖啊)
(2)擺動可以在球面內進行
我們取消之前設置的平面約束,這樣的話每一根棍都需要兩個廣義坐標描述位置了,不妨設為
這理論就有點復雜了,需要我翻開我的理論力學[3]
簡單來說,發(fā)生復雜變化的只有棍子的轉動動能:
其中
是棍子垂直方向的角速度。而平動動能與重力勢能形式和原來差不多,直接上代碼:
然后,可視化輸出:
就可以看到

還有...

然后最后大作業(yè)展示的時候我們上去一通瞎編,成功迷惑了助教和老師...現(xiàn)在計算機課還沒出成績,但愿這個大作業(yè)效果還可以...
而在力學大作業(yè)中,我們面對的問題是...分析小球在旋轉平面上的軌跡...
If you put a light rolling object (e.g. a ring, a disc, or a sphere) on a horizontal rotating disc, it may start moving without being expelled from the disc. Explain how different types of motion depend on the relevant parameters.?
事實上實驗觀察到的小球軌跡相當鬼畜...滾動摩擦不能忽略,這導致了決定小球運動的微分方程是非線性、無法求出解析解的:
此外這個微分方程的因變量是復數(shù),本質上是兩個常微分方程分別描述x,y方向的運動。這是由于我采用了一個常用小技巧:用復數(shù)表示平面上的位置,復因子作為矢量旋轉因子,這個思路在之前求解傅科擺時也曾使用。

現(xiàn)在問題就在于這個帶復數(shù)的微分方程還能用軟件數(shù)值求解嗎?
直接上代碼試試:彳??!

所以這是我學習過程中一個比較重要的發(fā)現(xiàn):數(shù)值解微分方程是可以在復數(shù)域進行的。
總結
一個強大的模擬計算軟件可以讓一個物院人獲得快樂,并極大降低了作業(yè)難度工作量,可以讓我們更加合理地分配時間,把精力花在更有價值的問題上。但是,實際學習過程中我們也會發(fā)現(xiàn),Mathematica仍然有一定局限性。
首先是算力有限,在一些特殊情況下軟件求解的計算量會非常大,例如本文中提到的混沌擺,其實如果把前面貼出的代碼全部走一遍是要好幾分鐘的。
其次有一些情況使用軟件求解的算法可能無法正確處理一些不收斂的點,使得有時候軟件需要很長時間才能給出結果,或者直接報錯;在這些情況下手算技巧的重要性也就體現(xiàn)了出來。
所以,Mathematica不是萬能的,它可以代替我們完成計算,但不能代替我們完成思考與理解的過程。我們需要合理利用,同時也保持一定的手算能力。
參考文獻
[1] 趙宏 等. 大學計算機應用經典案例[M]. 北京:高等教育出版社,2020.8,101~113.
[2] 由同順 等. 高等數(shù)學(上冊)[M]. 天津:南開大學出版社,2016.9,199.
[3]?周衍柏. 理論力學教程(第二版)[M]. 北京:高等教育出版社,1985.9,281~287.