如何學習計算物理課程?
不自量力扯幾句建議。因為大老闆經常教育我們:「你們要知道電腦除了打遊戲以外還可以干點別的事情。」
我自己上的計算物理課是兩個老師各講一個 4-6 次的小系列課程,兩個老師的研究工作分別是 hard / soft condensed matter,這一點影響的是兩人隨手舉的例子會有不同側重,但並不影響主要內容。所謂主要內容,根據兩位老師的分工,主要包括隨機數、誤差分析、數值積分、微分方程數值解、Monte-Carlo 方法、分子動力學模擬這些。課程里做過若干次小作業;兩次大作業提供了一些備選題目,我挑的是「比較用不同方法解阻尼諧振子的收斂性」和「2維 Ising 模型的 Monte-Carlo 模擬」。
這些作業的代碼量都不大,即使如我這般對寫程序並不擅長的人也可以花一天碼完。語言其實不是計算物理的主要內容。前一位講課的老先生,在講到語言問題的時候說我們比他幸福很多,然後隨手展示了一段 Fortran 最早期版本的樣子。
但相對的,圍繞著計算,有各種可以訓練的能力。
1. 很多演算法手工實現一下,敲一遍加入自己的自建庫,然後可以在很多場合調用。當然,如果是目的很明確的數值計算,那還是數值軟體方便點。這個時候,應當學會怎麼搜索你需要的輪子以及如何讓別人的輪子為自己轉起來。
2. 結合第 1 條,如果是比較成熟的 project 大概不會碰到,但在某些小 project 的初期大概會有一些自己奇怪的腦洞想試一試——比如調整某個假設,看看對結果的影響——但已有的程序未必支持你更改這種假設。這時候,可以通過自建一個(可能是相當粗糙的)數值模擬,得到最初的感性認識,這對學某些模型是很重要的。
3. 想做理論的多學一點 Mathematica,弄明白怎麼算積分,怎麼算矩陣,怎麼算費曼圖(at least tree level),可以應付很多場論的作業(劃掉)。碰到有些判斷可積性的時候,可以先試試這個。Mathematica 在 hep 方面有些第三方庫很棒。比如前面說的算費曼圖,比如大老闆介紹過一個庫叫 Ricci,用於和廣相有關的一些計算。
4. 寫報告時的數據分析、誤差分析,Error bar 對於結果很重要之類的,我是在計算物理才學到的。其實主要是實驗課要求水(劃掉)
5. 各種作圖軟體。有些數值軟體計算完之後可以通過內嵌的作圖工具/自帶庫可以畫圖。但多掌握些畫圖工具是很不錯的,比如 GNUPLOT 之類。
6. 寫報告,該用 TeX 了。如果在這之前沒有其它課要求學的話,至少在學計算物理的時候順便把 TeX 給學會。這應該也是一個基本技能了。
7. 最終還是要回到物理本身上來,了解一下計算物理的內容和你在課上學的理論是什麼關係,和你在實驗室中碰到的問題是什麼關係。積累關於什麼樣的問題是可算的、什麼問題是數值辦法解釋不了或無法解決的印象。發現自己的興趣與這些東西符不符合等等。
Best!
謝邀。。。
多讀文章,多動手做不自量力的可以試試,原則上先做勸退。
計算毀一生,量化窮三代。勸退一人,勝發nature。
計算是一門永遠要不停學習的科目。量子力學,統計力學是最基本的科目根據你研究的尺度不同,大致有用量子力學(Ab-initio or DFT)去算的,也有用力場(Force field)去算的。如果計算非周期性體系:Gaussian, Orca, ADF 都是新手比較好入門的軟體,其中Gaussian和ADF是比較User Friendly的;計算周期性體系,尤其是固體:VASP, quantum espresso, SIESTA 都是比較優秀的軟體。學習軟體有很多種方式,網上有有實例訓練,遇到不會的多讀說明書,算出來會不會分析另說。
隨著你學習的深入,你會發現,軟體看起來不難啊,但是基礎知識是越來越不夠了啊。這時候你該學習量子力學了,搞清楚你所需要的hamiltonian是怎麼來的,幹什麼用的,怎麼分析。當學會了這兩門課程,你開始慢慢有了些心得。但是你發現你做計算實驗的速度真是慢的不得了啊,每次都要手動修改數據。這時候你需要著手開始學習腳本編程,例如Bash,Python這些語言。會寫腳本了,你原來一下午弄完的東西,現在不到一個小時就搞完了,該幹什麼呢?你又覺得,光做模擬還不行,得做方法。這時候你開始學習FORTRAN或者C,當然Python還是很有用。你開始搞不清楚矩陣怎麼運作,你又要惡補線性代數。當你搞定了線性代數,又發現演算法上搞不懂啊,很多方法沒辦法實現。你又要開始學習numerical methods這些東西,然後你開始沉醉於各種演算法的精妙之中,認真鑽研不同演算法的優劣。這時候你發現只是演算法精妙不好使啊,並行計算也十分重要的,你開始學習MPI的相關只是,切換與C, FORTRAN, Python各個語言之中。當別人問起你哪個語言最好用的時候,你頭頭是道的講了出來。偶然間,你發現程序猿工資好高啊,當你投出了幾個薪水誘人的position的時候,人家看你用FORTRAN寫程序,笑掉了大牙,你開始學習了JAVA,C++等等economic language,然後你發現,這才是正道啊。這時,你想起來某天知乎上那位勸退你的網友,默默留下了感激的淚水。沒別的,就是干
推薦閱讀:
※Metropolis蒙特卡羅方法、動力學蒙特卡羅方法、分子動力學方法這三種模擬方法有何特點與差異?
※在美國讀計算材料學的前景如何?
※北京計算科學研究中心的科研實力怎麼樣?
※現在凝聚態物理理論研究是以解析方法為主還是數值方法為主?