MSVC环境中MATLAB功能调用技术
关于VC环境中调用Matlab程序的说明

关于VC环境中调用Matlab程序的说明1Matlab m文件的编译在VC环境中调用Matlab程序有多种途径,现在采用的是由Matlab程序直接将m文件编译成可供C++调用的动态链接库文件,使用的Matlab命令是:mcc -t -W lib:libfilename -T link:lib filename其中libfilename是编译得到的动态链接库的文件名,filename是m文件的文件名,m 文件必须是函数形式。
命令执行后得到libfilename.lib、libfilename.dll、libfilename.h文件。
Matlab的一些内建函数并不被编译命令识别,因此需要显式的将这些函数名写入编译命令。
2VC++环境下调用Matlab动态链接库2.1 载入Matlab动态链接库VC中调用Matlab动态链接库需要将filename.lib和filename.h载入VC工程中,并且需要载入Matlab的两个库文件:libmatlb.lib和libmx.lib。
载入方法可以显式的载入,也可以直接将文件加入工程:显式的载入:首先将Matlab库文件的保存地址载入VC框架,Tools->Options->Directories……;然后显式的将需要的库文件载入:#pragma comment (lib,“name.lib“)。
直接加入文件:Project->Add to project->files……。
2.2 VC++环境下调试Matlab程序在VC 中,所有和Matlab 的数据交互都是通过mxArray 来实现的。
Matlab编译得到的动态链接库中,接口函数返回类型就是mxArray型的。
在使用mxArray 类型的程序中,应包含头文件matrix.h。
但是在Matlab编译得到的头文件libfilename.h中,包含了头文件libmatlab.h,该头文件又包含了matrix.h,因此,只要在工程中包含进libfilename.h就可以了。
Visual+BasicNET调用Matlab神经网络工具箱的实现方法

";<=;7 自动化服务器可使用以下代码 ’
4A1 ";<=;7 6M !7D?O< V 定义 ";<=;7 对象 ";<=;7W’K?;<? !7D?O<XY";<=;7/6NN=AO;<A8>YZ V 设置 1;<=;7 为自动化服务器
这样就创建好了 6O<AP?Q 对象 # 接下来可以对 其进行操作了 $ 
C语言环境中调用Matlab程序指南甄梓宁znzhen@Matlab在计算方面功能强大、编写简单,但是要运行Matlab程序必须装有Matlab并且用户界面也不够完善,因此除了计算的其他部分采用C等更规范完备的语言进行编写是较好的选择。
本文就对如何在C程序中调用Matlab程序作说明。
在C程序中调用Matlab程序有两大类方法。
第一种是调用Matlab引擎,第二种是将m文件打包成dll文件在C语言环境下调用。
前者虽然易于实现,可以实时监控程序的运行,但是独立性差,需要安装完整版Matlab,且每次调用都会启动MATLAB.exe进程;后者则实现复杂,调试麻烦,但只需安装MCR(Matlab Component Runtime),耗费资源较少。
关于MCR,请见第四章的说明。
至于两种方法需要在C环境中如何配置请见第五章。
而反过来若要在Matlab下调用C程序则一般使用Matlab自带的mex工具,在此不作介绍。
一、调用Matlab引擎调用Matlab引擎可以在WIN32、MFC中使用,它的原理实际上相当于打开一个精简版的Matlab然后往里面输命令。
下面是调用Matlab中的加法程序add.m的例子。
先在Matlab的work目录下创建add.m文件并编写程序如下:function s = add (a, b)s = a+b;在C程序中,首先打开精简版的Matlab:(所需头文件,引用库等见第五章)Engine *ep = engOpen (NULL);编译运行后,会自动打开一个命令行监控窗口,输入pwd就可以看到当前的工作目录,于是需要先将工作目录转换至存放add.m的目录:engEvalString (ep, ”cd ..\\..\\work”);engEvalString是往Matlab里输命令的函数,显然我们的目标是成功运行:engEvalString (ep, ”s=add(a,b)”);当然,目前Matlab中并没有a和b两个变量,因此需要在C中初始化这两个变量并转换成Matlab基本变量类型mxArray,才能将它们输入到Matlab中。
VC++调用Matlab引擎(engine)配置方法

