博文
Matlab Add-in 与VC++ 的混合编程技术(2007-08-08 13:50:00)
摘要:1 引言 Matlab 是使用广泛的数学软件是一个完整的数学平台Matlab 在图象处理方面有着明显的优势 具有强大的矩阵运算功能在进行一些图象变换时避免繁琐的计算 有专用图形显示函数消除了显示界面设计的瓶颈 有丰富强大工具箱函数支持对图象的分析和理解透彻但Matlab 强大的功能不能脱离它的环境在Matlab中使用行解释方式执行代码限制了代码执行速度开发一个Matlab 与其他高级语言的接口就可以把Matlab 的强大功能融入各种应用程序中通过高级语言编译器编译为二进制代码从而大大提高执行速度 Visual C++可以开发从底层系统级到高层用户级的各种软件但VC++在图象处理等工程计算方面和图形显示方面与Matlab 相比显得复杂而麻烦将Matlab 与Visual C++结合编程将改善工程应用如图象处理应用程序的编写及开发其混合编程方式分为5 种 Matlab 引擎方式采用客户机/ 服务器的计算方式Matlab 作为ActiveX 自动化服务器VC++的程序作为前端客户机利用Mideva Mideva 是Mathtools 公司推出的一种Matlab 集成编译开发平台可将M 文件转换为C/C++源码然后添加进MSVC 工程中 VC++ 程序中按照Matcom 语法直接书写Malab C/C++数学函数语句用Matlab 的Mcc 将M 文件翻译成CPP 代码然后在C/C++编译器中调用也可用Mcc 将M 文件编译为独立可执行程序Stand-alone Matlab Add-in 添加式编程方法各有利弊方法要求 后台运行Matlab 程序运行速度慢方法对于部分语句以及Struct 的支持有缺陷方法类似于SDK 开发局限性比较大不符合现代软件设计的规范方法纯手工操作本身也不支持部分图形语句对类的支持不够方法最简便易学但要求Matlab V6.0 以上版本同时要求有集成编译环境如Microsoft Vis......
基于VC++与Matlab混合编程的图像处理(2007-08-05 10:51:00)
摘要:
摘要:本文主要讨论了VC++与Matlab混合编程的两种常规方式,给出了利用Matlab数学函数库混合编程的实现方法,指出了常规方式存在不足的同时,提出了另外两种方法,实现了利用Matlab数学函数库和编译器结合VC++混合编程的新方法,充分发挥了VC++有效运算速率与Matlab强大矩阵运算的优点。实验结果说明本文所提方案可行,适用于图像处理。
关键词:Matlab; VC++; 混合编程; 数学函数库; 编译器
1. 引言
Matlab是Mathworks公司推出的一套工程计算及数值分析软件。由于功能强大、易使用,得到了广泛应用,特别是在图像信号处理,语音信号处理,信号分析等领域充分展示了其强大的矩阵运算功能。虽然Matlab是一个完全独立的编程和数据运算的集成环境,但是对于循环处理、图形界面、算法隐藏及系统集成等方面有所欠缺。VC++是一种面向对象的可视化编程语言,代码效率高,便于用户进行交互处理,但利用其基本数学函数库开发子程序与数值算法时,往往比较繁琐,且需反复调试以确保其准确性。VC++与Matlab混合编程,可有效地发挥各自优势,为科学研究和工程开发提供强大的技术支持。本文所有讨论均基于Windows操作平台下的MSVC++6.0编译环境和Matlab6.5环境。
2. 两种常规混合编程方式
传统的VC++调用Matlab的方法有:利用Matlab引擎、利用Matlab编译器、利用Matcom软件编译、调用Matlab数学函数库、及调用Matcom数学函数库。这其中利用Matlab引擎不能脱离Matlab环境,且运行程序较慢;关于Matlab编译器下文将进行详细分析;Matcom软件对Matlab语句支持不够,且其开发公司已被Mathworks收购,自发布4.5版本以后已停止开发;Matlab和Matcom所封装的数学函数库提供了大量的实用函数,可以完全脱离Matlab环境使用,是较为常用的混合编程方式。目前Matlab数学函数库基本上已包含了Matcom数学函数库,这里仅介绍一下利用Matlab数学函数库的混合编程方案,Matcom数学函数库使用类似,有关利用Matcom数学函数库的混合编程详细说明可参阅文献[......
VC++中使用MATLAB的C++数学库和MCC生成的程序 (2006-12-04 18:47:00)
摘要:VC++中使用MATLAB的C++数学库和MCC生成的程序
---- 转载于obase.163.net
0、简介
MATLAB5.3的提供了C/C++数学库,其中的C++数学库功能很强,使用它可以用类似MATLAB的语法编写C++程序,十分方便。虽然速度上仍然比手工C/C++程序慢,但是由此换来的高效的开发效率和可靠性往往是值得的。另外mcc命令可以将M文件转化为C或CPP文件,编译后可以脱离MATLAB运行,它们也是使用的C/C++数学库。
不过,MATLAB的数学库在开发时似乎倾向于编译独立的可执行程序,把VC、BC只是作为一个编译和连接的工具,而没有过多地考虑在VC、BC的集成环境下进行开发。这给我们带来了不便。
很多网友问起如何将MCC生成的C++程序嵌入到VC。最近对这个问题做了一下尝试,在这里做一个总结,请大家回去试试。这里只介绍VC的情况,用BC的网友就自己研究研究吧,估计是类似的。
1、设置项目编译选项
首先建立一个新的项目,或者打开一个已有的项目,然后选择菜单:
Project->Settings->C/C++
Category:Preprocessor
Preprocessor definitions:添加: MSVC,IBMPC,MSWIND
Category: Precompiled Headers
选择: Automatic use of precompiled headersThrough header: stdafx.h
2、调设置项目连接选项
首先要从下面几个函数定义文件(*.def)生成相应的导入库文件(*.lib)
libmmfile.deflibmcc.deflibmatlb.deflibmx.deflibmat.def
它们位于目录c:\matlab\extern\include用下面命令导出库文件:
lib /def:libmmfile.def /out:libmmfile.lib /machine:ix86lib /def:libmcc.def /out:libmcc.lib /machine:ix86lib /def:libmatlb.def /out:libmatlb.lib /machine:ix86lib /def:libmx.def /out:lib......
VC与Matlab的混合编程!(2006-12-04 18:46:00)
摘要:VC与Matlab的混合编程VC与MATLAB混合编程大致可以分为两类:一类需要MATLAB后台支持的混合编程,一类是不需要MATLAB支持而生成独立运行程序的混合编程。1. 需要MATLAB后台支持的混合编程又分为两类:1.1将原有的C程序写成子函数的形式 在子函数中加入固定格式的void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray * prhs[])函数,然后调用MATLAB的mex指令,在mex后输入要编译的c程序名,即可生成在MATLAB环境下直接运行的DLL文件。MATLAB的PDF文档中有详细介绍。1.2通过外部调用的方式实现 首先将M文件的文件名加入到一段c程序中,通过MATLAB中的mex批处理文件将该c文件生成exe文件,然后通过VC的外部调用的函数shellexec()或winexec()实现调用。Mex 批处理的调用格式如下:Mex –f msvc60engmatopts.bat *.c上面的方法可能在编译时出错,具体与MATLAB与VC的环境设置有关,可以自己查一查。^_^2. 利用MIDEVA生成不需要MATLAB后台支持的程序上面实现了MATLAB与VC的混合编程,但仍需要MATLAB运行环境的支持。当然我们更希望实现能够脱离MATLAB运行环境、能够独立运行的程序,下面讲讲。MIDEVA是MATHTOOLS公式推出的MATLAB替代产品,是该公司原MATCOM的扩张。在很多方面MIDEVA比MATLAB强大,它最主要的特点是能够将M文件转化为c语言的代码,并可通过VC或BC编译成可执行代码或dll。当然,之所以推出这个工具也是考虑到M程序执行速度慢的原因,毕竟m程序是解释执行的(为什么?自己查一查吧!^_^)下面是MIDEVA的几种用法:2.1利用MATCOM生成独立执行的exe文件MATLAB环境中有M文件生成的可执行程序不能脱离......
MATLAB外部程序接口实现方法研究(2006-12-04 18:41:00)
摘要:
MATLAB外部程序接口实现方法研究
摘 要:介绍了四种Mat lab外部程序接口方法及其特点,详细说明利用mat lab的com builder开发com组件的方法,以及在vb、.net 、vc和Delphi环境下的调用com组件的方法。
关键词:MATLAB ,COM Builder,COM组件
引言
Mat lab是一种以矩阵和阵列为基本编程单元的科学工程计算语言,它提供了功能齐全的数学函数和各种工具箱,在矩阵运算、数值计算、数值信号处理、系统识别、神经网络、图像语音处理等许多方面得到了广泛的应用。Matlab的计算功能非常强大,即使是复杂的计算程序,开发效率也很高,其主要缺点是执行速度比较慢。在解决实际问题时,往往利用matlab实现矩阵运算等计算过程,其他语言工具再通过与matlab的接口调用计算过程,返回结果。这样,就可以将其他语言灵活高效的编程能力和matlab强大的计算能力有机结合起来。
1 Matlab接口的实现方法介绍
其他语言与Matlab接口的实现有多种方法,下面介绍四种常见的方法。
1.1利用文件传递数据
利用文件传递数据是一种简单、方便的方法。实际使用中,可以使用文本文件、dat文件等文件来传递数据。如果用二进制数据文件传递数据,要注意Matlab与其他语言中二进制数据所占用的字节数以及输入输出所对应得格式要相匹配。
这种方法可以把M文件编译成可独立执行的EXE文件,这个EXE文件通过读入其他语言中用于传递数据的文件的数据,经过计算后,将结果放到文件中,然后其他语言读出文件中的数据。这样,就可以避免在其他语言中进行复杂的数值计算。
1,2利用ActiveX技术
ActiveX是由Microsoft制定的一种独立于编程语言的组件集成协议,它不受开发环境的限制。ActiveX空间能够在不同的环境中使用,包括VC、Delphi、c++ builder等。可以利用自动化服务器和自动化控制器技术,实现matlab和其他语言的接口。
1.3利用Mideva平台
Mideva是Mathtools公司推出的一种matlab编译开发软件平台,是一个强大而完备的M文件解释和开发环境,它通过应用Matcom和实时编译技术而达到......
