C++调用MATLAB引擎的问题.doc_第1页
C++调用MATLAB引擎的问题.doc_第2页
C++调用MATLAB引擎的问题.doc_第3页
C++调用MATLAB引擎的问题.doc_第4页
C++调用MATLAB引擎的问题.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VC+调用MATLAB引擎的问题,怎样把编辑框中的数据传输到MATLAB中并计算? 2010-9-10 09:38 提问者: kxn0831 | 浏览次数:922次比如说做个简单的加法,三个编辑框,编辑框变量分别为:m_m1,m_m2,m_result,请问加什么语句可以实现以上的功能?有个小程序是错的希望指正,可能错的都离谱了,见笑。void CMATLABEngineDlg:OnMATLABEngine() Engine *ep; MessageBox(单击确定按钮,Windows正在准备启动Matlab引擎!,Matlab引擎 , MB_OK | MB_ICONINFORMATION); if (!(ep=engOpen(0) /打开Matlab引擎 fprintf(stderr, n Matlab引擎启动失败!n); MessageBox(Matlab引擎启动失败!,Matlab引擎 , MB_OK |MB_ICONERROR); exit(-1); UpdateData(true); /将矩阵变量写入Matlab引擎的工作区 engPutVariable(ep,m_m1,m_m1); /通过Matlab引擎执行Matlab命令 engEvalString(ep,m_result=m_m1+m_m2); UpdateData(false); MessageBox(关闭Matlab引擎,系统将退出Matlab应用程序!,Matlab引擎, MB_OK | MB_ICONINFORMATION); engClose(ep); / TODO: Add your control notification handler code here 这个错误显示是:D:Program FilesMicrosoft Visual StudioMyProjectsMATLABEngineMATLABEngineDlg.cpp(198) : error C2664: engPutVariable : cannot convert parameter 3 from double to const struct mxArray_tag * There is no context in which this conversion is possible执行 cl.exe 时出错.十分感谢,您的帮助!问题补充: 谢谢一楼的回答,我的基础比较差,我用了你提供的方法,还是无法得到满意的结果,请看:mxArray *T=NULL,*P=NULL,*Q=NULL; double score; / form matrix T=mxCreateDoubleMatrix(1,1,mxREAL); memcpy(void*)mxGetPr(T),(void*)score,sizeof(score); P=mxCreateDoubleMatrix(1,1,mxREAL); memcpy(void*)mxGetPr(P),(void*)score,sizeof(score); Q=mxCreateDoubleMatrix(1,1,mxREAL); memcpy(void*)mxGetPr(Q),(void*)score,sizeof(score); /Write into MATLAB Engine Work area *T=&m_m1; *P=&m_m2; *Q=&m_result; engPutVariable(ep,T,T); engPutVariable(ep,P,P); engPutVariable(ep,Q,Q); UpdateData(true); /将矩阵变量写入Matlab引擎的工作区 engEvalString(ep,Q=P+T); /释放矩阵变量T占用的内存空间 UpdateData(false); mxDestroyArray(T); mxDestroyArray(P); mxDestroyArray(Q);您看还需要添加些什么呢?现在提示的错误是: error C2440: type cast : cannot convert from double to void *error C2582: mxArray_tag : operator = function is unavailable我来帮他解答 输入内容已经达到长度限制还能输入9999字插入图片删除图片插入地图删除地图插入视频视频地图参考资料:匿名回答提交回答取消 2010-9-16 16:49 满意回答 我几年以前做过这样的混合编程,下面是运行正确的代码片段,供你参考:单个变量也要定义成1X1的矩阵形式,如 double sample1=0; sizeof括号里面应该是变量的数据类型,如double时间长了,我都有点忘了,希望给你提供帮助。void CBsplineDlg:OnButtonStartCalculation() / TODO: Add your control notification handler code here /从表中读入原始数据,存储为rowCount维数组中 double xROWMAX=0; double yROWMAX=0; double xoutROWMAX=0; double youtROWMAX=0; double sample1=0; /拟合中选择的采样点数 double dispfig1=0; /拟合结束后是否显示图形 for(long i=1;irowCount;i+) m_grid.SetRow(i); m_grid.SetCol(1); xi-1=atof(m_grid.GetText(); m_grid.SetCol(2); yi-1=atof(m_grid.GetText(); /根据用户设置获得采样点及是否显示图形的信息,作为参数传人matlab UpdateData(true);/这一句应该写在这里,即向matlab传值之前 sample0=m_iSample; dispfig0=m_bCheck ? 1.0 : 0.0; Engine *ep; mxArray *c1 = NULL, *c2 = NULL; mxArray *str=NULL,*samp=NULL,*display=NULL; mxArray *GetDatax=NULL,*GetDatay=NULL; TCHAR bufferMAX_PATH; char strCmdMAX_PATH; char strSaveMAX_PATH; :GetCurrentDirectory(MAX_PATH,buffer); if (!(ep=engOpen(NULL) /MessageBox (HWND)NULL, (LPSTR)Cant start MATLAB engine, /(LPSTR) Engwindemo.c, MB_OK); AfxMessageBox(不能打开matlab,请确认系统中装有matlab软件!); exit(-1); engSetVisible(ep,1); /显示matlab窗口 /T = mxCreateDoubleMatrix(1, 10, mxREAL); c1=mxCreateDoubleMatrix(1,rowCount-1,mxREAL); /memcpy(void *)mxGetPr(T), (void *)time, sizeof(time); memcpy(void *)mxGetPr(c1),(void *)x,(rowCount-1)*sizeof(double); /engPutVariable(ep, T, T); engPutVariable(ep,c1,c1); c2=mxCreateDoubleMatrix(1,rowCount-1,mxREAL); memcpy(void *)mxGetPr(c2),(void *)y,(rowCount-1)*sizeof(double); engPutVariable(ep,c2,c2); samp=mxCreateDoubleMatrix(1,1,mxREAL); memcpy(void *)mxGetPr(samp),(void *)sample,1*sizeof(double); engPutVariable(ep,nSample,samp); display=mxCreateDoubleMatrix(1,1,mxREAL); memcpy(void *)mxGetPr(display),(void *)dispfig,1*sizeof(double); engPutVariable(ep,boolFigureout,display); sprintf(strCmd,cd %ssplinework,buffer); sprintf(strSave,%ssplinework,buffer); str=mxCreateString(strSave);/传人文件当前路径,用于保存文件 engPutVariable(ep,SavePath,str); engEvalString(ep,strCmd); engEvalString(ep,A=c1,c2;); engEvalString(ep,frm=everything is ok); if(!m_bB) engEvalString(ep,tx,ty=BSpline(A,nSample,SavePath,boolFigureout);); else engEvalString(ep,tx,ty=B3Spline(A,nSample,SavePath,boolFigureout);); /取回计算结果 GetDatax=engGetVariable(ep,tx); memcpy(void *)xout,(void *)mxGetPr(GetDatax) , (rowCount-1)*sizeof(double); GetDatay=engGetVariable(ep,ty); memcpy(void *)yout,(void *)mxGetPr(GetDatay) , (rowCount-1)*sizeof(double); /engClose(ep); AfxMessageBox(点击确定将关闭m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论