如何從零開始學習計算化學?


好吧,回答前我們先來段勵志小故事。這幾年有個軟體叫「ORCA: An ab initio, DFT and semiempirical SCF-MO package」,這是個免費閉源量子化學計算軟體,據說特長是生物無機裡面經常涉及到的多組態計算。這種計算對其他常用軟體,比如Gaussian等,還算是比較苦惱的。這個軟體的主要作者 Frank Neese就是做無機出身,現在已經是業內大牛了。

http://www.thch.uni-bonn.de/tc/orca/

http://www.mpibac.mpg.de/bac/mitarbeiter/neese/neese_en.php

言歸正傳。

計算化學的內容一般包含量子化學計算和分子動力學模擬。或許前者占更大比重,但從目前的趨勢來看,後者將會變得同樣重要。分子動力學模擬傳統上指用經驗參數(力場 etc.)+牛頓力學來處理具有大量粒子的體系的平衡、演化過程。但現在基於量子力學的動力學也可以算一些小體系了。

然後就是您想學到什麼程度了。如果只是想能用某些軟體算某些自己感興趣的性質的話,這個要求還是很容易達到的。先找類似的文獻,看人家怎麼做,然後重複一遍,把關鍵的數據自己從頭到尾做一遍出來,這樣就可以認為是會算某個東西了。據我所知很多人都是這麼號稱的。

如果想深入一點,想知道軟體是怎麼算的,為啥這麼算,或者軟體是怎麼寫的,需要補的課對於化學口出身(這裡指國內本科)的同志們來講可能多了一點。再次結束吐槽,假設題主問的就是這一塊。

一般來說理工科的本科生都至少有兩個學期的微積分、兩個學期的普通物理以及一個學期的程序設計(或者計算XX之類的課程),這些基礎假設是具備的,也就是題主說的「零」。

首先需要量子化學的知識,往回是量子力學以及一點點多體理論。學量子力學最好學過一點點分析力學,至少知道Hamiltonian是怎麼來的。這裡需要的數學基礎包括一點點矩陣的知識,行列式要知道,熟悉線性變換。知道一點複變函數的東西,包括積分和留數。會解簡單的微分方程,比如諧振子的薛定諤方程很重要。熟悉傅里葉變換對某些問題會很有幫助。有點群論的知識對某些定性分析也有幫助。

如果對計算本身感興趣的話,C、C++、Fortran至少熟悉一個,另兩個能讀懂。能熟練使用一門腳本語言,主要是Perl或Python。知道怎麼調用某些數學庫,比如BLAS,LAPACK,fftw等。

想來想去貌似必需的東西真不多,而上面這些也不需要一下都準備好,用到的時候再學就是了。


謝 @薛金澤邀,對題主的問題可能不是很切題,但是希望能對 @薛金澤同學有所幫助。

我水平不高,只能講講我個人從零開始的經歷,不是唯一路徑,更不是最優路徑,僅供參考。

和任何學習一樣,開始都是極為緩慢的。現在想起來進入理論化學最早的端倪是大一入學時和某物院招生老師的一次談話。他告訴我的最重要的信息之一就是:化院開的高數C和選修的線性代數太簡單了,微積分熟練程度起碼應該達到物院的水平。所以大一時我是拿物院的高數課本上的化院的課,做的也是高數B的習題。然後根據該老師的建議,大二大三又選修了數院開的統計學雙學位,由此學了一些縮水版的數學分析和高等代數,還去蹭了應用數學雙學位里常微分方程的課。感覺這些早期的數學訓練並非是完全必要的,但是對於養成良好的理論素養是比較重要的。多數沒有經歷這些訓練的化院學生就感覺比較缺乏進行嚴密邏輯推理的能力,在後面做具體科研工作的時候就會體現出來。另外,後來會發現統雙里學過的概率論,數理統計,時間序列和高維統計分析等課程對於學習後來學習蒙特卡羅等方法還是有很大的幫助。當然題外話,這些概率統計知識對於你日後做不下去的時候轉行其實更有幫助...

