vs2012 通过调用matlab的引擎调用matlab算法

vs下c++调用matlab:使用的环境:VS2012、MATLAB2014b(安装路径E:\MATLAB)。

首先我的环境    matlab是32 位的, vs2012 也是32位的。

新建一个工程,这里选择控制台程序,直接创建。

1. 设置项目属性,在C/C++,附加包含目录 E:\MATLAB\R2014b\extern\include

2. 设置项目属性,在链接器-常规,附加库目录 E:\MATLAB\R2014b\extern\lib\win32\microsoft

3. 设置项目属性,在链接器-输入,附加依赖项 libmx.lib;libmat.lib;libeng.lib;mclmcrrt.lib;

4  电脑关于环境变量增加的  path  (我还安装了MCRInstaller.exe ,不知道有没有关系,最后才安装的 )

E:\MATLAB\R2014b\extern\lib\win32\microsoft

E:\MATLAB\R2014b\runtime\win32

E:\MATLAB\R2014b\polyspace\bin

E:\MATLAB\R2014b\bin\win32

 

这里注意matlab是x64还是x86,其中库的路径名称会不一样;同时注意vs配置管理器的编译平台与之一致。

如果上述设置未完成,则会提示“无法解析的外部符号”。

然后写入测试代码

#include

#include

#include

using namespace std;

#define PI 3.1415926

int main()

{

/*

Engine *ep;

ep = engOpen(NULL);

engEvalString(ep, "x=0:0.05:2*pi;y=sin(x);plot(x,y,'.b')");

*/

const int N = 100;

Engine *ep; //定义Matlab引擎指针。

if(!(ep = engOpen("\0"))) //测试是否启动Matlab引擎成功。

{

cout << "Can't start MATLAB engine!" << endl;

return EXIT_FAILURE;

}

double *X = new double [N];

double *Y = new double [N];

double *Z = new double [N];

// Generate uniform numbers between -2*PI and 2*PI.

for (int index = 0; index < N; index++) {

double step = 4 * PI / N;

double x = step*index - 2 * PI;

X[index] = x;

cout << X[index] << " ";

// Define Y as cosine values of x.

Y[index] = cos(x);

// Define Z as sine values of x.

Z[index] = sin(x);

}

//定义mxArray,为1行,N列的实数数组。

mxArray *xx = mxCreateDoubleMatrix(1, N, mxREAL);

mxArray *yy = mxCreateDoubleMatrix(1, N, mxREAL);

mxArray *zz = mxCreateDoubleMatrix(1, N, mxREAL);

//将c++数组中的值复制到对应的mxArray中

memcpy(mxGetPr(xx), X, N * sizeof(double));

memcpy(mxGetPr(yy), Y, N * sizeof(double));

memcpy(mxGetPr(zz), Z, N * sizeof(double));

//将mxArray数组写入到Matlab工作空间

engPutVariable(ep, "x", xx);

engPutVariable(ep, "y1", yy);

engPutVariable(ep, "y2", zz);

//向Matlab引擎发送画图命令。

engEvalString(ep, "plot(x, y1, '-.ms'); hold on; plot(x, y2, '-go');");

//销毁mxArray数组xx和yy。

mxDestroyArray(xx);

mxDestroyArray(yy);

//Use cin.get() to make sure that we pause long enough to be able to see the plot.

std::cout << "Hit any key to exit!" << std::endl;

cin.get();

//关闭Matlab引擎。

engClose(ep);

//释放指针内存

delete X;

delete Y;

delete Z;

system("pause");

return 0;

}

编译之,显示通过,运行时候需要稍等片刻。

如果编译可以通过,但是运行时候提示缺失dll,则应该设置环境变量:(可以通过逐行进行注释,看程序在哪里出现的错误。如出现缺少库,可去matlab 的安装目录进行搜索)。

我的电脑-属性-高级系统设置-环境变量

找到系统环境变量下Path,编辑之,再弹出的窗口中新建变量 E:\MATLAB\R2014b\bin\win32,然后点击确定

重新运行程序即可,如果依旧提示缺失dll,重启电脑即可。

这里尝试过直接添加环境变量,但我测试不能通过,依旧提示缺失dll,用上面的方法可以解决。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值