vs2010调用matlab开发教程

文章介绍了在VS中调用Matlab进行数据处理和图形显示的步骤,包括设置VS项目属性,添加Matlab的包含目录和库目录,配置环境变量,创建并传递矩阵,以及使用engPutVariable和engEvalString函数执行Matlab命令。重点强调了正确配置环境和避免频繁启动关闭引擎以提高效率。
摘要由CSDN通过智能技术生成

在使用VS进行项目开发的时候需要使用matlab将处理数据作图显示,接下来给大家说明如何在vs中调用matlab

首先需要在VS中搭建调用matlab的环境

打开VS点击项目名称右键->属性,选择配置属性下的VC++目录

 在包含目录中添加D:\matlab1\extern\include路径(根据电脑matlab安装位置)

 在库目录中添加D:\matlab1\extern\lib\win64\microsoft路径

之后选择链接器->输入

 在附加依赖项中添加库文件

libeng.lib
libmex.lib
libmx.lib

注意是在输入的附加依赖项添加而不是在常规的附加库目录中,网上好多教程说是添加到附加库目录里。

如果项目本身是作为库文件被其他项目调用的时候,项目属性中是没有链接器的

 则在属性中的库管理器->常规->附加依赖项中添加上述库文件即可。

在VS中配置好环境后还需将matlab的库目录加入到电脑的环境变量里,

打开系统的环境变量设置

将D:\matlab1\bin\win64添加到环境变量Path的值中(注意,添加完成后需要将电脑重启后才有效)

至此,结束所有的环境配置,可以在VS中调用matlab了。

首先需要在头文件中引入matlab的引擎库#include<engine.h>

函数库已经在附加依赖库中添加了,所以在头文件中不用再添加

使用引擎指针打开matlab引擎

		 Engine *ep;

      if(!(ep = engOpen(("\0"))))
     {

	  fprintf(stderr,"\nCant' start MATLAB engine\n");
     }

之后需要将VS中的变量引入matlab

MATLAB函数的输入和输出参数通常都是矩阵,在C++中矩阵变量使用mxArray这个类型

double t[10000] = {0};
int Nsample = 10000;
mxArray *T = NULL

定义一个矩阵指针,

T = mxCreateDoubleMatrix(1, Nsample, mxREAL);

使用mxCreatedoubleMatrix(1, Nsample, mxREAL)函数创建一个具体的double类型的矩阵,其中第一个参数确定矩阵行数,第二个参数确定矩阵列数,第三个参数确定矩阵元素是复数还是实数。mxREAL为实数,mxCOMPLEX为复数,此处定义一个1行10000列,矩阵元素为实数且为double类型的矩阵。

memcpy((void *)mxGetPr(T), (void *)t, Nsample*sizeof(double));

使用memcpy函数将VS中变量赋值给创建的矩阵,其中第二个参数t为VS中变量的指针,同时需要使用mxGetPr(T)函数来获取矩阵的指针。

engPutVariable(ep, "T", T);

使用engPutVariable(ep, "T", T)函数将矩阵传入matlab,其中第一个参数是mtalab引擎指针,第二个参数是传入到matlab中的变量名,第三个参数VS中的矩阵变量名。

engEvalString(ep, "Y=sin(T);");
engEvalString(ep, "plot(T,Y);");

将VS中的变量传入matlab之后,便可使用engEvalString函数直接在matlab中使用该变量,完成绘图。

  printf("Hit return to continue\n");
  fgetc(stdin);

  // clean operation(don't forget!!!)
  mxDestroyArray(T);
  engEvalString(ep, "close;");

  // close engine
  engClose(ep);

完成绘图记得关闭matlab引擎,以及销毁矩阵。

注:项目要求需要循环更新matlab曲线,此时频繁启动matlab引擎以及关闭matlab引擎会占用大量时间,此时可以在循环体外开启和关闭引擎以节约时间,并且由于启动matlab本身会占用大量时间,导致VS进程与matlab显示数据不对应,最好先启动matlab后台,再执行VS程序。

详细的VS与matlab混合编程可以看一下此链接

https://blog.csdn.net/weixin_30478923/article/details/98230784?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167765993216782428652953%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167765993216782428652953&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-98230784-null-null.142^v73^pc_search_v2,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=mxREAL&spm=1018.2226.3001.4187

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值