學這些基礎數學課的時候還比較盲目。第一次真正對理論化學感興趣是在學結構化學的時候。我現在依然認為把結構化學放在大二的位置上有點過早了。總之當時儘管考試考得不錯,但是其實有一半的內容根本沒有透徹理解,而且積累了大量的疑問。這些問題的解答大概要等到大三學習過一門叫中級物理化學的課才得到解答。而其實中級物理化學就是化院縮水版的量子力學+統計力學。而這兩門課(量子和統計力學)就是本科階段理論化學的核心課程。個人感覺結構化學的講授方式實用主義傾向太強且很不嚴謹,有志於理論化學的學生不應該滿足於這種一知半解的課程,而應該進一步學習真正的物理,學會怎麼從幾個基本的假設出發構建整個理論體系,也要學會理解其中蘊含的真正的physics,學會理解物理學是如何根據physics做近似的。我當時比較懶沒跟同學去蹭物院的量子力學,但是去蹭了電動力學和平衡態統計物理,同樣是加深對基本物理的理解。此外大概在大三升大四那個暑假自己啃了一下數理方法,基礎很不紮實,不過好歹該見過的特殊函數和特殊方程都算見過。有了這些數理基礎之後,在大四的時候開始和低年級研究生合上量子化學,這個時候基礎其實比大多數研一學生要好了,只要老師稍微靠譜一點聽懂量子化學應該不是太大的問題。

本科階段的學習還有一條線是編程線,這條線我基本放棄治療...當時計算概論教C語言的某老師極度扯淡,所以編程語言基本靠自學。大一下演算法與數據結構講的還不錯,不過到大三大四進實驗室的時候也都基本忘了,所以大四在組裡像繡花一樣寫代碼,天天被師兄虐。不過那時候在組裡被師兄強迫學python,後來證明是非常有意義的。

以上是我的本科階段,現在看起來很充實,也走了不少彎路。總體上看統雙的學習佔用了太多時間,數理方法學的不很紮實,所以現在對復變積分都有點恐懼感。此外四大力學中沒有真正系統學過理論力學,也沒學過光學,有點遺憾。總之本科階段應該注意以下核心課程:

高數/數分

線代/高代

概率論/數理統計

計算概論/演算法與數據結構

量子力學

統計力學

數理方法

量子化學

其他的數理課程根據自己的能力和興趣做適當深入。應當強調不管是數學還是物理都有大量更深刻更有意思的東西,不要貪多,量力而行...(我上的課是我某些同學上的課的真子集,不要跟那些學霸比...)

然後是博士階段,這個階段才算是真正進入理論化學了。首先是研究生級別的量子力學,統計力學和電動力學(你會發現這些課程在本科時囫圇吞棗上一遍是不夠的,還要學第二遍...),然後又學了一遍量子化學,因為要做材料,所以學了固體物理。同時在導師要求下啃了一下FrenkelSmit,學了一下怎麼做MC和MD。這階段很多時候就是邊學邊用了。今天這邊課上講完布里淵區,明天做research就要調k-point sampling。博士階段主要是學習實用技術的爆發期,你會看到很多學過的理論是怎麼具體應用到實際科研中來的,這些具體的例子反過來使得那些抽象的理論的圖像更加清晰,理解更加深刻。科研要求以非常快的速度學習大量的新技術,你會學到無數聽上去十分高大上的術語。但其實歸根結底這些技術其實是早就學過的基礎理論的具體應用。前期理論基礎打的好的話學這些東西其實很快。

我個人在博士階段另一個比較大的提高是計算機能力。編程能力這東西就是大量的具體工作磨練出來的。在計算機上去具體實現幾個想法比單獨看書有效率的多。其他什麼寫腳本啦,什麼debug啦都是熟能生巧。只要平時留心積累,就能越變越好。此外必須掌握的一個技能是閱讀別人的代碼並根據自己的需要篡改他人代碼,這其實是我大多數時候在乾的事。

最後強調一下博士階段提高水平最重要的方法:看文獻,看文獻,看文獻(因為重要所以說三次)。看文獻不要貪多,不要就記個結論(比如哪個泛函更適合算哪個體系什麼的,這種結論記下來沒什麼意義)看一篇就搞懂一篇。看完之後問自己這些問題:這篇文章提出現在的某個領域有哪些問題,原因是什麼?這篇工作是如何解決這些問題的?為什麼這樣能解決這些問題?為什麼前人的方法解決不了這些問題,區別在哪?我真的理解作者的思路了嗎?如果是我這個問題應該怎麼做,有沒有其他更簡單的路子?你覺得作者真的解決問題了嗎,還是在忽悠?當然很多時候會發現很多地方看不懂,這時候不要死磕,也要學會跳過一些瑣碎的或者是難以理解的推導先抓住大局,然後回過頭來慢慢消化。花時間看文獻是增長B格最有效的方法。

就這樣,B格過高,先匿了。

-----------------------------------------------------

2016-08-17 取消匿名


