VC和Matlab混合編程總結(jié)
單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,VC和Matlab混合編,程,總結(jié),同山,2007.10.14.C+,Matlab,ACIS,引言,Visual C+,基本的編程實現(xiàn)平臺,(&OpenGL),編譯語言,代碼運行速度快,可脫離開發(fā)平臺運行,易于工程中使用,代碼編制復(fù)雜,不適合算法設(shè)計初期使用,缺少通用的常用數(shù)值運算功能,(,矩陣,),引言,Matlab,解釋語言,易于實現(xiàn),適用于算法設(shè)計,具有常用的數(shù)值運算功能,代碼運行速度慢,不能脫離,Matlab,開發(fā)平臺運行,對比,在,VC,中實現(xiàn)二維矩陣的存儲和輸出,:,矩陣相加,相乘,求逆,稀疏矩陣,double matrix33=1,2,3,4,5,6,7,8,9;,for(int i=0;i3;i+),for(int j=0;j3;j+),coutmatrixij;,coutn;,對比,在,Matlab,中實現(xiàn)二維矩陣的相關(guān)操作,但是,Matlab,運行速度要比,VC,慢幾百倍,a=1 2 3;4 5 6;7 8 9;,b=2*a,c=a*b,inv(a),sparse(a),矩陣初始化賦初值,矩陣與標(biāo)量的相乘,矩陣乘法,矩陣求逆,稀疏矩陣的實現(xiàn),能否結(jié)合,VC,和,Matlab,的優(yōu)點,?,VC,和,Matlab,混合編程,!,VC,和,Matlab,的混合編程,有多種方法可以進(jìn)行,VC,和,Matlab,的混合編程,:,VC,調(diào)用,Matlab,引擎,matlab,程序編譯為,dll,c+,程序編譯為,mex,VC,調(diào)用,Matlab,c Math Library,VC,調(diào)用,Matlab,c+Math Library,COM,在,VC,中調(diào)用,Matlab,C+Math Library,實現(xiàn)二維矩陣的操作,:,編程方便,有數(shù)值運算庫,;,速度快,mwArray a,b,c;,a=ones(10,10);,b=randon(10,10);,c=a*b,;,c=inv(c);,c=sparse(c),矩陣變量定義,矩陣初始化,矩陣初始化,矩陣乘法,矩陣求逆,稀疏矩陣的實現(xiàn),I,Matlab,C+Math Library!,Step by Step,下面考慮將,C+,的數(shù)組轉(zhuǎn)換為,Matlab,C+Math Library,的,mwArray,結(jié)構(gòu),可以方便地利用,mwArray,結(jié)構(gòu),建立,頂點相關(guān)邊長權(quán)稀疏矩陣,進(jìn)行三角網(wǎng)格數(shù)據(jù)的相關(guān)操作,我們還可以不安裝,Matlab,的開發(fā)環(huán)境,就能使用它的數(shù)學(xué)庫函數(shù),首先看看具體開發(fā)工具的設(shè)置,:,1,將,Matlab,externinclude,下所有的頭文件打包為,include.rar,解壓縮到用戶目錄,/test,下,2,將,mglinstaller.exe,文件復(fù)制到用戶目錄,/test,下,并運行解壓縮出動態(tài)庫,3,在,VC,的,Tools-Options,中將上述的頭文件和庫文件目錄加入到,Directory,下,4,新建工程,按照下面的圖片依次設(shè)置,5,在程序中,#include,現(xiàn)在可以使用,Matlab,C+Math Library,了,!,int,Faces43=1,2,3,2,4,3,3,4,6,4,5,6;,double Vertexs63=0,0,0,1,1,0,1,-1,0,2,-0.2,0,3,-0.8,0,2.8,1,0;,/,將網(wǎng)格頂點數(shù)據(jù)附為mwArray類型變量,mwArray,mVertexes,=zeros(6,3);,for(i=1;i=6;i+),for(j=1;j=3;j+),mVertexes,(i,j,),=Vertexsi-1j-1;,/,將網(wǎng)格頂點數(shù)據(jù)附為mwArray類型變量,mwArray,mFaces,=zeros(4,3);,for(i=1;i=4;i+),for(j=1;j=3;j+),mFaces,(i,j,),=Facesi-1j-1;,/,獲得頂點相關(guān)邊長權(quán)稀疏矩陣,mwArray,v2v=sparse(zeros(6,6);,for(i=1;i=4;i+),/,對面遍歷,mwArray,v1=mFaces(i,1);,/,面上的,一個頂點序號,mwArray,v2=mFaces(i,2);,mwArray,v3=mFaces(i,3);,mwArray,v1xyz=mVertexes(v1,colon();,/,面的三個頂點的三維坐標(biāo)向量,mwArray,v2xyz=mVertexes(v2,colon();,mwArray,v3xyz=mVertexes(v3,colon();,v2v(v1,v2)=norm(v1xyz-v2xyz);,/,用對應(yīng)的邊長向頂點相關(guān)系數(shù)矩陣賦值,v2v(v1,v3)=norm(v1xyz-v3xyz);,v2v(v2,v3)=norm(v2xyz-v3xyz);,/,矩陣運算,mwArray,mVertexes,2,=2*,mVertexes,;,/,矩陣求逆,inv,/,集合交并補,intersect,/,排序,sort,/.,/,獲得mwArray數(shù)據(jù)的值,for(i=1;i=6;i+),for(j=1;j=3;j+),mwArray,vxyz,=,mVertexes(i,j,);,Vertexsi-1j-1=vxyz.ExtractScalar(1);,參考資料,:,MATLAB C+Math Library 2.1 Reference.,pdf,MATLAB C+Math Library 2.1 Users,Guide.pdf,