如何在C/C++语言里调用Matlab引擎(engine)——(上篇)windows下的Visual C++平台Windows下调用Matlab引擎要做好以下三点设置(1)设置头文件目录(2)设置库文件目录,并添加链接库输入项libeng.lib和libmx.lib(3)设置环境变量以下以Visual Studio 2008为例来说明如何设置这三点:1、添加头文件目录依次选择:“工具”->“选项”,调出对话框后再在对话框左边“选择项目和解决方案”->“VC++目录”然后在右边选择“显示以下内容的目录”下的选框选择“包含文件”,再在目录列表的最下边空行处选中添加:matlab安装目录下的\extern\include路径比如我的是:C:\Program Files\MATLAB\R2011a\extern\include如果现在生成项目,链接将不会通过,比如可能会出现:1>engwindemo.obj : error LNK2019: 无法解析的外部符号_mxDestroyArray,该符号在函数_WinMain@16 中被引用1>engwindemo.obj : error LNK2019: 无法解析的外部符号_mxGetPi,该符号在函数_WinMain@16 中被引用1>engwindemo.obj : error LNK2019: 无法解析的外部符号_engClose,该符号在函数_WinMain@16 中被引用1>engwindemo.obj : error LNK2019: 无法解析的外部符号_engGetVariable,该符号在函数_WinMain@16 中被引用1>engwindemo.obj : error LNK2019: 无法解析的外部符号_engOutputBuffer,该符号在函数_WinMain@16 中被引用1>engwindemo.obj : error LNK2019: 无法解析的外部符号_engEvalString,该符号在函数_WinMain@16 中被引用1>engwindemo.obj : error LNK2019: 无法解析的外部符号_engPutVariable,该符号在函数_WinMain@16 中被引用等链接错误;这就需要设置下面的库文件目录2、添加库文件目录在刚才调出来的对话框中,设置库目录:选择“显示以下内容的目录”下的选框选择“库文件”添加matlab目录下的C:\Program Files\MATLAB\R2011a\extern\lib\win32\microsoft注意:如果是项目要生成的是64位程序那么应该选择的是C:\Program Files\MATLAB\R2011a\extern\lib\win64\microsoft点击确定退出对话框,然后给项目添加链接库输入项:在解决方案资源管理器里选择对应的项目单机右键选择最下面的“属性”弹出属性对话框,在右边依次选择“配置属性”->“链接器”->“输入”,然后在右边“附加依赖项”那一项加上libeng.lib libmx.liblibmat.lib单击确定退出注意:(1)不要删除原有的依赖项(2)依赖项之间用空格隔开做到这一步时生成时就没问题出现了,但是运行程序时会出现“因为计算机中丢失libeng.dll”等类似问题第(3)步就解决这个问题的。
VC调用Matlab生成的dll文件

VC调用Matlab生成的dll文件通常在实现图像处理的算法时我们使用Matlab编程,因为它具有丰富的库函数以及操作方便,然而在工程项目中通常使用C/C++语言。
如果我们将matlab代码完全重写成C++代码会很麻烦,最好的办法是借助matlab与C/C++接口将.m程序转成dll文件!一、使用matlab将.m转成dll文件1、在命令行中输入mex -setup提示你是否要在本地安装matlab compilers,然后选择compiler 类型,有matlab自带的编辑器以及检测到的其他编辑器,比如“Microsoft Visual C/C++ version 6.0 in E:\Program Files\Microsoft Visual Studio”,根据自己实际情况选择。
2、在命令行中输入mbuild -setup这里的选项和上面类似,依次选择环境确定。
3、生成dll文件一句命令mcc -W cpplib:add -T link:lib add.m前面的add表示生成的dll文件名,后面的add.m顾名思义是.m 文件名。
生成后会多出8个文件,有用的是add.ctf add.dll add.lib add.h4个文件,据说新版的Matlab不会生成.ctf文件。
二、VC6.0中调用生成的dll文件上面生成的dll文件,我们可以借助VC6.0的Depends工具查看导出函数名,但是我们要调用导出函数必须要知道函数的形参返回类型等,这里要借助.h文件,它包含了导出函数的声明,下面以实例来讲解使用方法:1、add.m文件function [a,b]=add(x,y)a=2*x+y;b=3*y;end注意了add函数有两个返回值,可以猜测一下在C++中是如何处理的;2、add.h文件截取其中一段关键代码如下:extern void add(int nargout, mwArray& a, mwArray& b, const mwArray& x, const mwArray& y);实际上函数的返回是变相的放到形参中的,依次是输出参数个数,输出参数,输入参数。
Vc++下如何利用Matlab工具箱进行数字信号处理

