平台:vs2012和Matlab2016a
過程:
首先當然是先在電腦上安裝上vs2012和Matlab2016a,
接下來看圖:首先用VS12新建一個空項目工程:win32控制台應用程序->空項目,點擊完成
接下來打開 屬性管理器->找到x64的(debug),如果沒有就新建一個
然后找到通用屬性->VC++目錄->包含目錄,然后按照圖中所做
然后選擇庫目錄,再按照圖中所做
接下來找到鏈接器->常規->附加庫目錄,圖
再找到輸入->附加依賴項,圖
然后就Okay了,找一段代碼測試,輸出結果(用的網上的代碼)
#include <iostream>
#include <iomanip>
using namespace std;
#include <engine.h>
#include <string.h>
void main(){ // 定義循環變量
int i = 0, j = 0;
// 狀態變量
int nStatus = 0;
// 定義MATLAB引擎指針
Engine *ep;
// 定義mxArray變量指針
mxArray *A, *B;
// 定義矩陣數組
// 注意:VC中矩陣的行列次序與MATLAB正好時相反,需要轉置。
double arData[3][3] = {{7.5,16.3,9.6},{13.2,8.9,12.3},{9.6,5.4,13.7}}; double arResData[3][3];
// 輸出原矩陣
cout<<"原矩陣為:"<<endl;
for(i = 0; i < 3; i++)
{ for(j = 0; j < 3; j++)
{ cout<<setw(10)<<arData[i][j]<<" ";
} cout<<endl;
} // 打開MATLAB引擎
ep = engOpen(NULL);
if(ep == NULL)
{ cout<<"無法打開MATLAB引擎。"<<endl;
exit(EXIT_FAILURE); }
// 是否顯示MATLAB窗口:true-顯示;false-隱藏。
nStatus = engSetVisible(ep, false);
if(nStatus != 0)
{
cout<<"設置MATLAB顯示屬性失敗。"<<endl;
exit(EXIT_FAILURE);
}
// 為mxArray變量分配空間
A = mxCreateDoubleMatrix(3,3,mxREAL);
B = mxCreateDoubleMatrix(3,3,mxREAL);
if(A == NULL || B == NULL) { cout<<"為mxArray變量分配空間失敗。"<<endl;
exit(EXIT_FAILURE); }
// 將數組中的數據寫入到mxArray空間中
memcpy((void*)mxGetPr(A),(void*)arData,sizeof(arData));
// 將矩陣變量A寫入到MATLAB引擎空間
nStatus = engPutVariable(ep,"A",A);
if(nStatus != 0)
{
cout<<"矩陣變量寫入MATLAB引擎空間失敗。"<<endl;
exit(EXIT_FAILURE);
}
// 執行引擎命令求矩陣A的逆矩陣
nStatus = engEvalString(ep,"B=inv(A)");
if(nStatus != 0)
{
cout<<"執行MATLAB引擎命令失敗。"<<endl;
exit(EXIT_FAILURE);
}
// 從MATLAB引擎空間中讀取執行結果
B = engGetVariable(ep,"B");
// 將矩陣變量B復制到數組arResData中
memcpy((void*)arResData,(void*)mxGetPr(B),sizeof(arResData));
// 釋放矩陣變量空間
mxDestroyArray(A);
mxDestroyArray(B);
// 關閉MATLAB引擎
engClose(ep);
// 輸出計算結果
cout<<"逆矩陣為:"<<endl;
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
cout<<setw(10)<<arResData[i][j]<<" ";
}
cout<<endl;
}
// 暫停程序,查看結果
system("pause");
}
調試結果: