VS2012和GSL數值計算庫配置

由於要將自己算法轉換成C++版本的在實際中使用,算法中有解非線性方程,向量,矩陣運算等等,C++中可沒有這些東東,自己編寫,呵呵。最後找來找去,發現有用來數值計算的C庫,我們可以下載並且調用相關的庫。網上相關的C++庫很多,但是比較全面的,既能做線性運算,又能非線性運算,複數運算,一些優化算法,變換方法等等的C庫還真不多,GSL是公認的比較好的。其他的庫要麼只能線性運算,要麼就是有各種問題,雖然GSL效率不是最好的,但是還可以用,再說其中包含的計算功能很多,如下表所列:



功能還是很全的,有這個庫,在C++下實現算法還是很有利的。好了,廢話這麼多,接下來說明如何配置這個庫,在網上找了諸多資料,說的都不詳細,或者就是時間太久了,基本都是在32位XP系統下做的配置,在64位windows7電腦上無法工作也看到有很多網友留言,這個庫很難配置成功,基本上沒成功使用。接下來我就一步步解釋如何配置這個庫:    (1) 下載在windows下使用的GSL庫,地址:

http://gnuwin32.sourceforge.net/packages/gsl.htm

下載如下圖片中所示的兩個文件:

(Complexpackage, except sources Setup, Sourece Setup)



下載完成後就是安裝,這個不必說了,我的安裝路徑是:D:\Program Files (x86)\GnuWin32

 

(2)安裝完成後,在目錄D:\ProgramFiles (x86)\GnuWin32\src\gsl\1.8\gsl-1.8\VC8下找到libgsl.sln文件,然後打開,如下圖:在資源管理器中可以看到如下4個項目。




(3)把該工程的四個項目的四個版本,(即上圖所示)版本全部編譯(重新生成)一遍:(相當於重新生成16遍,可能有點慢),如下圖:



(4)然後到該項目對應的生成的lisgsl和libgslcblas文件夾下(在路徑D:\ProgramFiles (x86)\GnuWin32\src\gsl\1.8\gsl-1.8\VC8),找對應的Debug-DLL,Debug-StaticLib,Release-DLL,Release-StaticLib,把其中所有的.lib(共8個)和.dll(共4個)文件考出來,其中.lib(共八個)文件拷貝到和src同一級的lib文件中,.dll文件 (共四個)放到你的環境目錄可訪問(如system32)或你的工程文件中。例如我的lib文件就放入和src同一級的lib文件中了,dll文件我也放入其中了。








接下生成就OK了,現在生成了可以供我們自己電腦使用的dll和 lib庫了,接下來配置。

(5)添加環境變量到:



(6)新建一個win32控制檯應用程序,在項目屬性裏面配置:

VC++目錄:(按照自己的安裝路徑添加)

可執行文件:D:\Program Files (x86)\GnuWin32\bin

包含文件:D:\Program Files (x86)\GnuWin32\include

庫目錄:D:\Program Files (x86)\GnuWin32\lib

源目錄:D:\ Program Files (x86)\GnuWin32\src\gsl\1.8\gsl-1.8



連接器----輸入----附加依賴項:添加 libgsl.lib;libgslcblas.lib;libgsl_d.lib;libgslcblas_d.lib



OK,現在就配置完成了。我們可以寫一個例子來看看了。

由於GSL計算能力好,但是顯示計算結果非常不方便,於是有人開發了基於GSL的MYGSL數值計算庫,已經都編譯好了lib和dll,但是非常不穩定,此外版本還停留在XP系統的版本上,並且是32位的,好久沒跟新了,在64位電腦上用會出現莫名的錯誤,但是他方便之處是計算的結果很容易顯示,這個功能還是正常的,因此我們計算的時候調用GSL庫,顯示結果的時候調用MYGSL庫,當然這也需要配置MYGSL庫,如何配置?可以看我以前空間裏日誌,裏面有詳細介紹,這裏就不重複介紹了。

#include <stdio.h>

#include <gsl/gsl_vector.h>

#include <gsl/gsl_complex_math.h>

 

extern "C"

{

    #include <my++/myhead.h>

}

 

int main(void)

{

    gsl_vector_complex*x=gsl_vector_complex_alloc(1);

    gsl_complexy=gsl_complex_rect(3,4);

    gsl_vector_complex_set(x,0,y);

    printline(30);

    printComplex(y);

    printline(30);

   

    gsl_vector_complex_free(x);

    return 0;

}

運行結果如下:這裏就是一個簡單的例子,定義並且顯示一個複數。配置完成後,OK,騷年們,開始編程吧。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章