Vc++下如何利用Matlab工具箱进行数字信号处理【摘要】这篇文章将介绍在Vc++下如何利用Matlab工具箱进行数字信号处理。
我们将介绍Matlab工具箱的基本概念,然后深入探讨数字信号处理的基本概念。
接着,我们会详细讲解使用Vc++调用Matlab工具箱的步骤,并通过数字信号处理实例演示来加深理解。
我们还会探讨优化算法在数字信号处理中的应用。
通过本文的学习,读者将了解Vc++下利用Matlab工具箱进行数字信号处理的优势,并展望未来在数字信号处理领域的发展。
通过结合实际案例和理论知识,读者可以更好地掌握数字信号处理技术,提高工程实践能力。
【关键词】Vc++, Matlab工具箱, 数字信号处理, 调用步骤, 实例演示, 优化算法, 优势, 发展展望1. 引言1.1 介绍Vc++下如何利用Matlab工具箱进行数字信号处理在Vc++下利用Matlab工具箱进行数字信号处理是一种非常有效的方法。
Matlab工具箱提供了丰富的数字信号处理工具,包括滤波器设计、信号分析、频谱分析等功能,可以帮助用户快速高效地处理数字信号。
在本文中,我们将介绍Matlab工具箱的基本概念,数字信号处理的基本概念,以及如何使用Vc++调用Matlab工具箱进行数字信号处理。
我们还将通过一个数字信号处理实例演示,展示优化算法在数字信号处理中的应用。
我们将总结Vc++下利用Matlab工具箱进行数字信号处理的优势,并展望未来在数字信号处理领域的发展。
通过本文的学习,读者将能够了解如何在Vc++环境下利用Matlab工具箱进行数字信号处理,并掌握相关的技术和方法。
2. 正文2.1 Matlab工具箱的介绍Matlab工具箱是一款功能强大的工具,专门用于进行数字信号处理。
它包含了许多专业的算法和函数,可以帮助用户高效地处理各种信号数据。
Matlab工具箱涵盖了从信号采集、分析到处理的全过程,为数字信号处理提供了强大的支持。
在Matlab工具箱中,用户可以找到各种常用的信号处理功能,如滤波、频谱分析、傅里叶变换等。
VC调用matlab的步骤

数据拟合的关键步骤数据拟合的好坏与模型是否能够成功有很大的关系,因此在数据拟合上,该软件库使用了比较成熟的数据拟合算法,即采用比较权威的高效计算软件Matlab6.1中的数据拟合函数进行拟合。
对于在Visual C++中调用Matlab应用程序接口,关键在于设置编译环境和使用正确的调用规则,然后,在发布软件时携带必要的动态连接库就可以保证程序的独立性[10]。
1、设置Visual C++编译环境对于调用Matlab的应用程序来说,只要保证程序的编译路径中包含Matlab 的目录下的Extern\Include目录,然后在程序中添加libmx.lib、libmmfile.lib、libmex.lib和libmatlb.lib即可[14]使用Matlab提供的高效算法。
而针对于Visual C++6.0来说,具体设置如下:图3.1 选项目录属性页第一步:打开应用程序工程后,在‘工具’菜单下选择‘选项’选单,将弹出选项对话框,选择其中的‘目录’属性页,如图3.1所示,在其中的Showdirectories for下拉式选项框中分别选择Include Files和Library Files,在下部的编辑框中输入以下路径:Matlab根目录\EXTERN\INCLUDEMatlab根目录\EXTERN\LIB然后选确定按钮。
第二步:选择下拉菜单Project中的菜单项Add To Project>>Files,将Matlab根目录\\extern\lib\win32\microsoft\msvc60下的四个lib文件:libmx.lib、libmmfile.lib、libmex.lib、libmatlb.lib添加到工程中。
完成上述工作后,就可以在Visual C++中调用Matlab数学函数及计算引擎了。
2 、Matlab应用程序接口调用规范在需要调用Matlab应用程序接口的单元文件.Cpp开头添加#include “Matlab.h”语句,然后在程序实现部分调用Matlab函数。
VC2010在win764位系统下调用MATLAB2012a(2010a以后)的设置方法