第一條回答得很不錯。另外想說得是,計算化學裡面無論是哪種語言還是哪種軟體都只是工具,關鍵還是,你想解決什麼化學問題,如何解決,說到底最關鍵得還是化學基礎。量子化學,動力學,熱力學,統計力學,這些都要好好順一遍。概念要清晰,糊裡糊塗的知道一些公式名字,會算幾個考試題是沒什麼用處的。最後,如果是分子動力學計算,這很接近實驗化學,應該多了解實驗化學關注的問題,實驗的方法,才能準確的找到最有效的解決問題的策略。


以前還真是沒注意,Frank Neese本科是學biologie的。但應該博士期間就正式入行了吧,即使這樣,也是十年磨一劍啊。

其實計算化學就是計算機上的物理化學。系統的物理化學知識包括量子力學,統計力學,分子光譜和反應動力學。

這些理論只是給你了合適的背景和功底,但離」計算「還差兩步:

1) 正如Dirac所說, 「The fundamental laws necessary for the mathematical treatment of a large part of physics and the whole of chemistry are thus completely known, and the difficulty lies only in the fact that application of these laws leads to equations that are too complex to be solved.」 從理論到可處理實際問題的演算法,存在巨大的鴻溝,而過去60年的主要計算(理論)化學的進步就是在開發新的計算方法。方法主要包括是電子結構計算和分子模擬。前者是量子力學和分子光譜在實際中的延伸,而後者是統計力學和反應動力學在實際中延伸。

2)有了方法,還需要實現」implementation「,簡單點,就是寫程序。寫程序不難,寫好難。先是能用,再是別人能讀懂,最後是能並行化。這裡需要的知識是科學計算和軟體工程。學習前者是為了能寫能用的程序,學習後者是為了能最後讓自己的程序為他人所用。

當然,計算的最後目的是為了解釋機理,預測現象,這裡仍然是有很大的門道和需要很多經驗。

對於多數人,計算方法+科學應用 = 計算化學,也就是說你只需要明確需要計算的目標,然後尋找和學習現有的工具即可。

對於少數人, 理論背景+計算方法+程序實現+科學應用 = 計算化學。

前者易,後者難,but the hard way and the right way are usually the same way.


簡而言之,不要慫,上完本科微積分後直接上量化入門課,認真的上完它,熬完再說。

我就是從零開始學習計算化學的量化PhD。(當然,誰都是從零開始學的。(不過這不是重點...))。上一門量子力學的入門課程或者公開課,比自己一開始瞎自學效果要好很多。入門難,要心平氣和的上完入門課不容易,你會發現有很多很多很多很多....不會的地方,但是要熬過去,先嘗嘗味道再說。具體我在後面有說。

1. 怎麼入門?

這個『從零開始學』這個問題概念有些模糊,因為一不知道你的基礎,二不知道你為何學習(具體的方向),三不知你要學到什麼水平。但是不管之後要什麼水平,首先都要入門量化基礎課。

但是要入門基礎課需要什麼呢?正如前面所說,在有微積分基礎後就可以先上課入門了。誠然,關於線性代數什麼的那些在更高級的計算化學裡有用,但是只是入門的話需要知道什麼到時候學什麼就好了。這點在美國本科量化課程體現的很明顯。我在美國當量化課程(用的Donald A. McQuarrie的Physical Chemistry-A molecular approach教材)助教的時候,絕大多數本科生都是沒有學過線代的,不知道行列式怎麼展開,不懂Tylor Expansion是什麼鬼,甚至個別人微積分只是高中水平。但是這並不妨礙他們入門學習並且一直從Particle in the box, Harmonic Oscillator, Hydrogen atom, He atom, 變分法,分子軌道理論,光譜符號,一直學到紅外光譜計算等。等到他們需要複數的知識,教授就安排點複數相關的wikipedia閱讀任務;等需要知道本徵函數的知識,就給幾個例子當作業示範;等需要行列式知識,就介紹2*2行列式怎麼算。。。因此並不需要對相關的數學系統的學習,只要在需要的時候學習即可,老師也會在需要用到這些知識的時候回顧。所以一開始入門的時候不需要完美把所有的數學先學一遍。當然這也得益於他們老師理解同學們很多數學物理知識都不懂。(所以這就要求你得找到一個足夠基礎的入門量化課。實在找不到,可以自學我上面提到的那個教材。)

