日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【转】C++调用Matlab的.m文件

發布時間:2025/3/8 c/c++ 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】C++调用Matlab的.m文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文地址 Matlab是一個強大的數學計算/仿真工 具,其內置了很多實用的現成的函數,而且我們經常也自己定義很多m函數。但在很多情況下,我們不得不使用VC編程。那么,如何在VC中利用matlab的 資源呢? 在這里我簡要的以一個簡單的例子來說明一下如果在VC中調用matlab中定義的.m文件。繁多的理論就不說了,簡明扼要的說一個實例。相信大家看過之后 都會馬上學會的 其中灰色底顯示的部分是需要我們手工輸入的部分。 步驟如下:

㈠當然是先建立matlab的m文件。

這里為了簡單起見,我在matlab中定義了一個函數, 其m文件如下: function y = add_zh(a,b)????? y=a+b 保存為myfunct.m

㈡下面來對matlab編譯環境進行設置。

打開matlab,在命令行狀態下鍵入:mex-setup

然后出現如下提示: -------------------------------------------------------------------------------------- Select a compiler: [1] Borland C++Builder version 5.0 in C:\Program Files\Borland [2] Lcc C version 2.4 in F:\SOFT\SHARE\MATLAB65\sys\lcc [3] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio [0] None ? Compiler: -------------------------------------------------------------------------------------- 這里我們選擇’3’。(如果使用其他的編譯器比如BCB,那么就可以相應的選擇’1’) 然后,繼續在命令行狀態下輸入: mbuild –setup -------------------------------------------------------------------------------------- Please choose your compiler for building standalone MATLAB applications:? Would you like mbuild to locate installed compilers [y]/n? y Select a compiler: [1] Borland C++Builder version 5.0 in C:\Program Files\Borland [2] Lcc C version 2.4 in F:\SOFT\SHARE\MATLAB65\sys\lcc [3] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio [0] None ? Compiler: -------------------------------------------------------------------------------------- 這里需要幾步確認。大家按情況操作即可。

㈢對VC的編譯器環境進行設置。

在Tools-options-directory里面設置include和lib的路徑,分別添加一項,指向matlab安裝目錄中的\extern\include和 \extern\lib

㈣將.m文件編譯為動態鏈接庫

這一步比較關鍵。在這一步中,將matlab中的.m文件轉換為dll 在matlab命令行中輸入: mcc -t -h -L C -W lib:ppp -T link:lib myfunct.m 至此,可以發現在myfunct.m所在的目錄中產生了一大堆文件。我們只用其中3個: ppp.h??? ppp.lib???? ppp.dll

?㈤ 測試與調用

1. 新建一個VC工程。這里取名為mat。為了簡單,我們在這里建立一個對話框來進行演示。如下: ?
然后,將上面這3個文件拷貝到VC工程所在的目錄中,以便VC調用之。
? 2. 進行VC編程。 首先,在cpp文件中加入:?#include “ppp.h”; 然后,設置VC的鏈接庫。在project-settings-link下的object/library modules中加入: ppp.lib;libmx.lib;libmatlb.lib;libmmfile.lib;   ? 至此,VC的編譯環境設置完畢。下面就是編程部分了。 3.?編程部分的關鍵:接口和數據類型的轉換 先給出VC實現的源代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 void?CMatDlg::OnButton1() {???????????//在matlab中定義的m文件:myfunct,其功能是完成兩個數的相加操作。 ????????????????CString str; ????????????UpdateData(true); ????????????pppInitialize(); ????????????//為了調用matlab中的函數,必須使用數組數據類型,并其后調用matlab函數將其轉化為矩陣格式(matlab的基本數據類型是矩陣) ????????????static?double?x1[1]={1.0}; ????????????static?double?x2[1]={2.5}; ????????????double?result; ????????????//調用matlab創建3個矩陣 ????????????mxArray *A=mclGetUninitializedArray(); ????????????mxArray *B=mclGetUninitializedArray(); ????????????mxArray *C=mclGetUninitializedArray(); ????????????//將C語言中的變量值賦給matlab中的矩陣 ????????????mlfAssign(&A,mlfDoubleMatrix(1,1,x1,NULL)); ????????????mlfAssign(&B,mlfDoubleMatrix(1,1,x2,NULL)); ????????????mlfAssign(&C,mlfMyfunct(A,B)); ????????????//將matlab中的矩陣的指針傳遞給C語言中的指向double的指針 ????????????double?* md=mxGetPr(C); ????????????result=md[0]; ????????????//釋放這些矩陣 ????????????mxDestroyArray(A); ????????????mxDestroyArray(B); ????????????mxDestroyArray(C); ????????????str.Format ("It is : %f",result); ????????????::AfxMessageBox(str); }

?

