c语言exit在哪个头文件_C语言调用MATLAB引擎 示例-画图

71afe591cf38f5f5650ed61c520a088e.png

文章背景:由于C语言没有使用较为便利的图形库,使得在C语言中画图较不方便,本文使用C语言调用MATLAB引擎plot抛物线函数,希望能向大家介绍写MATLAB引擎在C语言中的用法, 方便大家在C语言中进行相关开发工作。

准备工具:VS 2013,MATLAB 2016b。

C语言开发环境配置:本文通过VS 2013进行C语言程序开发,在VS中需要配置MATLAB 目录。在VS工程配置中,选至选项页VC++目录,在包含目录中添加“D:Program FilesMATLABR2016bexterninclude”,在库目录中添加“D:Program FilesMATLABR2016bexternlibwin64microsoft”,以上目录路径取决于你MATLAB安装的位置和操作系统位数,配置结束如图:

2f03a20bec65c9c3e2516d81d9461687.png
VC++环境配置

配置好VC++的环境后,还需要配置调用MATLAB引擎时的输入文件,在链接器->输入的附加依赖项中添加“libeng.lib;libmat.lib;libmex.lib;libmx.lib;”,到此就基本将VS调用MATLAB的环境配置完毕。

a204e1ca7ab905c1d63f548e9ee1bce5.png
VC++调用MATLAB引擎时的必备文件

以上配置完成后,还需要在windows系统的环境变量-path中添加当前系统位数对应的MATLAB运行目录,如本文在系统环境path中添加“D:Program FilesMATLABR2016bbinwin64;”。至此,前期准备工作宣告结束。

C语言调用MATAB引擎API函数:

1、engOpen():打开MATLAB引擎;

2、mxCreateDoubleMatrix():创建MATLAB变量矩阵;

3、mxGetPr():获取MATLAB变量的地址值;

4、memcpy():将C语言中的变量值赋值给MATLAB变量;

5、engPutVariable():将创建的MATLAB变量放至MATLAB工作空间;

6、engEvalString():执行字符串形式的MATLAB语句;

7、mxDestroyArray():释放MATLAB中创建的变量,释放内存;

8、engClose():关闭MATLAB引擎。

以上便是本文即将用到的MATLAB API函数(针对C语言)。

代码编写:通过以上介绍,编写的画图代码如下

//调用MATLAB函数绘制函数曲线
#include "stdio.h"
#include <math.h>
#include "engine.h" //添加MATLAB引擎头文件
#include <string.h>
int main()
{
	//定义x,y数组并赋初值
	const int N = 20;
	double x[N], y[N];
	for (int i = 0; i <N; i++)
	{
		x[i] = i + 1;
		y[i] = x[i] * x[i];
	}
	Engine *ep;     //定义MATLAB引擎指针变量
	if (!(ep = engOpen(NULL))) //打开MATLAB引擎
	{
		printf("can't start MATLAB engine!");
		exit(1);
	}
	//利用MATLAB API mxCreateDoubleMatrix函数生成矩阵,即申请空间,MATLAB引擎中使用mxArray类型数据

	mxArray *xx = mxCreateDoubleMatrix(1, N, mxREAL);//1行N列,mxREAL为实双精度矩阵
	mxArray *yy = mxCreateDoubleMatrix(1, N, mxREAL);
	//mxGetPr获取指向输入、输出矩阵数据的指针
	memcpy(mxGetPr(xx), x, N*sizeof(double));//将数组 x 复制到 mxarray 数组 xx 中,即给xx数组赋值
	memcpy(mxGetPr(yy), y, N*sizeof(double));

	engPutVariable(ep, "xx", xx);//将 mxArray 数组 xx 写入到 Matlab 工作空间,命名为 xx 
	engPutVariable(ep, "yy", yy);

	engEvalString(ep, "plot(xx, yy);");//通过引擎调用MATLAB中plot(x,y)函数,绘制函数曲线
	engEvalString(ep, "xlabel('x axis');");
	engEvalString(ep, "ylabel('y axis');");
	mxDestroyArray(xx); //释放内存
	mxDestroyArray(yy);//释放内存
	system("pause");
	engClose(ep);
	return 0;
}

由于VS在运行时C语言时,窗口会一闪而过,本文通过调用系统的system("pause")函数确保画图窗口不会一闪而过。

实例视频:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值