寫kinetic Monte Carlo模擬程序用什麼語言合適?
01-05
打算要寫kMC的模擬程序,C,FORTRAN,Python都能夠熟練使用,正在糾結用哪個語言寫合適,求指點
我做了六年計算化學,我的經驗是建議用c. Fortran 語言還是有點老,真的很難用,我用了兩年,放棄了,關鍵是你學會了在別的領域也用不上。
python和numpy也不推薦。你會花很多時間去優化才能到c的速度。kmc是個非常compute intense 的活,不要用python和matlab,早晚要重寫的。謝邀,
其他答案講的很好了,總之測試演算法或者是完成作業的小程序用python,否則用C/Fortran。關於C/Fortran選哪個,我補充一點:如果是新手,不要考慮太多,組裡老闆和師兄用哪個,你就用哪個,最好不要挑戰全組的編程傳統,這樣便於拉師兄幫忙。如果是老手,參見其它答案...謝邀。從效率上講Fortran和C或許差不多,運行效率上python是比不上前兩者的。
@小侯飛氘 把C和Fortran的優劣都講得很明白了。
在我看來這三種語言的選擇可以三分種情況來考慮:(1)想快速實現一個演算法,拿一個簡單體系測試。這無疑用python是最合適的,開發速度很快。(2)想要開發一個大規模並行的程序,那還是要用C來寫。(3)對並行沒有需求,或者最多只需要在單機多核並行,而且考慮到開發和運行的效率的話,選Fortran。Fortran和C都可以,看你熟悉和喜歡哪一個吧。python不太建議,畢竟是解釋型語言,效率上太低。
Fortran寫起來很方便,數組加減乘除方根都可以直接操作,不用寫循環也不用調用函數。其效率上一般高於C,語法嚴格不容易出現run time error,debug起來比較方便,畢竟是專職數值計算的語言。C的優勢在於網上各類的子函數源碼多一些,例如KMC常用的各種搜索演算法(如二叉樹),C語言版本的網上一搜一堆,Fortran的多半要自己寫。另外,用C的人畢竟比用Fortran的要多一些,程序的合作性好一些。總的來說,Fortran和C的差距並不大。
若是用Fortran,請用Fortran90以上的語法規範。numpy的速度不比純C慢,我曾經有個參數估計程序,用純python1分鐘,轉到numpy的純矩陣運算,0.07秒,用numpy的注意要點就是不要用for循環,萬事萬物皆向量化
kmc這種大部分程序不大計算量也不大的, 其實只要不是太奇葩的語言都能勝任。如果只是想發發paper的話fortran還是首選。如果還有別的打算的話其實這是個很好的練手項目,你想學什麼就用什麼。我見過最奇葩的一位,所有結果存到SQL里,對你沒看錯,mysql。慢的要死,運行時間像dft看齊,反正最後也發了幾篇文章畢業了.畢業拍拍屁股當dba去鳥,組裡別的學生還都不會編程,把他們坑苦了。我自己做的東西比較複雜而且還是接著別人搞的(n多反應的燃料電池,陰極陽極都有),自然就沿用前面的fortran了。組裡有師兄做了quant,有些小項目俺就學著用c++寫寫寫,然後再搞成excel插件,結果畢業以後啥也沒用上,最後當了運維。。。。。。。
用啥都可以,建議用php
不負責的說,可以去試試Julia。
你列出的幾個,Python&>C&>Fortran,都需要注意優化才行。拋開這些,推薦Java,日後多線程化什麼的會輕鬆些。推薦閱讀:
TAG:Python | 科學計算 | 計算化學 | MonteCarlo | 分子模擬 |