手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

C++与matlab混编代码解析

时间:2024-10-15 17:53:02

1、从网上随便找出一个matlab跤耧锿葡与C++混编的代码:如下:#include<iostream>#include<稆糨孝汶;iomanip>usingnamespacestd;#include<engine.h>#include<string.h>voidmain(){//定义循环变量inti=0,j=0;//状态变量intnStatus=0;//定义MATLAB引擎指针Engine*ep;//定义mxArray变量指针mxArray*A,*B;//定义矩阵数组//注意:VC中矩阵的行列次序与MATLAB正好时相反,需要转置。doublearData[3][3]={{7.5,16.3,9.6},{13.2,8.9,12.3},{9.6,5.4,13.7}};doublearResData[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");}

2、注意,头文件必须引入 #include<engine.h> 头文件,此头文件是matlab引擎的文件,此步骤相当重要

3、matlab中的矩阵初始化,与C++中的矩阵初始化的形状,需要专制后使用,须铭记在心

4、接下来我只说一些比较常用的C++中调用matlab函数的方法,以及顺序,关于一些C++的方法请直接百度一下,这里不做累赘叙述:

5、engOpe艘绒庳焰n(NULL); 开启matlab引擎函数,开启失败 返回null;engSetVisible(ep,false);是否显示matlab窗口,多用于调试阶段,返回0或1表示成功或失败。mxArray是一种很复杂的数据结构,与Matlab中的array相对应,我们只需熟悉Matlab的array类型和几个常用的mxArray函数即可。这里只需记住为存储C++数组和转入matlab中的一个桥梁memcpy()函数,不用多说了 C++中函数,不会百度吧!!mxCreateDoubleMatrix()函数 作用为初始化mxArray数组,需和C++中创建的数组一样大

6、engPutVariable(引擎名,matlab变量,mxArray数组);将变量放入matlab中去,返回0或1表示成功或失败。engEvalString(引擎名,matlab语句); 使用C++执行matlab语句,返回0或1表示成功或失败。engGetVariable(引擎名,matlab中变量); 取得变量值,返回类型为mxArray数组mxDestroyArray(B); 销毁mxArrayengClose(ep); 关闭matlab引擎

© 手抄报圈