在科學(xué)研究和工程應(yīng)用中,往往要進(jìn)行大量的數(shù)學(xué)計(jì)算,其中包括矩陣運(yùn)算。這些運(yùn)算一般來(lái)說(shuō)難以用手工精確和快捷地進(jìn)行,而要借助計(jì)算機(jī)編制相應(yīng)的程序做近似計(jì)算。目前流行用basic、fortran和c語(yǔ)言編制計(jì)算程序, 既需要對(duì)有關(guān)算法有深刻的了解,還需要熟練地掌握所用語(yǔ)言的語(yǔ)法及編程技巧。對(duì)多數(shù)科學(xué)工作者而言,同時(shí)具備這兩方面技能有一定困難。通常,編制程序也是繁雜的,不僅消耗人力與物力,而且影響工作進(jìn)程和效率。為克服上述困難,美國(guó)mathwork公司于1967年推出了“matrix laboratory”(縮寫為matlab)軟件包,并不斷更新和擴(kuò)充。目前最新的6.x版本(windows環(huán)境)是一種功能強(qiáng)、效率高便于進(jìn)行科學(xué)和工程計(jì)算的交互式軟件包。其中包括:一般數(shù)值分析、矩陣運(yùn)算、數(shù)字信號(hào)處理、建模和系統(tǒng)控制和優(yōu)化等應(yīng)用程序,并集應(yīng)用程序和圖形于一便于使用的集成環(huán)境中。在此環(huán)境下所解問(wèn)題的matlab語(yǔ)言表述形式和其數(shù)學(xué)表達(dá)形式相同,不需要按傳統(tǒng)的方法編程。不過(guò),matlab作為一種新的計(jì)算機(jī)語(yǔ)言,要想運(yùn)用自如,充分發(fā)揮它的威力,也需先系統(tǒng)地學(xué)習(xí)它。但由于使用matlab編程運(yùn)算與人進(jìn)行科學(xué)計(jì)算的思路和表達(dá)方式完全一致,所以不象學(xué)習(xí)其它高級(jí)語(yǔ)言--如basic、fortran和c等那樣難于掌握。實(shí)踐證明,你可在幾十分鐘的時(shí)間內(nèi)學(xué)會(huì)matlab的基礎(chǔ)知識(shí),在短短幾個(gè)小時(shí)的使用中就能初步掌握它.從而使你能夠進(jìn)行高效率和富有創(chuàng)造性的計(jì)算。 matlab大大降低了對(duì)使用者的數(shù)學(xué)基礎(chǔ)和計(jì)算機(jī)語(yǔ)言知識(shí)的要求,而且編程效率和計(jì)算效率極高,還可在計(jì)算機(jī)上直接輸出結(jié)果和精美的圖形拷貝,所以它的確為一高效的科研助手。自推出后即風(fēng)行美國(guó),流傳世界。
matlab算法是一個(gè)優(yōu)秀的算法,我們?cè)谲浖_(kāi)發(fā)過(guò)程中,尤其是數(shù)據(jù)庫(kù)開(kāi)發(fā)方面,要進(jìn)行數(shù)據(jù)匯總、統(tǒng)計(jì)分析、然后根據(jù)匯總的數(shù)據(jù)產(chǎn)生圖表(包括柱圖、餅圖、四分圖、雷達(dá)圖等),這種需求甚為普遍。
由于matlab算法具有強(qiáng)大的計(jì)算處理功能,所以在許多軟件中已經(jīng)用到它,比如作個(gè)銷售預(yù)測(cè),前提是基于以往的銷售數(shù)據(jù),可以用matlab算法對(duì)以往的銷售數(shù)據(jù)進(jìn)行處理(如函數(shù)、矩陣的一系列運(yùn)算,或者采用一些運(yùn)籌學(xué)的知識(shí)進(jìn)行數(shù)據(jù)處理),再由matlab算法產(chǎn)生出相關(guān)數(shù)據(jù)的精美圖形輸出,得到一個(gè)具有科學(xué)理論依據(jù)的方案,把我們的管理思想融合到了計(jì)算機(jī)程序設(shè)計(jì)中,使軟件解決方案不是簡(jiǎn)單的電算化工具,而是一個(gè)綜合許多學(xué)科的智慧的結(jié)晶!
微軟的.net開(kāi)發(fā)工具,結(jié)合數(shù)據(jù)庫(kù)sql server,是開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用的最佳選擇!我們可以把sql server里的數(shù)據(jù)用matlab算法進(jìn)行處理,還可以將自己寫的算法包裝成com,在.net中引用就可以了。在使用的matlab算法時(shí),圖形輸出的功能往往被人忽略,下面的例子,就是采用的matlab出的圖形
首先在.net中,引用matlab 的對(duì)象庫(kù)(matlab application(version 6.5) type library),筆者采用的是matlab 6.5 版本,然后在窗體上加一個(gè)圖片框picturebox1,用于顯示圖片;
一個(gè)button1用于調(diào)用matlab,并加載圖形。
代碼:
dim strmatlab as string '定義matlab語(yǔ)句字符串
' 顯示正弦圖
private sub button1_click(byval sender as system.object, byval e as system.eventargs) handles button1.click
dim matlab as object
'建立matlab應(yīng)用
matlab = createobject("matlab.application")
'最小化matlab命令窗口
matlab.minimizecommandwindow()
'matlab語(yǔ)句
strmatlab = "t=2:0.2:4*pi;y=sin(t);plot(t,y)"
'執(zhí)行matlab算法
matlab.execute(strmatlab)
'生成一個(gè)jpg的圖形c:/test1.jpg
matlab.execute("print( gcf, '-djpeg', 'c:/test1')")
'退出matlab,釋放資源
matlab.quit()
matlab = nothing
'顯示在圖片框
picturebox1.image = new bitmap("c:/test1.jpg")
end sub
' 顯示餅圖
private sub button2_click(byval sender as system.object, byval e as system.eventargs) handles button2.click
dim matlab as object
matlab = createobject("matlab.application")
strmatlab = "sale=[100 400 150 250 500];pie3(sale,[0 0 1 0 0],{'公司a','公司b','公司c','公司d','公司e'})"
matlab.execute(strmatlab)
matlab.execute("print( gcf, '-djpeg', 'c:/test2')")
matlab.quit()
matlab = nothing
picturebox1.image = new bitmap("c:/test2.jpg")
end sub
' 顯示三維螺旋線圖
private sub button3_click(byval sender as system.object, byval e as system.eventargs) handles button3.click
dim matlab as object
matlab = createobject("matlab.application")
strmatlab = "t=0:0.2:4*pi;plot3(sin(t),cos(t),t)"
matlab.execute(strmatlab)
matlab.execute("print( gcf, '-djpeg', 'c:/test3')")
matlab.quit()
matlab = nothing
picturebox1.image = new bitmap("c:/test3.jpg")
end sub
' 顯示立體波浪圖
private sub button5_click(byval sender as system.object, byval e as system.eventargs) handles button5.click
dim matlab as object
matlab = createobject("matlab.application")
strmatlab = "[x,y,z] = peaks(20);surfc(x,y,z);colormap hsv;axis ([-2 4 -6 8 -10 6])"
matlab.execute(strmatlab)
matlab.execute("print( gcf, '-djpeg', 'c:/test5')")
matlab.quit()
matlab = nothing
picturebox1.image = new bitmap("c:/test5.jpg")
end sub
private sub form1_load(byval sender as system.object, byval e as system.eventargs) handles mybase.load
picturebox1.sizemode = pictureboxsizemode.stretchimage
end sub
總結(jié):一般情況下,我們將自己的算法在matlab中生成dll,供vb.net調(diào)用此算法,輸入一組數(shù)據(jù),輸出一系列數(shù)據(jù),而且matlab算法比較簡(jiǎn)單,一個(gè)命令就完成了許多功能,大大提高了開(kāi)發(fā)效率!