但是知道微積分後直接學量化這種學法最好跟著上課是最好的,不論是選課還是網上課程。一開始上課雖然可能上的雲里霧裡,很不好消化,但是對建立量子力學的直覺以及之後的自學道路很有幫助。另外強調一點,做題很重要。一定要做很多題訓練這種直覺。所以如果能上課,跟著認真完成作業,不懂的都跟同學討論,對於理解量化很有幫助。上一遍課不懂很正常,量化的基礎本身就是反直覺的實驗。要上好多遍,看好多回書乃至到後來開始教人之後可能才能真的理解。一定程度的不解很正常,live with it. 本人在大二、大三、博一上過四次不同level的量化課,每次成績都是90+,讀博後還帶量化助教還給學生單獨帶過量化家教,依舊不覺得很了解量化。

2. 『上課』之後?

我覺得只是上了一學期量化入門課的話算不上入門(成績好也不算,成績好跟理解量化不一樣哈)。如果要進一步了解量化的話,主要是自學,看書。雖然跟老師上課期間已經需要自學很多材料了,但是這才只是自學之路的開始。後面要填的知識只會越來越多,單單上課滿足不了要求。那個上課只是讓你有個大概的感受量化在講啥,而且防止自己自學跑偏。再往後想要了解就得自己認真看書了,很多書。這裡面拋磚引玉提供了一些自學入門到的教材,想要自學量子化學的話,有沒有合適的入門教材? - One-e 的回答 - 知乎。另外,再深入學量化,那線性代數之類的就是標配了,因為要把薛定諤方程可以轉化成可計算的形式就是在跟一堆矩陣打交道。這個時候相關的課程已經不只是線代,而是numerical analysis之類的更高級的課程(這門兩個學期的數學研究生課也是我們組都上過的)。量化本身後來也要拓展需要學習group theory之類的。所以這個入門之後深入了解的時候才是需要的知識飛速增長的時候。我也沒有什麼特別建議,需要什麼學什麼,多用wikipedia查查。當你入門之後,關於再之後應該是讀文獻還是應該讀代碼blabla之類的相信已經有了自己的認識,心裡有數,知道該怎麼學了。

3. 什麼時候學編程?

編程是從什麼時候介入到計算化學裡的?學量子計算,當然首先要懂得量子力學,但是這本身跟編程沒有什麼關係。之後再深入(估計就是有什麼具體科研或者作業任務)需要實際操作進行計算的時候才需要。你可能是研究計算方法,設計演算法如何更高效的計算出更準確的電子能量。也可能是用現有的成熟軟體MOLPRO等用CCSD(T)-F12配上aug-cc-pVnZ (n=T,Q,5..)大基組這樣的黃金搭檔算單點能。也能用SPC/E這樣的勢能場計算關於水的動力學研究。 當你有了計算的目標的時候就可以根據需要學習編程了。

計算化學突出個『計算』二字,當然是藉助計算機算些什麼東西。跟計算機打交道自然需要了解計算機知識讓它幫助你計算。計算機知識需要了解的多少取決於你後來要算什麼。雖然有一些成熟的商業化傻瓜式軟體比如高斯讓你幾乎不用什麼編程知識,但是更多的量化科研的任務需要通過編程配合使用更專業的軟體(很可能是Linux版還沒有可視化界面)才能實現自己計算的需求,而且可能你本身的任務就是用C++開發這種計算軟體讓更多不會編程的科學家使用。這時不同的計算方向需求不一樣,可能用到的編程語言五花八門。具體需要學習什麼編程語言,跟課題以及課題組的傳統有關。

拿我們組來說。在我們組,每天要接觸的是Bash (or Csh)(這是啥?),Fortran(哈? 竟然還有組在用Fortran?). 用bash (or csh)是因為我們組進行計算的cluster是Linux系統,需要用bash這種腳本語言幫助處理批量任務。當然相應的linux系統command line操作要會。用Fortran是因為我們組要用Fortran處理數據擬合。但這些只是最小的要求。很不意外的,在我們組會Python, Java, C or C++ 等其他語言也是很正常的,因為可以自己編寫程序幫助完成任務。

編程並不代表計算的全部,為了發揮組裡cluster的性能,其他的計算機知識比如並行計算等也需要相應了解。這些編程和CS知識可以上課,上網課,也可以自學,看自己。因為需要用到Python所以花了一周自學之類的並不罕見。我們學習計算機知識也是很認真的,有時候還很深入。比如我們組的師姐則是讀博期間同時在CS那邊上課最後畢業的時候同時拿到計算化學PhD以及CS的master,最後去了Snap chat做碼農。

總結:從零開始學計算化學是要面臨很多困難的,要有心理準備。萬事開頭難,先認真上完量化理論基礎課然後開始瘋狂的自學吧。


謝邀。我覺得對沒有任何基礎的人來說,先把一些必要的基礎課上好比較重要,尤其是數學課和物理課,因為這兩個實在是不好自學,有個一般的老師教總比沒有好。編程這玩意完全可以自學一些,因為我們對編程的要求就是能解決問題就好。。。


