C++与matlab混编代码解析

2025-10-06 22:13:16

1、从网上随便找出一个matlab与C++混编的代码:

如下:

#include <iostream>

#include <iomanip>

using namespace std;

#include <engine.h>

#include <string.h>

void main(){ // 定义循环变量 int i  = 0, j = 0;

// 状态变量

int nStatus = 0;  // 定义MATLAB引擎指针 Engine *ep;

 // 定义mxArray变量指针 mxArray *A, *B;

 // 定义矩阵数组

// 注意:VC中矩阵的行列次序与MATLAB正好时相反,需要转置。 

double arData[3][3] = {{7.5,16.3,9.6},{13.2,8.9,12.3},{9.6,5.4,13.7}}; 

double arResData[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、engOpen(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); 销毁mxArray

engClose(ep); 关闭matlab引擎

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