时间:2024-12-11 16:48 / 来源:未知
本文基于Matlab 6.5和VC6.0 开发环境?中国期货FXCG黄金交易Matlab是暂时操纵最为遍及的数学软件,具有壮健的数值盘算、数据认识打点、编制 认识、图形显示以至符号运算等性能。行使这一完善的数学平台,用户能够火速告终相称 庞杂的性能,极大地抬高工程认识盘算的效能。但与其他高级法式比拟,Matlab 法式 是一种讲明践诺法式,不消编译等预打点,法式运转速率较慢。
C/C++措辞是目前最为时髦的高级法式安排措辞之一。它可对操作编制和操纵法式以 及硬件举办直接操作,用C/C++措辞显明优于其它讲明型高级措辞,极少大型操纵软件如 Matlab 便是用C 措辞开荒的。
正在工程践诺中,用户时常遭遇Matlab 与C/C++搀和编程的题目。本文基于Matlab 6.5和VC6.0 开荒情况,正在Windows 平台下就它们之间的搀和编程题目举办深切研讨并举例证实。
Matlab 移用C/C++的形式紧要有两种:行使MEX 技能和移用C/C++动态联贯库。
正在Matlab 与C/C++搀和编程之前,务必先对Matlab 的编译操纵法式mex 和编译器mbuild举办精确的修设:
MEX 是Matlab Executable 的缩写,它是一种“可正在Matlab 中移用的C(或Fortran)语 言衍生法式”。MEX 文献的行使极为便当,其移用形式与Matlab 的内修函数完整类似,只 需正在Matlab 号召提示符下键入MEX 文献名即可。
一个C/C++的MEX源法式普通网罗4个构成一面,此中前3个是务必蕴涵的实质,第4个则凭据所告终的性能矫健选用
Matlab 供给对动态联贯库DLL 文献的接口。行使该接口,可正在Matlab 中移用动态连 接库导出的函数。Matlab 对DLL 的接口赞成各样措辞编写的DLL 文献。正在移用DLL 文献之 前,须要预备函数界说的头文献。对付C/C++措辞开荒的DLL 文献,可行使源法式中相应的 头文献;而对付其他措辞开荒的DLL,则要手工预备等效的C 措辞函数界说头文献。
(1)掀开动态联贯库文献;(2)为移用函数预备数据;(3)移用动态联贯库文献中导出的 函数;(4)合上动态联贯库文献。
移用DLL 动态联贯库的本领,为Matlab 重用工程践诺中积聚的洪量适用C/C++代码供给了一种简便便当的本领。与移用MEX 文献比拟,该本领特别方便适用。
正在工程践诺中,C/C++移用Matlab 的本领紧要有移用Matlab 盘算引擎、蕴涵m 文献转 换的C/C++文献,以及移用m 文献天生的DLL 文献。
Matlab 的引擎库为用户供给了极少接口函数,行使这些接口函数,用户正在己方的法式 中以盘算引擎形式移用Matlab 文献。该本领采用客户机/效劳器的形式,行使Matlab 引擎 将Matlab 和C/C++干系起来。正在现实操纵中,C/C++法式为客户机,Matlab 动作当地效劳器。
C/C++法式向Matlab 盘算引擎传达号召和数据音讯,并从Matlab 盘算引擎罗致数据音讯。
下面以C 措辞编写的、移用Matlab 引擎盘算方程x3 ?2x+5=0根的源法式example2.c 为 例,证实C/C++移用Matlab 盘算引擎编程的道理和步调:
行使盘算引擎移用Matlab的特质是:俭朴洪量的编制资源,操纵法式完全职能较好,但 不行离开Matlab的情况运转,且运转速率较慢,但正在极少尤其的操纵(比如须要举办三维 图形显示)时可推敲行使。
Matlab自带的C++Complier--mcc,能将m文献转换为C/C++代码。于是,它为C/C++法式移用m文献供给了另一种便捷的本领。下面举例证实相应步调:
b.正在VC 中新修一个基于对话框的MFC 操纵法式Test2,增加一个按钮,并增加按钮反应函数,函数实质睹f 步。将上面天生的两个文献拷贝到VC 工程的Test2 目次下。
d.采取属性外C/C++选项,下拉菜单选General,正在预打点法式界说中保存原先有的内 容,并增加MSVC,IBMPC,MSWIND,并用逗号离隔。采取下拉菜单的Precompiled Headers 选 项,正在“自愿行使预积蓄页眉”中增加stdafx.h,然后确定。
Matlab的C++ Complier不但可能将Matlab的m文献转换为C/C++的源代码,还能出现完整 离开Matlab运转情况的独立可践诺DLL法式。从而能够正在C/C++法式中,通过移用DLL告终对 Matlab代码的移用。下面通过一个粗略的例子证实C/C++移用m文献天生的DLL:
b.正在VC中新修一个基于对线,然后增加一个按钮及按钮反应函数,函数实质睹d步,再将天生的3个文献拷贝到Test2工程目次下。
d.正在按钮函数文献增加如下的头文献:#include “example4 .h” ,函数反应代码为:
行使mcc 编译器天生的DLL 动态联贯库文献,只需正在C/C++编译情况中将其蕴涵进来, 移用导出函数即可告终原m 文献的性能,极大地便当了用户的代码安排。
本文从Matlab 移用C/C++代码和C/C+移用m 文献两方面,具体地研讨了Matlab 与C/C++ 搀和编程技能。对付Matlab 移用C/C++代码,给出了常用的MEX 技能和移用C/C++动态联贯 库的本领,并对它们举办对比。针对用户正在现实中时常遭遇的C/C++移用Matlab 题目,通过研讨给出了常用的三种本领及其特质:行使Matlab 盘算引擎的本领,搀和编程后的可执 行法式离开不了Matlab 的运转情况,运转速率很慢;行使mcc 编译器将m 文献转化为C/C++ 文献的本领,固然能独立于Matlab 运转情况,可正在C/C++情况中蕴涵天生的文献非凡繁琐; 可是m 文献天生的DLL 为用户供给了一种简便便当的C/C++移用Matlab 代码的本领。除 Matlab 自带的mcc 外,Matcom 也能将M 文献编译为C/C++文献和DLL 文献,但搀和编程 道理一律,正在此省略。