一、配置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))
|