日韩性视频-久久久蜜桃-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文件的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 黑人操欧美人 | 国产色黄 | 日本国产一区二区三区 | 91无限观看 | 国产精品高潮呻吟久久aⅴ码 | 中文幕无线码中文字夫妻 | 精品国模一区二区三区欧美 | 精品一区二区三区中文字幕 | 欧美成人一区二区三区 | 日韩欧美亚洲一区二区 | 男女羞羞在线观看 | 午夜精品久久久久久久第一页按摩 | 久久久www | 紧身裙女教师三上悠亚红杏 | 又黄又爽的视频在线观看 | 亚洲无毛视频 | 色噜噜在线播放 | 国产精品一区二区三区免费看 | 亚洲色图另类小说 | 俺也去av | 亚洲第一黄色网 | 国产欧美视频在线观看 | 麻豆91在线 | 欧美啪啪一区二区 | 久久精品系列 | aaa国产精品| 樱花动漫无圣光 | 国产精品自拍偷拍视频 | 亚洲国产剧情在线观看 | 熟女精品一区二区三区 | 人人干人人艹 | 87福利视频 | 中国久久久 | 国产午夜精品一区 | 成人深夜视频在线观看 | 91爱啪啪| 人人草人人 | 国产第8页| 日韩在线视频一区 | 亚洲精品国产精品乱码 | 最新av导航 | 日本色网址 | 九九热视频这里只有精品 | 日韩理论片在线观看 | 毛片一级免费 | 色播视频在线 | 亚洲国产精品久久久久久久 | av无遮挡| 三上悠亚中文字幕在线播放 | 亚洲高清天堂 | 日本美女全裸 | 免费观看理伦片在线播放视频软件 | 在线观看亚洲专区 | 夜夜嗨av一区二区三区免费区 | 成人久久免费 | wwwxx国产 | 男男在线观看 | 超碰在线人 | 小毛片网站 | 日韩视频免费在线播放 | 综合在线观看 | 亚洲成人午夜电影 | 国产男女裸体做爰爽爽 | 激情综合网av | 国产理论一区 | av色图片| 国模一区二区三区 | 日韩午夜一区 | 一区二区三区四区五区在线视频 | 精品嫩模一区二区三区 | 午夜性色福利影院 | a视频在线观看免费 | 日韩伦理一区 | 日韩另类av | 91免费在线观看网站 | 亚洲综合影院 | 一级免费大片 | 麻豆成人免费视频 | 国产精品亚洲一区二区三区在线观看 | 欧美aⅴ视频 | 看久久| 黄色大片免费网站 | 黑人玩弄人妻一区二区三区免费看 | 美女色网站 | 香蕉视频啪啪 | 欧美男人天堂网 | 天天精品视频 | 高跟av| 国产精品久久久久久久免费大片 | 久久逼逼 | 制服.丝袜.亚洲.中文.综合懂 | 国产伦精品一区二区三区妓女 | 美女扒开粉嫩尿口 | 国产人妖视频 | 夜夜爽av福利精品导航 | 国产色视频网站 | 少妇2做爰hd韩国电影 | 蜜桃视频在线观看www | www国产精品视频 |