VC++与MATLAB混合编程
MATLAB与VC++混合编程的研究及应用
MATLAB与VC++混合编程的研究及应用摘要:介绍了三种实用易行的matlab与vc++混合编程方式,即利用matlab的mcc编译器,使用matcom软件转化m文件,使用matlab的com builder工具制作com组件。
针对具体程序分别应用三种方法来实现,对每种方法介绍了详细步骤。
对三种方法进行了分析比较,总结了各自的优缺点,实现了matlab出色的图形处理功能和数值计算能力与vc++强大编程能力的结合。
关键词:matlab;vc++;混合编程中图分类号:tp311 文献标识码:a 文章编号:1009-3044(2013)10-2353-03matlab是适合多学科,多种工作平台的功能强大的大型数值计算和系统分析软件。
matlab将数值分析、矩阵计算、信号处理和图形显示相结合,包含了大量高度集成的函数,为科学研究、工程设计及众多学科领域提供了一种简洁、高效的编程工具,在数值分析、科学计算、算法开发、建模和仿真等方面具有独特优势[1]。
但是matlab使用的是解释性语言,限制了自身的执行速度;程序的执行限制与matlab自身的运行环境,不利于应用程序的开发;gui功能较差。
vc++是强大的windows应用程序开发工具,它提供了高度集成的工具集和可视化集成的编程环境,包括了microsoft的代码优化技术,极大提高了应用程序的设计效率,还提供了复杂的资源编辑器,拥有强大的gui功能[2]。
因此,实现matlab与vc++等可视化程序设计语言的混合编程,提高程序的执行速度,美化应用程序界面,脱离matlab环境,发布独立的应用程序,同时利用matlab在数值分析、矩阵计算、信号处理和图形显示等方面的强大功能,具有重要的意义。
1 matlab与vc++混合编程方法matlab与vc++有多种接口方法,但是一些常见方法难以实现,执行效率低,如matlab engine、直接调用matlab的c/c++数学函数库等。
VC和MATLAB混合编程方法在迷彩斑块设计中的应用
i t .Th ma eP o esn ob xi ald B sn eI g r cs igTo lo c l yu igMATLAB fn t n nod rt raeC(M tra e.VC十 十 c l h s e u ci si r e oce t ) i efc s o n al t e s
i t ra e ,a l a r c s e h e u n n e u t tr a i h r c s ig o h n u a k r u d i g b an t e b u d n e f c s swel sp o e s st er t r i g r s l .I e l e t ep o e sn f e i p t c g o n z t b ma eo t i o n — h
关键词 MAT I AB; + + ;边缘 提取 ; O VC C M
T 3 1 5 P 1.6 中 图分 类 号
Ap lc to f VC n ATLAB n D e ni m o l g p t p ia in o a dM i s g ng Ca i ufa e S o s
白万 民 闰 飞 喻 钧
西 安 70 3 ) 1 0 2 ( 西安 工 业 大 学 计 算 机 科 学 与 工程 学 院
摘
要
通过一个迷彩斑块设计 实例 , 阐述 VC和 MAT I AB的混合编程 方法在迷 彩设计 中的应用 。使用 MAT A L B
函数 调用 图像处理工具箱 , 创建 C OM 接 口, 从而实现 VC ++调用该 C M 接 口 , O 并对返 回结果进 行处理 。实现对输入的背 景图像进行处理 , 获得 图像 的边缘轮廓 , 为迷彩的斑块设计提供 依据 。既能充分利用成熟 的函数库加快软件开发 , 成功提取 到背景 的较闭合边缘 , 又能保证 良好的用户界面及性能 。
VC与Matlab混合编程
VC与Matlab混合编程本⽂主要介绍VC与Matlab混合编程的两种⽅法,并详细介绍了VC向Matlab传递复杂数据:结构体的⽅法,有详细代码说明。
Matlab 主要⾯对科学计算、可视化以及交互式程序设计的⾼科技计算环境,但由于Matlab开发平台上开发的程序不能脱离Matlab运⾏环境,因⽽在处理⼀些实际应⽤问题时显得灵活性不⾜,⽽VC++则在⼀定程度上能够弥补这⼀漏洞,因此,将⼆者结合共⽤,各献其长,可以为科研⼯作和⼯程开发提供更为强⼤的技术⽀持。
Matlab作为控制系统设计的⼀种通⽤⼯具,它可以很⽅便的和VC进⾏连接。
⼀般⽽⾔,Matlab与VC混合编程的实现⽅法有很多种,这⾥主要介绍以下两种:1. VC调⽤Matlab Engine的⽅式:Matlab Engine是⼀组Matlab提供的接⼝函数,⽀持C/C++语⾔,Matlab Engine采⽤C/S(客户机/服务器)模式,Matlab作为后台服务器,⽽C/C++程序作为前台客户机,向Matlab Engine传递执⾏命令和数据信息,从Matlab Engine接收执⾏结果。
⽤户可以在前台应⽤程序中调⽤这些接⼝函数,实现对Matlab Engine的控制。
采⽤这种⽅法⼏乎能利⽤Matlab全部功能,但是需要在机器上安装Matlab软件,缺点是执⾏效率较低。
下⾯简单介绍下这种⽅式的实现步骤:1.1 API接⼝介绍先来介绍⼀组Matlab提供的引擎API接⼝:(仅作简单功能介绍,详细参数说明请参考Matlab帮助)Engine* engOpen(const char* startcmd)启动Matlab引擎int engClose(Engine* ep) 关闭Matlab引擎int engEvalString(Engine* ep, const char* string)执⾏Matlab表达式mxArray* engGetArray(Engine* ep, const char* name)获取⼀个变量数组的值int engPutArray(engine* ep, const mxArray* mp)设置⼀个变量数组的值int engPutVariable(Engine *ep, const char *name, const mxArray *pm)同上mxArray *engGetVariable(Engine *ep, const char *name)获取⼀个变量int engOutputBuffer(Engine* eP,char* p,int n)获取输出字符串1.2 VC环境配置要想在VC集成环境下调⽤Matlab引擎实现VC和Matlab的混合编程,⼀般需要经过以下⼏个必要的步骤:(以下以Matlab2008a和VS2005版本为例)(1)添加include路径:将“\extern\include”(在Matlab的安装路径下)路劲添加到VC编译器的include下(2)添加lib路径:将“\extern \lib\win32\microsoft” (在Matlab的安装路径下) 路径添加到VC编译器的lib下(3)加载lib:需要加载⾄少libmx.lib、libmat.lib、libeng.lib三个库(4)include头⽂件:在要使⽤ engine 函数的地⽅包含engine.h头⽂件1.3 引擎调⽤接下来就可以在VC中调⽤Matlab引擎了,简单的⽰例代码如下:#include "engine.h"#pragma comment(lib, "libeng.lib")#pragma comment(lib, "libmx.lib")#pragma comment(lib, "libmat.lib")void TestDeno(){Engine* pEng = NULL;if (!(pEng = engOpen(NULL))){printf("Open matlab enging fail!");return;}//call Engine plot A*sin(t)+B A=2 B=1mxArray *A = NULL;double init = 2;A = mxCreateDoubleMatrix(1, 1, mxREAL);memcpy((void*) mxGetPr(A), (void*)&init, sizeof (double));engPutVariable(pEng, "A", A);init = 1;memcpy((void*) mxGetPr(A), (void*)&init, sizeof (double));engPutVariable(pEng, "B", A);mxDestroyArray(A);Sleep(3*60*1000);engEvalString(pEng, "t=0:0.2:7;plot(t,A*sin(t)+B);");if(NULL != pEng){engClose(pEng);}}⽰例代码通过VC调⽤Matlab引擎,绘制正弦曲线,相对简单,就不再详细解释,效图如下:2. VC调⽤Matlab DLL的⽅式DLL是⼀个可执⾏的⼆进制⽂件。
Matlab与C混合编程的方法研究与实现毕业论文
Matlab与C混合编程的方法研究与实现摘要:文章探讨了MATLAB与VC++的优缺点,介绍了VC++与Matlab混合编程的几种方法。
通过二者的结合,既有效地利用了MATLAB强大的数值计算能力和众多的函数,大大减少程序设计的工作量,又继承了VC++良好的程序界面,证明是一种很好的程序设计方法。
具体说明了如何应用Matlab引擎实现混合编程以及如何利用MATCOM进行MATLAB和VC++混合编程,并将两种方法用于数字图像处理。
关键词:MATLAB;VC++;MATCOM;引擎;混合编程;图像处理一、引言1、数字图像处理简介:图像技术由高到低分为三个层次:图像处理、图像分析和图像理解。
图像处理是比较底层的操作,它主要在图像像素级上进行处理,处理的数据量非常大。
数字图像处理最基本的目的就是改善图像,主要是按需要进行适当的变换突出某些有用的信息,去除或消弱无用的信息,如改变图像的对比度,去除噪声或强调边缘的处理等,其基本方法有:直方图修正、灰度变换、图像的频域特性、图像平滑、图像锐化等。
直方图是图像的重要统计特征,是表示数字图像中每一灰度级与该灰度级出现的频率数间的统计关系。
直方图能给出该图像的大致描述,如灰度范围、灰度级的分布、整幅图像的平均亮度等,但它不能完整地描述一幅图像。
通常用横坐标表示灰度级,纵坐标表示频数。
通常一幅均匀量化的自然图像由于其灰度直方图分布集中在较窄的低值灰度区间,引起图像的细节看不清楚,为使图像变得清晰,我们可以通过变换使图像的灰度范围拉开或使灰度分布在动态范围内趋于均匀化,从而增加反差,使图像的细节清晰,达到图像增强的目的。
灰度变换是图像增强的一种重要手段,它可以使图像动态范围加大,使图像对比度扩展,图像更加清晰,特征更加明显。
灰度变换可分为线性、分段线性、非线性以及其他的灰度变换。
线性灰度变换实际上使曝光不充分的图像中黑的部分更黑,白的部分更白,从而提高对比度。
图像中的边缘或者线条部分与图像频谱中的高频成分相对应,因此采用高通滤波的方法让高频分量顺利通过,使低频分量受到抑制,就可以增强高频的成分,使图像的边缘或者线条变得清晰,实现图像的锐化。
MATLAB与VC++混合编程实现一维小波多尺度分解
引言小波分析世纪80年代开始发展成熟起来的一个数学分支,其应用领域十分广泛,并逐步成为信号分析的又一有力工具。
MATLAB的小波工具箱为我们提供了小波多尺度分解函数,方便了我们对小波的使用。
但是用它所编写的软件不能脱离MATLAB编程环境在W indows平台下直接运行,代码执行效率低下,运行时占较多的系统资源,不能达到某些用户的需求。
VC++是由美国Microsoft 公司开发的可视化C/C++集成编程环境,是目前功能最强大的软件开发工具之一。
被广泛应用于Win32平台的基础应用程序的开发。
它具有强大的图形界面编程能力且代码执行效率高,可生成脱离VC++环境而独立运行的应用程序。
可是VC++在数值处理分析和算法工具等方面不如MATLAB。
本文结合VC++和MATLAB 的各自优点,以VC++图形界面作为前台框架,MAT LAB作为后台进行数值运算和数据可视化,利用组件对象模型(COM)技术作为媒介,实现了一维小波多尺度分解。
1、一维小波多尺度分解原理及其MATLAB实现1.1 一维小波多尺度分解原理以此类推,直到指定级数的多尺度小波分解为止,分解过程如图1示。
图中s为原始信号,cd1,ca1分别为分解后第1层的细节序列和近似序列,cd2,ca2分别为分解后第2层的细节序列和近似序列,以此类推。
因为这种算法分解的数据结构是塔式结构,所以这种算法也常被称为塔式算法(Pyramid Algorithm)。
1.2 一维小波多尺度分解及重构的MATLAB实现MATLAB 小波工具箱提供了以下几个实现一维小波分解和重构的函数[3]:[C,L] = WAVEDEC(X,N,’wname’),多尺度一维小波分解函数。
其中C为分解结构变量,L为个分解结构以及原始信号长度变量,X为原始信号,N为分解层度,’wna me’为小波类型。
X = WAVEREC(C,L,’wname’),多尺度一维小波重构函数。
其中C,L为多尺度一维小波分解函数WAVEDEC的计算结果。
Visual-C#与Matlab混合编程示例(含代码)
Visual C# 与Matlab 混合编程由于Visual C# 与Matlab 混合编程的资料并不多,本文通过一个实例来阐述Visual C# 与Matlab 混合编程的方法。
一、混合编程的 4 种方式1. 通过从Matlab的*m文件中生成C语言版本的DLL1) 在Matlab中写好m文件;2) 使用Matlab的编译器,编译为C#能识别的DLL文件;3) 建立C#工程,在工程中引用上一步生成的文件;2. C#调用Matlab工作区计算并返回结果主要使用engOpen, engClose, engPutVariable, engEvalString, engGetVariable 函数进行操作。
大致过程如下:MatlabCSharp.engPutVariable(ep, "ml_a", mx_a);MatlabCSharp.engPutVariable(ep, "ml_b", mx_b);MatlabCSharp.engEvalString( ep, "ml_c = ml_a + ml_b ;" ); mx_c = MatlabCSharp.engGetVariable(ep, "ml_c" );3. 使用Matlab DeployTool 生成COM 组件1) 单击菜单New Deployment Project -> MATLAB Builder NE -> Generic COM Component2) 添加相应的M 文件3) 保存,编译4) 新建C#工程,引用生成的DLL文件。
4. 使用Matlab DeployTool 生成.Net 组件1) 单击菜单New Deployment Project -> MATLAB Builder NE -> .Net Component2) 添加相应的M 文件3) 保存,编译4) 新建C# 工程,引用生成的DLL 文件。
VisualStudio与Matlab实现混合编程
VisualStudio与Matlab实现混合编程环境:Win10vs2010Matlab2015⾥⾯有很多选做的内容,其中2、3必做1.Matlab环境设置:(选做)我没有做这步,因为打mbuild -setup指令不识别,缺少SDK,但是可以正常调⽤Matlab,这步是其他⽅式调⽤Matlab中的⼀步,使⽤Matlab⽣成DLL⽂件,VS引⽤要建⽴独⽴运⾏的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以类似的⽅法配置编译器。
Matlab 的配置完成。
2.VS环境设置(必做)(1)设置Include 和Library ⽬录项⽬右键->属性->VC++⽬录->包含⽬录:添加<MATLAB>\R2010b\extern\include\win64 我的是:D:\RUANJIAN\Matlab\extern\include\win64<MATLAB>\R2010b\extern\include\ 我的是:D:\RUANJIAN\Matlab\extern\include项⽬右键->属性->VC++⽬录->库⽬录:添加<MATLAB>\R2010b\extern\lib\win32\microsoft 我的是:D:\RUANJIAN\Matlab\extern\lib\win64\microsoft<MATLAB>\R2010b\extern\lib\win64\microsoft截图::(2)设置⼯程⽬录: ( 我并没有设置)项⽬右键->属性->C/C++->常规->附件包含⽬录:添加<MATLAB>\R2010b\extern\include\win64<MATLAB>\R2010b\extern\include\项⽬右键->属性->链接器->常规:添加<MATLAB>\R2010b\extern\lib\win32\microsoft<MATLAB>\R2010b\extern\lib\win64\microsoft项⽬右键->属性->链接器->输⼊->附件依赖性:添加 (必做)libeng.liblibmat.liblibmex.liblibmx.lib 注:1.lib⽂件包含在<MATLAB>\R2010b\extern\lib\win64\microsoft,可根据需要增减 2.附件依赖性在VS2010前以空格隔开,在VS2010后使⽤;隔开。
MATLAB与VC混合编程配置设置
MATLAB与VC混合编程相关配置的设置MATLAB与VC的混合编程中,需要对电脑的“环境变量”和VC的“环境配置”进行设置,然后才可以进行程序的调用。
(1)电脑中“环境变量”的设置:对于win10系统控制面板→系统→高级系统设置→环境变量→系统变量→path中添加D:\softwares\MATLAB\ bin\win64,该路径是MATLAB中dll文件的路径,在path 中添加该路径的目的是让VC在运营时能够读取dll文件。
否则VC在运行时可能会出现“计算机丢失**.dll文件”的情况。
对于win7系统的“环境变量”设置,同样是在path中进行的。
(2)VC的环境配置首先需要建立一个新项目,如MyAdd.cpp。
项目→MyAdd属性→VC++目录→包含目录→D:\softwares\MATLAB \extern\include;项目→MyAdd属性→VC++目录→库目录→D:\softwares\MATLAB\installation document\extern\lib\win64\microsoft。
C/C++→常规→附加包含目录→D:\softwares\MATLAB \extern\include;C/C++→常规→调试信息格式→程序数据库(/Zi);链接器→常规→启用增量链接→是(/INCREMENTAL);链接器→常规→附加库目录→D:\softwares\MATLAB\ extern\lib\win64\microsoft;链接器→输入→附加依赖项→libMyAdd.lib,mclmcrrt.lib,libmx.lib,libmat.lib,mclmcr.lib。
其中在输入时这些lib之间用回车换行。
上述步骤的工作界面如下所示:需要注意:在进行VC与MATLAB混合编程的过程中,用到的环境是32位还是64位,在这里需要是相同的编程环境才可以相互调用,如:上图中如果是x32,则需要点击“配置管理器”进行重新设置。
VC与Matlab混合编程的实现
1 引 言 、
MA L ec p t %\xeni ld \p a n
V 60是 Wi o s 面下 计算 机 专 业 人 士 进 C. n w 界 d
行 软 件开 发 时 的一种 强 大工 具 .在 图形 用 户界 面 需要 说 明的是 ,如果 Ma a t b的版本 不 同 , l 这 开发 方 面有 优势 . 码效 率 高 . 而在 科 学计 算 方 里看 到 的路 径就 会有 差 别 . 如 Ma a 6 代 然 例 t b 5和 Ma— l t 面能 力却 略 显不 足 。例如 , 当我们 采 用 V C作 为 开 l 7 a 4的路 径就 会有 所 差别 b 发 工 具 解 决 图 像处 理 和 模 式 识别 领域 的 问题 时 . Se .注 意 %Malb e trk bw n 2 \ . tp 3 t %\xenl \ i3 mi a i 经常需 要 进行 一 些复 杂 的矩 阵计算 例 如计 算 矩 阵 c0o \ v6 r fmsc 0中 的 * i 件 与 你 需 要 调 用 的 函 st .b文 1
12 7
福 建 电
脑
2 1 第 4期 0 2年
V C与 Ma a t b混合 编 程 的 实现 l
黄 红兵
( 建农 林 大 学计 算机 与信 息 学院 福 建 福 州 3 0 0 福 5 0 1)
Matlab与VC(MFC)混合编程(介绍Matcom与Matlab 引擎两种方式)文库
本文由wolf1sky贡献doc文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
Matlab 与 VC 混合编程 1:一、采用 Matcom1、目标1. 测试在 VC 中调用 MatrixC++库,生成矩阵并显示 2. 测试 VC 中调用.m 文件2、步骤2.1 目标 1<1>建立 VC 工程,添加库 v4501v.lib,有两种方法:?向工程中添加文件 v4501v.lib 在 Setting/link 中添加库 v4501v.lib(这样写的前题是 VC 路径设置正确,即在 Options/Directories 中设置,否则请注明详细路径)二者选其一就可以了。
<2> 添加头文件 #include "matlib.h" (这样写的前题是 VC 路径设置正确,即在 Options/Directories 中设置,否则请注明详细路径)建议:最好在工程中把文件 matlib.h 添加进来,方便查看函数详细说明 <3>现在就可以调用 Matrix中的C++函数了,例子如下:// Init matcom initM(MATCOM_VERSION); winaxes(AfxGetMainWnd()->GetSafeHwnd()); Mm a,b; a = (BR(1),2,3,semi,4,5,6,semi,7,8,9); a = transpose(a); b = (BR(1),2,3,semi,4,5,6,semi,7,8,9); m_1.Format("%3f %3f %3f \r\n%3f %3f %3f \r\n%3f %3f %3f \r\n",a.r(1,1),a.r(1,2),a.r(1,3),a.r(2,1),a.r(2,2),a.r(2,3),a.r(3,1),a.r(3,2),a. r(3,3));//m_1 是一个 CEdit 控件 UpdateData(FALSE); exitM();2.2 目标 2<1>首先用 Matlab 调试成功以下两个有依赖关系的.m 文件文件 1:equation.m function y = equation(a,b) y = a * b; 文件 2:CallE.m % function name function [o1,o2] = CallE(x) if (nargin ~= 1) error('arguments must be inputed!'); endif (x == 1) a = reshape(1:9,3,3); elseif (x == 2) a = reshape(11:19,3,3); else error('input error'); end b = magic(3); o1 = equation(a,b); o2 = o1 + 1; <2>将以上两个文件放在同一个目录下,启动 MatCom 编译运行 CallE.m, >> CallE(2) 则在同一目录下生成一个 DEBUG(或者是 Release,在 MatCom 的菜单项 Configuration 中选择)目录下可以找到相应的.cpp 及.h 文件,把它们全部拷贝到 VC 工程目录下,也可以自己建一个文件夹 <3>在 VC 项目中添加这些文件,并在头部添加相应.h 的引用,如下: #include "./matlib/equation.h" #include "./matlib/calle.h" <4>添加调用函数的代码,如下: Mm a,b,c; a = BR(2); 表示输入参数到输出参数的间隔,《MatrixLIB user's 详见calle(a,i_o,b,c); //i_o 是一个间隔符,Guide》m_2.Format("%3f %3f %3f \r\n%3f %3f %3f \r\n%3f \r\n",b.r(1,1),b.r(1,2),b.r(1,3),b.r(2,1),b.r(2,2),b.r(2,3),b.r(3,1),b.r(3,2),b. r(3,3)); %3f %3fUpdateData(FALSE);3、遇到的问题及解决方案<1>当在 VC 工程中添加由 Matcom 转换的 cpp 及 h 文件后,注:如果在编译中出现下列错误:fatal error C1010: unexpected end of file while looking for precompiled headerdirective 解决:进行下列设置:工程->设置-> C/C++ 选择 precompiled headers 选解决:择第一或第二项:自动选择预补偿页眉,如图:<2>使用Matcom 后,生成Debug 版没问题,而生成Release 时链接出错,nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMT.lib(delete.obj) 解决:解决:将"Project 属性" -> "C/C++" -> "代码生成(codegeneration)" -> "运行时库(run-time library)" 项下修改应用程序的默认标准库版本,我修改成 Debug Multithreads 就可以了,原因是安装Matcom 时库为调试版<3>在其它机器上运行出错解决:解决:将 ago4501.dll v4501v.dll glu32.dll opengl32.dll 附带发布即可 <4>关闭程序后进程没有退出解决:解决:添加语句winaxes(m_hWnd);参考文献1、何东健等.《数字图像处理》.西安电子科技大学出版社.20032、邓科.浅析 VC 与matlab 接口编程(一). VC 知识库,41 期3、邓科.浅析 VC 与 matlab 接口编程(二). VC 知识库,42 期4、Matcom 参考手册Matlab 与 VC 混合编程 2:二、通过 Matlab 引擎与 VC 混合编程--飞狼编程宝典--明明知道选择你是一个错误,却为何那么地坚持这个错误……基于 Matlab 引擎的混合编程方式无法脱离 Matlab 环境,却为何还要使用它?根据本人的实践,对于一般应用,如矩阵运算,图像操作等,使用 Matcom 就已经足够,而且能够脱离 Matlab 那个巨大的环境而独立运行,但是,对于很多好用的 Matlab 工具箱,我们却无法直接在 VC 中调用。
MATLAB和VC混合编程在数控加工路径优化中的应用
合编程开发数控软件周期短,软件运行效率高、易于维护、保密性强。 关键词 :贪心 一 遗传算法 ; 混合编程 ;动态链接库 ;M A T L A B ;V c + +; 路 径优 化 中图分类 号 :T P 3 1 文献标识码 :A 文章编 号 :1 0 0 9 - 0 1 3 4 ( 2 0 1 3 ) o 8 ( 下) -o o 5 1 -0 5
MAT CO M工具 将 m函数 文 件转 化成 相 同功 能 的C + + 文 件并 嵌 入VC + + 。4 ) 使 用MAT L AB 在V C + + 中 的 增 加插 件 , 将MA T L AB 文 件导 入VC + + 环 境 中 。5 ) 使 用 MA T L AB 提 供 的C ++ 接 口函数 库 , 直 接 在VC + +
G e n e t i c Al g o r i t h m,GG A)的 新型 加工 走 刀路 径 优
化 方法 。
MAT L AB混 合起 来 编 程 ,就 可 以高 效 地 编 写一 个
能独 立 于 MAT L A B运 行 环 境 ,且 运 行 效 率 高 的应
用 程 序 。本 文 以VC + + 开 发 环境 为 平 台 ,设 计基 于 DXF 文 件 的 数 控 自动 编 程 软 件 , 并 通 过 VC+ + 和
用MAT L AB功 能 函数 。2 )用MAT L AB编 译 器 将
VC+ + 编 程 环 境 作 为 一 个 可 视 化 编 译 环 境 的 卓 越 应 用 软 件 开 发 工 具 ,虽 然 可 以开 发 从 底 层 系
统 到 高 层 用 户 的 各 种 应 用 软 件 , 但 是 在 工 程 计
务l 訇 秒 化
MA T L A B 和V C 混合编程在数控加工路径优化中的应用
VC++与Matlab混合编程环境下语音增强算法实现
VC++与Matlab混合编程环境下语音增强算法实现摘要:介绍了一种基于matcom方法,在visual c++与matlab混合环境下实现语音增强算法编程的思路。
采用matcom将matlab的 .m文件转化成相同功能的 .cpp文件,并在visual c++环境下将其编译成外部可执行文件直接调用。
该方法能够极大降低c++语言实现语音增强算法编程的难度,同时编写的代码能够独立于matlab开发环境运行。
实验结果表明,基于以上方法实现语音增强算法编程简单易行,在运行速度和运算效率上都有了明显的提高,且消噪效果明显。
关键词:visual c++;matlab;matcom;语音增强中图分类号:tp301.6文献标识码:a文章编号:1672-7800(2012)012-0049-020引言matlab是当今最优秀的科技应用数学软件之一,它具有强大的矩阵运算、数值计算、数据分析处理等功能,使得它在许多科学领域中成为计算机辅助设计及算法研究的基本工具和首选平台。
matlab 采用的是一种脚本语言,也就意味着它是逐行解释执行的,执行效率不是很理想,尤其在进行大规模的数值计算和分析时,matlab有点差强人意,而且matlab还缺乏直观优美的可视化界面。
visual c++是一种面向对象的可视化编程语言,它是一种编译性语言,执行速度非常快,特别是在进行多层嵌套循环运算时,就更能体现其优势,在应用程序开发平台上具有得天独厚的优势。
vc++缺乏丰富的数学函数库函数、各种工程领域工具箱函数等,读取、显示图形等也不方便,这使得vc++在科学计算及工程应用领域的开发比较复杂,代价较高。
语音增强的目的是从带噪声语音信号中提取尽可能纯净的原始语音,提高输入信号的信噪比。
语音增强问题是目前国内外研究的热点问题,其算法的实现及验证过程涉及到计算仿真、绘图及大量的向量、矩阵运算和递归计算,而且数据量较大。
本文介绍了一种基于vc++与matlab混合编程环境下实现语音增强算法的方法,采用matcom实现语音增强算法的编程,然后将matlab的.m文件转化成同等功能的 .cpp文件,并在vc++环境下编译和直接调用。
VC6.0与MATLAB7.X混合编程方法研究
Cls m b r TP3 1 a s Nu e 1
1 引言
MAT AB是 美 国 Mah rs 司研 制开 发 L tWo k 公
用 C++语 言开发 涉及 矩 阵操作 较 多的程 序 , 但 不
费 时费力 、 易 出 错 , 且 运 行 效 率 也 不 一 定 高 。 容 而
TLAB i e o Bu l r f r COM .Th r p r c n e to if r n y S i to u e n o d e p o e o t x fd fe e twa si n r d c d a d c m.
p r d.Th y f r la i g t e c mb n t n p o r m n r d c d. ae e wa s o ee sn h o i a i r g a i i to u e o s Ke o d M yw rs A TLA B ,VC++ ,c mb n t n p o r m mi g o ia i r g a o n
提供 VC下 的编程 插 件 。针 对这 种情 况 , 具体讨 论
可视化编程环境 。其功能强大, 既适用于与底层交 流信息 , 又有 强大 的可视 化编程 功能 , 执行 速度 快 , 运 行稳定 , 为许 多程 序 员 所 喜爱 。但 是 , 如果 纯 粹
了 V ++60 在 c . 环境下与 M T B. 系列版 A I 7x A
关 键 词 MA AB VC + 混合 编 程 TL + 中图 分 类 号 TP 1 31
Re e r h on t m b na i og a m i o s a c he Co i ton Pr r m ng f r
M A TLA B7. n C ++ 6. Xa d V O
Matlab与Visual C++混合编程学习笔记
Matlab与Visual C++混合编程学习笔记要实现VC++与matlab的无缝混编,必须充分掌握matlab的C/C++数学库函数和图形库函数,而要运用这两类库函数则必须先熟悉matlab的接口类与接口函数的结构及使用规则。
1 Matlab接口类与接口函数的介绍接口类 mwArray(1) 构造函数mwArray()默认构造函数,通过它用户可以创建一个未初始化的mwArray类对象(阵列)。
mwArray(const char *str)通过该函数可以构造一个字符串型的阵列,并通过输入的字符串指针指向的字符串进行初始化,例如:mwArray A(“MATLAB mwArray string”); mwArray(int32 rows, int32 cols, double *real, double *imag = 0) 通过该函数可以创建一个指定行数、列数、以及实部和虚部数据的二维复数阵列,例如:double real[] = {1, 2, 3, 4, 5};double imag[] = {6, 7, 8, 9, 10};mwArray A(1,5,real,imag);mwArray(const mwArray &mtrx)mwArray(const mxArray *mtrx)mwArray(double start, double step, double stop)mwArray(int32 start, int32 step, int32 stop)mwArray(const mwSubArray & a)mwArray(double)mwArray(int)(2) 索引和下标函数operator ()cell ()field ()(3)转换函数operator double() const(4) 内存管理函数类mwArray对运算符new和delete进行了重载。
实现VC++MATLAB混合编程论文
浅谈实现VC++与MATLAB混合编程摘要:本文深入分析了vc++与matlab两种编程语言的特点,充分发挥了两种语言的优点,实现混合编程。
并在弹箭弹道参数相对于气动参数的灵敏度分析过程中进行了验证,直观方便地利用灵敏度函数对气动参数加以辨识,得出弹道参数模型,并进行弹道计算。
关键词:编程混合编程灵敏度matlab是一种以矩阵为基本运算单位的高效数值计算软件,带有功能强大的数学函数库,并开发有多种学科领域的工具箱函数库,广泛地应用于科学研究与工程计算。
vc++用于面向对象的可视化编程,可以完成从底层软件直到面向用户软件等各种应用程序的开发。
利用它提供的各种实用工具,开发者可以轻松开发出高效强大的windows应用程序。
把matlab在数值计算、算法设计以及数据可视化等领域的优势与vc++应用系统集成,不仅可以完全满足系统在数据运算与表现方面的需求,而且还可提高系统处理的效率和稳定性,同时也减少了开发人员实现算法的困难,缩短了软件开发的周期,提高了软件质量,在实践中具有很高的使用价值。
1 mlrs/m26多管火箭弹弹道所谓弹道是指弹箭在空中飞行时,其质心所经过的路线,它是一条空间曲线。
从弹箭侧面看,弹道的投影如图1所示:利用现代控制理论、弹箭飞行动力学、数值分析、随机过程、弹箭设计理论以及计算机仿真等理论,分析弹箭弹道参数对气动系统灵敏度函数问题,以matlab和vc为操作平台,制作用户操作界面。
2 vc++与matlab混合编程的优点vc++用于面向对象的可视化编程,开发者可以轻松开发出高效强大的windows应用程序,利用它提供的各种实用工具,可以完成从底层软件直到面向用户软件等各种应用程序的开发。
但在实际工程开发中,与matlab相比:①matlab比vc++在数值处理分析和算法工具等方面更优异。
②matlab比vc++在准确方便地绘制数据图形方面更完善。
matlab具有强大的数值计算功能,matlab中提供了大量用c\c++重新编写的matlab库函数,matlab自身存在一些缺点限制了它在更多方面的应用,主要包括初等数学函数、线形代数函数、矩阵操作函数、数值计算函数、特殊数学函数、插值函数等,这些缺点主要包括:①容易被直接读取,所以难以保护劳动者的成果,matlab编写的m文件大多是文本文件。
matlab与C混合编程步骤详解
1MATLAB Compiler 是MATLAB自带的一个编译器,它能将m文件转化成 C、C++或p等各种类型的源代码,并根据需要生成可执行文件、lib文件(库文件)、dll文件或S函数文件等。
Matlab所使用的编译器包括了MATLAB 的C\C++数学库函数以及图形库。
必须保证编译器的正确配置,因为编译器使用了C\C++库函数,所以在使用前需要使用mex -setup 和 mbuild -setup两个命令对编译器进行配置。
步骤如下:1. 设置Matlab的编译器,使用外部的VC或者gcc等编译器。
2. 编译m文件成dll3. 设置VC等的继承环境,设置C需要用到的静态库和动态库4. 编写C调用dll1.1设置MATLAB编译器首先要安装Matlab 编译器,一般来说,在安装了Matlab后编译器就己经安装了,所在就只需要对Matlab编译器进行设置。
1.1.1 编译环境设置首先设置系统的环境变量,点击“我的电脑”属性-→系统特性--→高级-→环境变量-→添加系统变量Matlab值为Matlab的安装路径:G:\matlab7.0\bin\win32,重启电脑即可。
1.1.2 MATLAB7.0 编译器设置(a) 为编译后产生的MEX文件进行预配置在Matlab 的命令窗口(Command Window) 键入“mex -setup ”命令后,按回车键,安装Matlab 编译器;(b) 为产生独立外部应用程序进行预配置对Matlab编译器mbuild应用程序进行设置,运行Matlab ,在Matlab 的命令窗口(Command Window) 键入“mbuild -setup ”命令后,按回车键,安装Matlab 编译器;1.2 将MATLAB函数转成DLL函数在Matlab的Command Window /下输入命令:命令 1 :mcc -W lib:dlltest -T link:lib huatu_test.m或命令 2 :mcc -W cpplib: dlltest -T link:lib huatu_test.m命令1生成的是C,命令2生产的是C++。
浅析VC与Matlab联合编程(二)
::首页>> 文档中心>> 在线杂志>> 其它[ 在线杂志第42期][ 原创文档本文适合中级读者已阅读231次]浅析VC与Matlab联合编程(二)作者:邓科下载源代码在“浅析VC与Matlab联合编程(一)”中简单介绍了VC与matcom的接口编程,实现本功能,要真正熟练使用接口编程,还要对函数调用有一定了解。
本文通过一个实例,较详细的介编译后的函数。
首先新建一个函数huatu.m,该函数的功能是:接受用户输入的左端点值和右端点值两个输图形。
函数还将生成两个随机数,作为一个点的坐标在图中打印出来(绿点),用来说明如何在步骤如下:1.建立一个名为Example2基于对话框的MFC(exe)工程。
2.在matcom中新建一个名为huatu.m文件,如图1;图13.在matcom命令窗口中运行该函数,如图2;图24.将生成的huatu.h、huatu.cpp(默认位置为安装目录:\matcom45\samples\Debug)和ma 为安装目录:\matcom45\lib)四个文件拷贝到建立的工程Example2目录下。
5.将第四步拷贝的四个文件加入到VC工程中:工程->添加工程->文件,选择刚才拷贝到Exa 成后如图3;图36.在Example2dlg.cpp中添加头文件:(如图4所示)#include "matlib.h"#include "huatu.h"图47.为工程建立界面:添加一个Button按扭控件;添加四个Edit box控件,用于显示数据;添加显示文字,一个显示图形,将显示图形的Static text的ID设置为ID_PIC。
其他所有控件属性保适当调整显示图形Static text控件的边缘)。
如图5所示图58.按Ctrl+W为控件添加变量。
如图6所示图69.为Button1按钮添加响应代码。
如图7所示图710.运行程序,输入左端点和右端点,点击”画图”按钮,结果如图8所示。
Matlab与VC混合编程在图像处理中的应用
技 术 开 发 的矩 阵运 算 动 态 链 接 库 。用 Macm 实 现 to
V C与 Mal t b连接有 两 种方 式 : 用 Mar < I > 阵 a 调 tx LB 矩 i 数 学 库 , v 5 1.b库 文 件 ; 用 Mac m 的 V sa 即 40 vi 1 利 to iul
编程, 并用 于图像 处理 。
关键词 : d b V Ma a ; C;引擎 ; 图像 处理
引 言
Ma a t b是 Mah ok 公 司推 出 的数 学软 件 。 将 l tw rs 它 数 值分 析 、 阵计 算 、 号 处理 和 图形 显 示结 合在 一 矩 信
Macm 中包 含 了矩 阵数学 库。 tx LB C + to Mar < I > + 。Ma i . tx L B C + 学 库 是 Mah o l 司 利 用 Ma o i r< I > + 数 tT os公 t m c
具箱 中的 函数 。
现 代  ̄E gls : 闭 Malb引擎 ; nc e关 o t a 计 ● E g eA ry 从 Ma a nie 中 获 得 一 个 nG tr : a tbE g l n 算 Ma a t b矩 阵 , l 用于数 据交换 ; 机
 ̄E g p n 开启 Malb引擎 ; nO e : t a ●E g v ltn :在 Ma a nE a r g Si l f b引 擎 中执 行 输 入 的
