matlab引擎函数,Matlab引擎库函数
Matlab引擎库包含了一系列从外部应用程序调用和控制Matlab引擎的函数。下表列举了C语言的引擎库函数,这些函数后使用了eng前缀名
表 1 C语言引擎函数库
引擎函数
功能描述
engOpen
启动Matlab计算引擎
engGetArray
从Matlab引擎获得一个Matlab矩阵,用于数据交换
engPutArray
从应用程序向Matlab引擎发送一个Matlab矩阵,用于数据交换
engEvalString
执行一个Matlab命令
engOutputBuffer
创建字符缓冲区,以获得Matlab文本输出
engOpenSingleUse
打开一个单独的非共享的Matlab计算引擎
engClose
关闭Matlab引擎
engSetVisible
设置Matlab引擎
engGetVisible
返回Matlab显示状体
engGetVariable
从Matlab工作区(Workspace)获得一个变量
engPutVariable
将指定名称的Matlab变量存入Matlab工作区
关于这些函数的调用方式,可参阅Matlab的帮助文件。一般来说,在程序中调用Matlab计算引擎包含如下3个步骤:
(1) 打开Matlab计算引擎。
(2) 在引擎中执行Matlab命令,或者传递数据等。
(3) 关闭Matlab计算引擎。
打开Matlab计算引擎需要调用engOpen函数,成功打开Matlab引擎后,将
在程序中获得指向该引擎的指针。通过这个指针,就可以调用引擎来执行Matlab命令了,这需要调用engEvalString函数。完成对Matlab计算引擎的调用之后,应该关闭该引擎,这需要调用engClose。
1. engOpen
函数原型:extern Engine *engOpen(const char *startcmd)
参数说明:输入参数为一个字符指针,函数通过该指针指向的字符串所包含
的命令与Matlab简历一个连接,打开一个Matlab进程,返回一个Matlab引擎类型的指针。
2. engEvalString
函数原型:extern int engEvalString(Engine *ep, const char
*string)
参数说明:ep为engOpen打开的engine指针。String为字符串,指向一个需
要在Matlab计算引擎的工作区中执行的字符串。函数返回0表示成功执行,返回1则表示ep对应的Matlab Engine
已经关闭。
3. engClose
函数原型:extern int engClose(Engine *ep)
参数说明:输入参数ep为已经打开的Matlab计算引擎。返回0表示成功关
闭,返回1表示返回出错。
关于更多的引擎函数的具体定义可以参见帮助文件。
1.2. Visual C++调用Matlab引擎时的环境设置
当在Visual
C++环境下调用Matlab引擎时,编译接口环境的配置较为简单,主要有一下两步(本地计算机Matlab安装在目录C:\MATLAB下)
1. 添加Matlab引擎库的头文件和库函数的路径
打开菜单“Tools”,选取“Options…—>Direction”。在“Show
directories for”选项卡选取“Include
files”,添加“C:\MATLAB\EXTERN\LIB\WIN32\MICROSOFT\MSVisual
C++60”(如图3所示),因为这些引擎库用到的动态链接库都在此目录下。
2. 完成Matlab引擎对应的静态链接库的导入工作
在菜单“Project—>Setting”下,选取“Link”选项卡,在“Objecct/Library
Modules”里添加libmx.lib、libmex.lib和libeng.lib。注意三个文件名中间以空格分开(如图4所示)
经实验发现,还可以将此步设置改为:在Visual C++ 6.0环境中,选择“Project”菜单中的“Add to
Project”命令,然后选择Files选项,将“C:\MATLAB\EXTERN\INCLUDE\LIB\WIN32\MICROSOFT\MSVC60”目录下的liteng.lib,limex.lib,libmx.lib文件加到工程中。它同样可以将三个静态链接库添加到当前工程中来。
图 4 Include files 路径配置对话框
图 5 Engine方式静态链接库设置
1.3. Visual C++调用Matlab引擎实例
下面通过一个简单的实例来说明Matlab引擎的使用,它是一个基于对话框的MFC应用程序,Visual
C++下利用Matlab工具箱进行信号处理和图形显示的操作。
启动Visual C++,建立一个新工程,选择MFC
AppWizard,工程名为MATLABEngine。而后选择“Dialog
based”,即生成一个基于对话框的MFC应用程序。其余各项采用默认设置。
使用库的头文件matlib.h。首先添加Matlab引擎库的头文件和库函数的路径,然后在MATLABEngineDlg.cpp中添加engine.h。
添加Matlab引擎库对应的静态链接库文件
在对话框窗体中添加一个按钮,如下图所示设置按钮的标题和控件ID:
图 6 按钮控件的标题和控件ID设置对话框
通过Visual C++的ClassWizard,添加按钮的单击响应事件,并添加如下代码。
void CMATLABEngineDlg::OnMATLABEngine
{
Engine *ep; //定义Matlab引擎变量
MessageBox("单击确定按钮,Windows正在准备启动Matlab引擎!",
"Matlab引擎", MB_OK|MB_ICONINFORMATION);
if (!(ep=engOpen("\0"))) //打开Matlab引擎
{
fprintf(stderr, "\n Matlab引擎启动失败!\n");
MessageBox("Matlaby引擎启动失败!", "Matlab引擎",
MB_OK|MB_ICONERROR);
exit(-1);
}
MessageBox("单击确定按钮,隐藏Matlab!", "Matlab引擎",
MB_OK|MB_ICONINFORMATION);
engSetVisible(ep, 0); //隐藏Matlab窗口
MessageBox("单击确定按钮,系统重新显示Matlab!", "Matlab引擎",
MB_OK|MB_ICONINFORMATION);
engSetVisible(ep, 0); //重新显示Matlab窗口
mxArray *T=NULL;
double time[10]={0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0};
//生成矩阵
T=mxCreateDoubleMatrix(1, 10, mxREAL);
memcpy((void *)mxGetPr(T), (void *)time, sizeof(time));
//将矩阵变量写入Matlab引擎的工作区
engPutVariable(ep, "T", T);
//通过Matlab引擎执行Matlab命令
engEvalString(ep, "D=0.5*(-9.8).*T.^2");
engEvalString(ep, "plot(T,D);");
engEvalString(ep, "title('Position vs.Time for falling
object');");
engEvalString(ep, "xlabel('Time(seconds)');");
engEvalString(ep, "ylabel('Position(meters)');");
engEvalString(ep, "grid on;");
//释放矩阵变量T占用的内存空间
mxDestroyArray(T);
MessageBox("通过例程,说明Matlab的图形显示能力!",
"Matlab引擎", MB_OK|MB_ICONINFORMATION);
//画一朵花
engEvalString(ep, "x=-8:0.5:8;");
engEvalString(ep, "y=x;");
engEvalString(ep, "[Y,X]=meshgrid(y,x);");
engEvalString(ep, "R=sqrt(X.^2+Y.^2)+eps;");
engEvalString(ep, "Z=2*sin(R)./R;");
engEvalString(ep, "surf(X,Y,Z);");
MessageBox("关闭Matlab引擎,系统将退出Matlab应用程序!",
"Matlab引擎", MB_OK|MB_ICONINFORMATION);
engClose(ep); //关闭Matlab引擎,退出Matlab
}
按F7键编译后再执行,将会出现对话框。单击“MATLABEngine”按钮,将会出现Windows的标准信息框,出现“单击确定按钮,Windows正在准备启动Matlab引擎!”提示信息。单击“确定”按钮,可以看到任务栏出现Matlab的图标,它表示Matlab已经启动。然后会出现“隐藏Matlab”的信息提示框,同样单击“确定”按钮,可以看到任务栏上的Matlab图标立即隐藏。此时Matlab仍在后台运行。然后,按照提示进行操作,系统会在任务栏出现“重新显示Matlab的图标”信息,并先后出现下面各图的实验结果。
图 7 实验结果一
可以看出,Matlab引擎工作方式实质上是Visual
C++等通过编程平台实现了和Matlab的交互,它将需要在Matlab环境中执行的命令预先“存储”在Visual
C++的应用程序中,然后自动的送给Matlab执行。当然,可以通过向Matlab引擎工作空间读取或写入变量实现Matlab和Visual
C++的数据交互。
图 8 实验结果二
matlab引擎函数,Matlab引擎库函数相关推荐
- matlab 定义函数 调用,matlab 定义函数,matlab定义函数并调用
matlab 定义函数,matlab定义函数并调用,Matlab自定义函数详解 很久以前写的一篇Matlab自定义函数访问量很大,可惜没有点赞的,我感觉是我没讲清楚,这里又写了一篇笔记 Matlab函 ...
- 用matlab定义位移函数,matlab 定义函数(Matlab怎么调用函数 自定义函数使用方法)...
matlab 定义函数(Matlab怎么调用函数 自定义函数使用方法),哪吒游戏网给大家带来详细的matlab 定义函数(Matlab怎么调用函数 自定义函数使用方法)介绍,大家可以阅读一下,希望这篇 ...
- matlab doc函数,matlab常用函数.doc
matlab常用函数.doc MatLab 常用函数 1. 特殊变量与常数 ans 计算结果的变量名 computer 确定运行的计算机 eps 浮点相对精度 Inf 无穷大 I 虚数单位 name ...
- matlab私有函数,MATLAB 嵌套函数,子函数,私有函数,重载函数
MATLAB函数嵌套 MATLAB中M文件有两种类型,脚本M文件和函数M文件.脚本M文件是将可执行程序语句放入M文件中,就像在命令窗口那样,按其语句顺序及逻辑关系执行,可以理解为一般的顺序执行程序语句 ...
- matlab swt函数,matlab swt 函数出错
matlab swt 函数出错 我在用matlab swt 函数分解信号时总是出现以下错误,麻烦各位高手告知该怎么修改,swt函数如何ERROR ... ----------------------- ...
- 怎么调出matlab的函数,matlab定义函数【搞定方法】
喜欢使用电脑的小伙伴们一般都会遇到win7系统matlab定义函数的问题,突然遇到win7系统matlab定义函数的问题就不知道该怎么办了,其实win7系统matlab定义函数的解决方法非常简单,按照 ...
- matlab randi 函数,MATLAB中的randi函数
randi Pseudorandom integers from a uniform discrete distribution.来自一个均匀离散分布的伪随机整数 R = randi(IMAX,N) ...
- matlab optimeset函数,matlab 中的 linprog函数
(1) linprog函数是用来求解线性规划问题的. 什么是线性规划问题? 就是在一系列的线性条件的约束下,从而规定了可行解,在通过具体的目标函数,求得满足函数 的最优的解 例如平常的线性规划函数 ...
- matlab normc函数,matlab normc函数
用Matlab命令:normc(X)或norm(X) ? 均值中心化:从每个变量... 用Matlab进行系统函数H(s)仿真 Matlab进行系统函数 进行系统函数H(s)仿真---无01班---无 ...
最新文章
- swiper超出部分出现滚动条
- linux salt命令 -e,linux 下 Salt 命令的疑难杂症
- python3 gui协程_Python3进阶-协程
- 薪资不如 Java、C,BAT 需求大,揭秘 Python 程序员跳槽现状!
- 再谈 Formsville
- Hadoop权威指南:知识梳理(一)
- 某宝在售资源合集,整整1218份!
- 腾讯云商用密码合规解决方案,亮相2021商用密码应用创新高端研讨会
- 前沿科技赋能教育,掌门优课创新教学体验
- 45台计算机的网络拓扑图,网络复习习题
- 【面试题】京东大数据面试真题汇总,收藏必备
- 特征面提取相关文献阅读笔记(1)上篇
- 云付董事长 张凉凉:光环背后的“执拗者”
- 难解的三元二次方程组。
- fiddler学习笔记
- 喝茶:早上红茶,下午绿茶,晚上黑茶
- 易语言从c盘开始搜索文件,全盘搜索查找指定文件
- 华为、小米、OPPO、VIVO联手打造“GDSA”对抗谷歌
- 苹果Mac电脑格式化数据怎么恢复?
- 通过vnc自动连接linux,通过VNC连接Linux远程桌面
热门文章
- 解决 Python pip 安装报错:Retrying (Retry(total=4, connect=None, read=None ...)) after connection
- Openstack Neutron 管理的网络资源
- 安装Openface,实现人脸比对
- QPS、TPS、RT、并发量、 吞吐量
- leetcode 75. Sort Colors | 75. 颜色分类(荷兰国旗问题,快速排序)
- leetcode 907. Sum of Subarray Minimums | 907. 子数组的最小值之和(单调栈)
- 【Java 排序】重写Compare方法,实现自己定义排序
- Spring5参考指南:AspectJ高级编程之Configurable
- width用计算机英语,计算机的英语词汇
- 容器学习 之 docker存储(十五)