标题:
VC保存数据到MATLAB的mat文件
[打印本页]
作者:
bibi
时间:
2015-4-18 21:05
标题:
VC保存数据到MATLAB的mat文件
一、配置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))
作者:
jjsmonkey
时间:
2015-5-17 14:18
我也是想用vc++把数据保存成.mat,上面的代码可以实现么。还要配置什么文件么
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1