VS2010与Matlab2012a混合编程(Alex-liu版,哈哈)套用今天的签名“最新的VS+最新的MATLAB+最新的WINDOWS=无尽的烦恼”,用了一天的时间去配置相关的环境,确实很囧。
好在现在问题解决了,特发布过程如下,希望能给有需要的朋友带来帮助。
注:因为程序也是刚调通,所以有些原因还没有仔细分析,如果不对,敬请指教。
1.<MATLAB>表示MATLAB按照目录2. 配置过程中的错误,请见:附录3.文中包含"只针对64位WINDOWS"字眼设置的,在WIN32(X86)环境无需设置4.本文配置中可能包含多余的一些配置,不过现在的目的是运行成功哈~~~至于精简部分,待我和大家使用时慢慢研究。
/*******************************************环境:1.VS20102.MATLAB2012a3.WINDOW 7 (X64)******************************************/1.Matlab环境设置要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
虽然生成的可执行程序可以脱离Matlab环境运行,但是它需要Matlab C/C++数学库文件或者图形库文件的支持才能运行。
但如果C/C++源代码完全是按传统C/C++源代码语法规则编写,没有包含Matlab数学库和图形库的调用,则不仅可以独立与Matlab环境,也不需要那两个库函数的支持。
在Matlab的Command Window 下输入命令mbuild –setup操作过程如下图:然后输入命令mex –setup以类似的方法配置编译器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
是解释性语言 , 对命令是边解释边执行 , 因而其执行 速度 比较 慢 , 特别 是进 行循 环计 算或 执行 多次嵌 套 , 运行 效率 非 常 低 , 因而 MAT AB是 不太 适 合 做 复 L
杂 的数值 计பைடு நூலகம் 的 。然 而 , MATL AB所 拥有 的“ 所 无 不 能” 的矩 阵处理 功能 ,丰 富多 彩” “ 的图 画功能却 是 其 他 程 序 设 计 语 言 所 不 易拥 有 的 。与此 同时 , C C、
J ne 2008 u
MS VC环境 中 MATL AB功 能 调用 技 术
徐春梅 刘桂花
( 汉工程 职业 技 术学 院机 电工程 系 湖北 武 摘 要 武 汉 : 3 0 0 4 08 )
MATL B是 解释性语 言 , A 具有 强 大的数值 、 图形 处 理 能 力 , C+ +则 是 编译 性 语 言 , 而 执
+ +等编译 性 语 言经 编 译 通 过后 , 以二进 制 代 码 的 方 式执 行 , 执行 速度 非 常快 , 进行 多层 次 的嵌 套循 在 环运 算 时 , 就更 能体 现 它们 的优势 。因此 , 它们有 把
MATL B编译器 是 在 MATL A AB环 境 下 的 一 种 编译 工具 , 能将 M 文件 转 化为 C、 它 C++或 P等
维普资讯
行 速度 非 常快 , 通过把 它们有机 的结合起 来 , 能 开发 出简单 、 就 高效 的软 件 。介 绍 了 MATL B 外 A
部 程序接 口, 通过 实例介 绍 了 VC 并 ++调 用 MATL AB功 能 的三种 方 法。 关 键词 VC++ ;MAT A 程序接 口 L B;
文 献标识 码 : 文章 编号 :6 13 2 ( 0 8 0 —0 00 A 1 7— 5 4 2 0 ) 20 4 —3 中图分 类号 : P 1 . 6 T 3 1 5
MATL AB是 Mah r s 司推 出 的一 种 适 tWo k 公
非 常繁 复 的矩 阵运 算任 务 , 而极 大 的 减少 程 序 设 从 计 的工作 量 ; 时这 两 个 函 数 库 继 承 了 MATL 同 AB 的大量矩 阵 计 算 特性 , 以使 熟 悉 MATL 可 AB 的用 户 方便 的采 用 C或 C +进 行 程序设 计 。更 为重 要 +
L AB扩展 中的重要 组成 部 分 , 们包 含 了约 40个 它 0 MATL AB数学 函数 , 别 用 C语 言 和 C+ +语 言 分 编写 , 户按 照一 定 的规则 , 以在 C语 言和 C 用 可 ++
21 1 通 过 MATL .. AB 引擎 实现 与 VC++ 的互连 MATL AB引擎 采 用 客 户 机 / 务 器 的计 算 模 服 式 , 过 Acie 术 的支 持 , 通 t X技 v 实现 VC+ +应 用 程
各种 不 同类 型 的源 代 码 , 在 此 基 础 上 根 据 应 用 需 并
要生成 ME X文 件 、 独立 可 执 行 应 用程 序 、 S函数 等 文件 类 型 。独 立 可 执 行 应 用 程 序 完 全 可 以 脱 离 MATL B环境 独 立 运 行 , 至 计 算 机 上 没 有 安 装 A 甚
( ) ATL 1M AB C+ + )M ah L b a y C( t i r r
速度 , 提高 代码 执行 效率 。
2 V ++ 中实现 MA L B 功能调用 C TA
2 1 V + + 中 实现 MA L . C T AB功 能调 用 的 三 种 方
式
M ATL C+ + )M ah Lb ay是 M AT— AB C( t irr
语言的应用程序中轻松 的调用它们 , 用于完成原本
收 稿 日期 :0 71 —0 2 0 -12 收 回 日期 :0 80—8 2 0 -21
作 者 简 介 : 春 梅 (9 7 )女 , 士 研 究 生 , 事 自动控 制 方 面 研 究 与 教 学 . - i:cm@ w x . e 徐 17  ̄ , 硕 从 E malxh g y nt
的是 , 用 MAT AB C( 使 L C+ +)Mah Lb ay编 t irr 写 的应 用程 序 可 以完 全脱 离 MATL B环境 独 立 地 A 执行。
( ) ATL 2M AB m plr Co i e
于 科学 和工 程技 术 人 员 使 用 的 开发 工 具 , 矩 阵 运 在 算 、 值 分 析 等 方 面 具 有 较 强 的 优 势 。MATL 数 AB
应用范围。同时 , 采用编译器对 M 文件 编译 之后 ,
可 以有效 隐藏 程序 的算 法 , 提高保 密 性 。执行 ME X
文件 和独 立可 执行 程序还 可 以大 大提 高程 序 的运 行
使用 MATL AB所 提供 的功 能 , 成 独立 应 用 程 序 完 的设 计 , 并且将 MATL AB本 身 的 函数 转 化 为 C或 C +的源 代码 。它 主要包 含 两个部 分 : +
维普资讯
第 2O 第 2 卷 期
2O年6 O8 月
武 汉工 程 职 业 技 术 学 院 学报
J r a W u n En n e i ns iu e ou n l of ha gi e rng I tt t
V l N O 2 ol 9
MATL AB也可 以 运 行 , 而 大 大 地 扩 展 了 程 序 的 从
机 的结合 起 来 , 能很 好地 各 自发挥 它们 的优点 。 就
1 MA AB 的外 部 程 序接 口 TL
MATL B外部 程 序接 口是 MATL A AB系统 提
供 的一个 非 常重 要 的组 件 , 过 该接 口可 以方便 的 通