C#開發(fā)程序簡(jiǎn)單快捷,但對(duì)于科學(xué)運(yùn)算支持不好,沒有相應(yīng)的科學(xué)計(jì)算庫。
在C#中進(jìn)行科學(xué)運(yùn)算,我所知的方法有下面幾個(gè):
1. 在C#中調(diào)用matlab
matlab有強(qiáng)大的科學(xué)計(jì)算庫,以及豐富的線性計(jì)算,積分插值等函數(shù),C#中可以調(diào)用matlab的dll進(jìn)行科學(xué)運(yùn)算。
這種方法的最大問題在于計(jì)算效率很低。我這里僅利用簡(jiǎn)單的矩陣加減乘除測(cè)試過,其效率比利用C#代碼編寫的矩陣運(yùn)算低100倍以上。
對(duì)于復(fù)雜的函數(shù)比如插值,濾波等我沒測(cè)試過。
使用這種方法最大的好處就是不需要考慮科學(xué)計(jì)算算法的具體實(shí)現(xiàn),只需關(guān)注自己要實(shí)現(xiàn)的部分即可,開發(fā)效率高。
關(guān)于C#調(diào)用matlab后面另說。
2. C#中調(diào)用python
python雖然本身沒有科學(xué)計(jì)算庫,但由于python自身的優(yōu)勢(shì),目前已經(jīng)有成熟的科學(xué)計(jì)算哭numerics,scipy等,已經(jīng)基本可以實(shí)現(xiàn)matlab上常用的矩陣計(jì)算、符號(hào)計(jì)算、插值積分、繪圖等大多數(shù)功能。且由于numerics庫都是源于非常成熟的pascal科學(xué)計(jì)算庫,因此計(jì)算效率非常高。
這種方法我還沒研究過,好像需要使用Ironpython,其地址http://pytools.codeplex.com/
3. C#中使用mathnet庫
Math.net計(jì)算庫是專為.NET開發(fā)的開源科學(xué)計(jì)算庫。包含了大部分矩陣運(yùn)算、線性運(yùn)算等功能。效率高,且可以在C#中直接使用。簡(jiǎn)單的矩陣運(yùn)算,其效率可以達(dá)到C#代碼的10倍以上。其開源代碼地址:http://mathnetnumerics.codeplex.com/
vs2010擴(kuò)展插件管理工具
http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c
在C#中使用mathnet庫很簡(jiǎn)單,只需在工程引用中加入“MathNet.Numerics.dll”即可。