^
Ma a 令 ; t b命 l
② 使 用 M t m 与 M tb连 接 。 M t m 是 ao c aa l ao c
Mah ok 公 司 推 出的 第 一个 由 Ma a tw rs t b到 C +的编 l +
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC++与MATLAB混合编程及其应用
摘要本文详述了在VC++6.0编译环境下如何利用Matlab来实现应用系统的设计和分析,介绍了通过Matlab与VC应用程序连接的常用方法,分析了VC与Matlab的混合编程的步骤,最后通过一个具体实例的实现过程对上述方法进行了应用性介绍。
关键词 VC++;Matlab;混合编程
Matlab 是由Math Works 公司于1984 年推出的数值计算及图形处理软件,可以实现数值分析、优化、统计、偏微分方程数值解、自动控制、信号处理、图像处理等若干领域的计算和图形显示功能。
其中,控制系统工具箱的集成为设计和分析各种复杂的控制系统提供了有效的方法和途径。
但是,由于Matlab开发平台的局限性,在其上面开发的程序不能脱离Matlab运行环境,因而在处理一些实际应用问题时显得灵活性不足,而VC++则在一定程度上能够弥补这一漏洞,因此,现将二者结合共用,各献其长,可以为科研工作和工程开发提供了更为强大的技术支持。
1、Matlab与VC混合编程的实现方法
Matlab作为控制系统设计的一种通用工具,它可以和VC方便的进行连接。
一般而言,Matlab与VC混合编程的实现方法主要有以下三种方法:
(1)通过引擎(Engine),采用客户机服务器的计算模式,通过Window的ActiveX通道和Matlab进行连接。
具体应用时,往往在VC中设计程序框架,以编译的程序作为前端客户机;通过调用Matlab引擎在后台实现与服务器的连接,实现动态通信。
(2)应用Matlab数学函数库,Matlab中包含了内容丰富的函数库,而且还提供了与VC的数学函数接口,用户可以方便的在VC的IDE(集成开发环境)中调用。
(3)通过DLL实现VC与Matlab的混合编程。
DLL是一个可执行的二进制文件。
把很多通用的功能放在DLL中,可以供多个应用程序调用,这样可以很好的减少外部存储空间的占有量,并实现代码的共享[2]。
在上述三种方法中,第一种方法对调用Matlab的工具箱很实用,所有在进行控制系统的设计和分析时,一般都是通过调用Matlab引擎(Engine)来实现的。
本文主要介绍采用通过引擎(Engine)来实现VC与Matlab的混合编程。
2、MATLAB引擎简介
Matlab引擎是Matlab提供的一系列程序的结合,它允许用户在自己的应用程序中对Matlab进行调用,将Matlab作为一个操作引擎使用,使其在后台运行。
一般Matlab 引擎采用客户机/ 服务器(Client/ Sever) 计算方式,就是一种把应用处理负载分布到客户机和服务器上的一种计算模式,客户机和服务器既可以是存在于同一台计算机,也可以通过网络来实现信息共享。
一般情况下,客户机是运行前端软件的PC机,并且知道如何与服务器通信,服务器与此相对应,是接收请求信息,并采取相应行的机器。
由于客户机和服务器共同承担处理负载,使系统总体性能大为提高。
在实际应用过程中,把VC的C语言或C + + 语言的程序作为前端客户机程序,它从Matlab 引擎接收数据信息,并与引擎传递命令的数据信息。
表1是几种常用的Matlab引擎调用函数。
表1 Matlab引擎常用调用函数
通过Matlab引擎用户可以完成以下任务:首先,可以将Matlab作为一个功能强大的和可编程的数学函数库,调用Matlab中的大量的数学计算函数,完成复杂的计算任务;其次,可以为一个特定的任务构建一个完整的系统,前台的用户界面用高级语言编写,后台的计算任务由Matlab引擎来完成;最后,用户不但可以在本地计算机上调用Matlab引擎,而且还可以通过网络调用其它计算机上的Matlab引擎,这样可以很好的实现资源的共享和作业的分工合作。
3、Matlab引擎实现VC和Matlab混合编程的步骤
要想在VC集成环境下利用Matlab引擎实现VC和Matlab的混合编程,一般需要经过以下几个必要的步骤:
(1)Visual C++6.0 编译环境的设置:通过菜单Tools/ Options,打开Visual C++6.0设置属性页,进入 Directorie页面,在 Show Directories for下拉列表中选择Include Files,添加路径:D:\Matlab6p5\extern\include(在Matlab的安装路径下);再选择下拉列表中的Library Files,添加路径:D:\Matlab6p5\extern\ lib\win32\Microsoft\msvc60(在Matlab的安装路径下)。
编译环境只需设置一次。
(2)添加库文件: 通过菜单 Projects|settings,进入 Link 页面,在 Object/Library Modules 框中,添加库文件名:libmx.lib 、libmat.lib 、libeng.lib。
每个新的工程文件都要单独添加库文件。
(3)在使用 engine 函数的程序头文件中包含如下两个头文件:
根据上面的方法,下面通过一个具体的实力来说明如何实现VC与Matlab混合编程、它们之间的数据通信以及VC环境下对Matlab命令的调用。
首先,利用VC++6.0的MFC建立一个单文档结构的应用程序,加入一个菜单资源,为其映射相应的功能函数;
其次,根据Matlab引擎实现VC和Matlab的混合编程步骤(见第三部分)为程序设置相应的编译环境并添加连接库函数;
然后,调用Matlab的内建函数和命令,主要编写程序代码如下:
最后,添加头文件:
图1 调用Matlab引擎输出结果
上面例子是VC和Matlab的混合编程的一个简单应用,在实际的数值计算,控制系统开发等工程应用中,可以很好的利用VC和Matlab的混合编程技术,从而简化应用程序的开发工作量。
5、结论
Matlab提供了强大的数学计算功能和丰富的工具箱, 使用VC和Matlab的混合编程, 可以发挥各自特长, 缩短工程应用软件的开发周期, 同时也提高了程序的运行效率。
其中,基于客户机/服务器计算模式的Matlab引擎是实现VC与Matlab 混合编程的一种常用方法。
通过对引擎调用与数据组织方式的面向对象的设计,将数据组织透明化,极大地简化了程序设计过程, 封装了对Matlab 引擎的访问和与Matlab 服务器进行数据交换的细节,为用户提供了一个友好的编程接口环境。