我記得北師大以前出過一本叫《計算化學實驗》的書,裡面有一些很簡單的例子可以在Gaussian上運行,如果你自己能把這本書的例子做一遍,應該就學的差不多了。做生物的肯定是要會用QM/MM和MD方法的。這兩個方法要多練習。


見我的鏈接 http://blog.sciencenet.cn/blog-2854406-928118.html

請包涵信手寫來,但我覺得還是很有意義的,做點貢獻。其它回答很詳細了,我就寫點精髓。

在家即可學會計算化學,只需上網條件。理論研究需要孤獨,只需少量的時間進行交流,重要的是不斷提升自己的功力水平。研究為目的,學習是手段。入門很簡單,但隨著水平的提高,難度、時間和成就呈指數式增加。要想有大成就,就使勁投入時間提高難度吧。

1.
資料獲得:
在網上能找到所需的任何書和文獻,通過各種方法(網上有方法)。

2.
純計算: 以電子結構為例,如勢能面和化學反應等,如同做化學實驗,只需簡單的輸入文件。需學過基本的物理化學和結構化學,了解簡單的量子化學,獲取並安裝Gaussian或GAMESS等軟體(GAMESS源代碼和執行文件網上免費下載),再熟悉Gaussian和GAMESS的說明書及相應的教程和計算例子即可。分子動力學(利用經典力學研究原子核運動),針對不同的軟體,如Charmm、Amber和NAMD等,從軟體說明書入手,了解相應的書和文獻,了解基本原理。使用相應的教程和計算例子進行練習。要想將純計算做到極致也是很困難的,不但要找到有價值的體系,而且競爭非常激烈。

3.
理論和計算方法:先學會做一點簡單的計算,熟悉軟體的輸入輸出。以目的為導向的學習研究,好處就是有目標,不會陷入迷茫。計算化學的目的就是弄清一個系統是什麼狀況和如何變化。以電子結構為例,對照著GAMESS源代碼(或其它代碼,最好是簡單的、通常是早期的軟體),看徐光憲的《量子化學基本原理和從頭計演算法》和Levine的《Quantum Chemistry》等書(網上也有其他人推薦的書),以及各種數值演算法書(徐世良的和numerical recipes等),來回反覆,直至將最簡單的Hartree-Fock方法弄懂。這時就可以改程序了,比如改成Hartree方法,再比如部分Hartree部分Hartree-Fock方法(例如GAMESS中Morroluma能量分解中的極化作用計算,X-pol和FMO方法等)。然後你可能發現《量子化學基本原理和從頭計演算法》等書還是比較難懂,就需要讀更基礎的數學和物理書以達到化學系本科生的水平。以上條件具備了,恭喜,可以進行各種研究了。這時需要的就是研究他人的理論方法,並在其基礎上有所進展。如果想達到巨牛的內功水平,基礎知識要達到數學系和物理系本科所學課程的理論水平。這時,目標就是重大的理論突破。

談一下研究學習方法:

很多人覺得理論難,啃不動。這主要是因為急切的心情和挫折的打擊。如何愉悅地研究學習? 最聰明的人過目不忘,文獻內容立即理解。但是普通人也能學會理論,只需花更多的時間。將所需的各種資源收集來,穿插反覆,學而時習,你會發現一點一點地明白了。千萬不要只用一本書啃到黑,中間任何的卡頓將極大打擊自信心,從而失去興趣。最好的辦法就是,有勁就繼續讀,不懂先略過。看其它書有可能將不懂的弄明白。某些內容不懂不是你的錯,是因為你和這本書不懂的部分不協調,另一本可能就協調了。不懂就看另一本,再另一本(可能要看更淺顯更基礎的書),再其它文獻,可能就懂了。實在不行就放一放,先研究點別的,有可能在做別的研究時就明白了。


計算化學生物數學好酷,這個需要背很多公式,很多量子方面知識


這行需要安心看公式,公式往往很長,微分、積分一大堆,沒有耐心和定力的一般看不下去,而且要熟悉計算機,包括電腦配置、linux系統使用等各個方面,雖然有商業軟體,但那類似於傻瓜相機,個人觀點僅供參考。。。


從零開始


沒事別學計算化學,去掉化學就好。

此路太辛苦,不如安心計算專業。


北化大應用化學專業本科有開計算化學的選修課……

來旁聽吧,哈哈~~


推薦閱讀:

TAG:物理化學 | 理論化學 | 計算化學 | 量子化學 |