C++调用Matlab

一、效果

先看效果,就是调用matlab简单的绘制了sin(x)的图像
最终效果

二、环境配置

这里使用的时matlab 的engine所以需要配置相关头文件和库文件。这些文件的位置在matlab安装目录下的include和lib中
在这里插入图片描述
在这里插入图片描述

  1. 在VS中指定头文件和静态库的目录路径
    在这里插入图片描述
    在这里插入图片描述

  2. VS中指定依赖项的名字。这里就是静态库目录中的库名字
    在这里插入图片描述

  3. 将一些动态库复制到项目的源代码下,否者会在运行时出现以下错误。缺少什么动态库文件 就在matlab安装目录中去寻找!
    在这里插入图片描述

三、C++代码

  1. 然后就是编写C++源代码吗,代码如下:
#include <iostream>
#include <math.h>
#include <engine.h>

using namespace std;
void matlabcall() {
	Engine* ep;
	if (!(ep = engOpen(NULL)))
	{
		cout << "Sorry Matlab engine fail!" << endl;
	}
	else {
		cout << "Matlab engine start ok" << endl;
	}
	engEvalString(ep,"figure(1)");   			//向matlab发送字符串指令
	engEvalString(ep, "x = linspace(0,2*pi)");
	engEvalString(ep,"y=sin(x)");
	engEvalString(ep, "plot(x,y)");
	system("pause");
	engClose(ep); 								// 关闭 Matlab 引擎
}
int main() {
	matlabcall();
	return 0;
}

四、执行效果

在这里插入图片描述

五、函数详情

matlab Eigen主要有以下一个函数提供给C++调用,就是创建ep后就能够调用以下函数。

/* Execute matlab statement */   
LIBMWENGINE_PUBLISHED_API_EXTERN_C int engEvalString(Engine *ep,  				 //执行matlab语句
  const char *string);

/* Start matlab process for single use.
   Not currently supported on UNIX. */
LIBMWENGINE_PUBLISHED_API_EXTERN_C Engine *engOpenSingleUse(    				//以独占方式启动Matlab进程,其他用户无法访问当前Matlab进程
  const char *startcmd, void *reserved, int *retstatus);

/* SetVisible, do nothing since this function is only for NT  */
LIBMWENGINE_PUBLISHED_API_EXTERN_C int engSetVisible(Engine *ep, bool newVal);  //获取当前窗口状态,指示当前Matlab服务器窗口是否可见。True表示可见,False表示该窗口隐藏。该函数仅对Windows NT系统有效。

/* GetVisible, do nothing since this function is only for NT */
LIBMWENGINE_PUBLISHED_API_EXTERN_C int engGetVisible(Engine *ep, bool* bVal);

/* Start matlab process */
LIBMWENGINE_PUBLISHED_API_EXTERN_C Engine *engOpen(const char *startcmd);	//打开Matlab服务进程

/* Close down matlab server */
LIBMWENGINE_PUBLISHED_API_EXTERN_C int engClose(Engine *ep);				//关闭Matlab服务进程

/* Get a variable with the specified name from MATLAB's workspace */
LIBMWENGINE_PUBLISHED_API_EXTERN_C mxArray *engGetVariable(          		//从Matlab服务进程空间中获取指定名称的变量
  Engine *ep, const char *name);

/* Put a variable into MATLAB's workspace with the specified name */
LIBMWENGINE_PUBLISHED_API_EXTERN_C int engPutVariable(Engine *ep,    		//将一个变量以指定名称放入Matlab服务进程空间。
  const char *var_name, const mxArray *ap);

/* register a buffer to hold matlab text output */
LIBMWENGINE_PUBLISHED_API_EXTERN_C int engOutputBuffer(Engine *ep,      	 //注册一个缓冲区以获取Matlab命令执行输出结果
  char *buffer, int buflen);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值