相信看到里面的注釋,我們就明白的差不多了。 VC編程以實現對matlab函數的調用,例如VC中我們實現兩個double型的相加,則需要做上述的編程:首先定義兩個數組并存入我們要進行函數操作的數據(也就是所謂的實參);然后將這兩個數組轉換為matlab可以識別的矩陣;然后調用m文件中自定義的函數,對矩陣進行操作;最后將結果再轉回VC支持的數據格式: ??????????? double * md=mxGetPr(C); ??????????? result=md[0];????? 至此,經matlab函數處理過的數據已經存入了VC中的result變量。???????? ??????????? mlfAssign(&C,mlfMyfunct(A,B)); 大家可以看出來,在進行調用的時候,我們使用的是m文件的文件名myfunct,而不是m文件中定義的add_zh(a,b) 程序中,我們要實現1.02.5的相加運算,結果如下: 。。。

運行報錯:e:\program files\matlab\r2009a\extern\include\mclmcr.h(1764) : error C2065: 'REFCLSID' : undeclared identifier
e:\program files\matlab\r2009a\extern\include\mclmcr.h(1764) : error C2146: syntax error : missing ')' before identifier 'clsid'
e:\program files\matlab\r2009a\extern\include\mclmcr.h(1764) : error C2182: 'mclCLSIDtochar_proxy' : illegal use of type 'void'
e:\program files\matlab\r2009a\extern\include\mclmcr.h(1764) : error C2059: syntax error : ')'
e:\program files\matlab\r2009a\extern\include\mclmcr.h(1768) : error C2065: 'REFGUID' : undeclared identifier
e:\program files\matlab\r2009a\extern\include\mclmcr.h(1768) : error C2146: syntax error : missing ')' before identifier 'guid'
未解決
沒有整理與歸納的知識,一文不值!高度概括與梳理的知識,才是自己真正的知識與技能。 永遠不要讓自己的自由、好奇、充滿創造力的想法被現實的框架所束縛,讓創造力自由成長吧! 多花時間,關心他(她)人,正如別人所關心你的。理想的騰飛與實現,沒有別人的支持與幫助,是萬萬不能的。



本文轉自wenglabs博客園博客,原文鏈接:http://www.cnblogs.com/arxive/p/5224537.html,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的【转】C++调用Matlab的.m文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 伊人久久综合 | 51成人| 亚洲精品一区中文字幕乱码 | 日韩不卡一二三区 | 大胸喷奶水www视频妖精网站 | 少妇精品无码一区二区三区 | 少妇1~3伦理 | 天天射天天色天天干 | 日韩黄色影视 | 国产精品久久欧美久久一区 | 天天撸一撸 | 成人动漫在线观看免费 | 国产精品爽爽爽 | 日本一级吃奶淫片免费 | 国产成人福利在线 | av一二三| 少妇闺蜜换浪荡h肉辣文 | 乱lun合集男男高h | 色综合久久综合 | 日韩精品视频一区二区在线观看 | 国产精品国产三级国产普通话蜜臀 | 看全黄大色黄大片美女人 | 国产精品乱码一区二区 | 亚洲乱码中文字幕久久孕妇黑人 | 亚洲精品乱码久久久久久 | 最近最新最好看的2019 | 欧美乱论视频 | 九九精品免费视频 | 成人依依网| 性色在线视频 | 成人欧美一区二区三区黑人冫 | 国产av天堂无码一区二区三区 | 夜夜久久久 | 免费不卡视频 | 国产精品一二三区视频 | 四虎在线免费视频 | 国产精品久久久久影院老司 | 男人插入女人阴道视频 | 天天躁夜夜操 | 国产猛男猛女超爽免费视频 | 黄色片免费网站 | 国产精品久久av | 日韩成人av影院 | 福利资源在线观看 | 精品一级少妇久久久久久久 | 婷婷色吧 | 日韩国产精品一区二区三区 | 国产毛片在线视频 | 精品成人久久久 | 色播视频在线观看 | 午夜国产片| 久久久www免费人成人片 | 黄频在线播放 | 黄色特级一级片 | 精品一区二区三区精华液 | 好吊色一区二区 | 中文字幕在线播放不卡 | 日日摸日日操 | 久久久剧场 | 国产毛片毛片毛片毛片毛片 | 国产无限制自拍 | 五月天婷婷综合 | 第一章豪妇荡乳黄淑珍 | 日韩精品在线第一页 | 少妇高潮一区二区三区99刮毛 | 最新黄色av网站 | 成人18视频 | 精品无码人妻一区二区三区品 | 午夜欧美精品 | 亚洲国产私拍精品国模在线观看 | 人人看人人插 | 日韩精品一区二区三区在线播放 | 免费毛片看 | av国产在线观看 | 成年人性生活免费视频 | 成人尤物| 玖玖网 | www.久久久久久久久 | 色一涩| 性猛交娇小69hd | 久久成人综合网 | 国产一级18片视频 | 欧美成年人在线视频 | 日本一区二区在线免费观看 | 射久久久 | 欧美美女性视频 | 男生插女生网站 | 稀缺呦国内精品呦 | 奇米色影视 | 亚洲第一天堂 | 天堂资源中文在线 | 不卡的免费av | 国产在线中文字幕 | 久久影院精品 | 欧美精品在线一区二区 | 久久精品国产亚洲AV高清综合 | 日韩欧美网站 | 欧美三级韩国三级日本三斤 | 伊伊成人网 |