科學(xué)計(jì)算C++
用C++實(shí)現(xiàn)科學(xué)計(jì)算算法,得出所要的結(jié)果,有點(diǎn)類似刷OJ算法題的過程。一般OJ算法題主要是側(cè)重邏輯。而科學(xué)計(jì)算則是根據(jù)數(shù)學(xué)公式出發(fā),使用合適的科學(xué)計(jì)算算法,解決問題得到答案。
1)??具體的程序框架,通常是將問題的輸入直接定義好(也可以從輸入文件讀?。?,然后執(zhí)行C++程序進(jìn)行計(jì)算,將計(jì)算好的結(jié)果用文件的形式輸出,然后使用其他畫圖工具進(jìn)行畫圖。
2)??在文件輸入輸出部分,會(huì)使用C++的文件處理模塊。
3)? C++ 缺少一些科學(xué)計(jì)算模塊,需要自己造輪子,或者自己去找。
4)? C++ 科學(xué)計(jì)算中最常用的數(shù)據(jù)結(jié)構(gòu)是數(shù)組,但C++本身沒有矩陣運(yùn)算模塊,要用到矩陣運(yùn)算時(shí),建議使用現(xiàn)代化的第三方庫Eigen3( 這個(gè)上手會(huì)有些難度)
5)? 當(dāng)然,并行計(jì)算的編程技巧也需要學(xué)習(xí)。除此之外,掌握一些簡單使用的科學(xué)計(jì)算算法。
C++科學(xué)計(jì)算的配置情況:
1.庫的配置
Eigen:做線性代數(shù)相關(guān)的操作,由于Eigen調(diào)用MKL、BLAS等高性能線性代數(shù)庫做底層,性能已經(jīng)得到了足夠的優(yōu)化,而且又不用去學(xué)MKL、BLAS這些接口復(fù)雜的庫,使用起來方便快捷。
GSL:這是一個(gè)大而全的數(shù)學(xué)庫,GSL性能一般,線性代數(shù)方面的計(jì)算用更快的Eigen就好了,不必用GSL里面的。使用GSL主要是用來調(diào)用它的一些別人已經(jīng)寫好的數(shù)值積分、微分等方面的函數(shù),就不用自己去寫了。
注意的是,對于科研中經(jīng)常碰到的逐元素操作,直接用C++寫幾層for循環(huán)就好了,不用調(diào)用gsl,eigen等第三方庫。
fftw3:最快的傅里葉變換庫,而且里面的傅里葉變換還有并行模式,速度非???!