一、配置VC++的 包含文件 和 庫文件 目錄,如
C:\MATLAB7\extern\include
C:\MATLAB7\extern\lib\win32\microsoft\msvc71
二、一定要加入 #include "mat.h" ,如果要對mxArray進行操作,加入 #include "matlab.h" 。
三、包含庫文件
#pragma comment(lib, "libmat.lib") NumberPoints #pragma comment(lib,"libmx.lib")
四、test
【保存數據】按鈕的代碼如下
void CGRIP2002DemoDlg::OnBnClickedButton9() {
CString filePath;
char szANSIString [MAX_PATH];
MATFile *pMF = NULL; // mat文件
mxArray *pMA = NULL; // 矩陣指針
double *Array;
Array = new double[4*NumberPoints]; // 4*500
CFileDialog dlgSave(FALSE,_T(".mat"),_T("Untitled.mat"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("MAT file(*.mat)|*.mat|All files(*.*)|*.*||")); //save as
if (dlgSave.DoModal() == IDOK)
{
filePath = dlgSave.GetPathName();
TRACE1("%s\n",filePath);
}
WideCharToMultiByte(CP_ACP,0,filePath.GetBuffer(),-1,szANSIString,MAX_PATH,NULL,NULL);
pMF = matOpen(szANSIString, "w");
pMA = mxCreateDoubleMatrix(NumberPoints,4,mxREAL); // 新建一個NumberPoints*4的矩陣只有實部(在MATLAB里矩陣都是復矩陣)
mxSetName(pMA, "data");
Array = mxGetPr(pMA);
memcpy(Array,XValues,sizeof(double)*NumberPoints);
memcpy(Array+NumberPoints,YValues,sizeof(double)*NumberPoints);
memcpy(Array+2*NumberPoints,YValues2,sizeof(double)*NumberPoints);
memcpy(Array+3*NumberPoints,YValues3,sizeof(double)*NumberPoints);
// 將矩陣寫到*.mat文件內
if(pMA != NULL) matPutArray(pMF, pMA);
mxDestroyArray(pMA);
if(pMF != NULL) matClose(pMF);
}
假設保存在pend.mat文件,用MATLAB打開它,有一個500*4的矩陣data,顯示數據
>> x=data(:,1);
>> y=data(:,2);
>> y2=data(:,3);
>> y3=data(:,4);
>> plot(x,y,'b',x,y2,'r',x,y3,'g')
或者
>>plot(data(:,1),data(:,2:4))
|