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