Matlab程序在VC中的调用摘要:利用vc与matlab接口技术,用VC 调用Matlab 编译的DLL 文件进行复杂数据处理不仅简洁通用,更具有很强的实用性和可扩展性,在科学计算与工程运用领域具有广泛的推广应用价值。
关键词:MATLAB ;VC;DLL ;接口
1. VC与MATLAB简介
VC 是大家都非常熟悉的一个软件,它是MicroSoft公司开发的在Windows 环境下主要环境之一,用其中的MFC 可以快速方便地编写出各种友好的用户界面,且用VC ++ 开发的系统具有容易维护升级、界面友好,代码效率高、执行速度快等一系列优点,因此已成为目前应用中的主流之一。
①、MATLAB是Mathworks 公司开发出的一款著名软件,如今已成为世界上使用最广泛的数学软件,它具有强大的数值计算、数据处理、图象显示、符号运算、系统分析、模拟仿真功能,由于受到各个领域专家学者的青睐,在他们的共同努力下,经过多年的发展,如今的Matlab 不仅拥有功能完善的内部函数库,更有专用于各领域的强大包,在这个平台上只需寥寥数语便可完成在其它环境中复杂度不可想象的功能;另外,开放性也是Matlab 一个最重要、最受欢迎的特点,除内部函数外,所有Matlab 工具包中主包文件和各包文件都是可读可改的源文件,用户可通过对源文件的修改来形成新的包,
甚至亦可完全由自己编写源文件来构筑自己研究领域的专用包。
在欧美发达国家中,Matlab 已经成为应用线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学;成为攻读学位的大学生、硕士生、博士生必须掌握的基本技能;在设计研究单位和工业部门,Matlab 也被广泛地用于研究和解决各种具体工程问题。
Matlab在中国得到充分的重视,在各科研机构和高校中得到大量的使用。
②、 2 利用VC 与MATLAB接口实现matlab程序在VC中的调用
③、(1) 在Matlab 环境中编写. m 文件。
function y =Myfunc (x1 ,x2 ,x3) %x1 用来选择不同的数据处理函数,x2 ,x3 是待处理的数据if x1 = = 1
p = polyfit (x2 ,x3 ,1) ;
a = polyval (p ,x2) ;
plot (x2 ,x3 ,’+ ’,x2 ,a) ;
print (gcf ,’- djpeg’,’杨氏模量. bmp’)
y = (a (8) - a (1) )P(x2 (8) - x2 (1) ) ;
end
(2) 设置Matlab 的编译环境。
在Matlab 环境中运行mex2setup ,按屏幕提示要求选择编译器类型位置等有关信息;然后在Matlab 环境中运行mbuild2setup ,设置方法同上。
(3) 用mcc 将Myfunc. m转换为DLL 文件。
在Matlab 中运行:mcc 2B sgl 2t 2W libhg : dllDB 2Tlink :lib Myfunc. m 编译完成后将生成一批文件,提取其中的三个: dllDB. h、dllDB. lib、dllDB. dll 它们将被添加到VC 中去。
(4) 在VC 中调用DLL 文件进行编译。
首先对VC 的编译环境进行以下设置:
a. 选VC 编译器主菜单下的“”→“选择”,在跳出的对话框中选“目录”签页,并在“路径”列表框中把Matlab 的包含文件路径: (如: E: \ matlab6p5 \ extern\ include) ,库文件路径(如: E: \ matlab6p5 \ extern \lib) 和工作区所在路径(如: E: \ ketishiyan) 添加到VC的编译路径中去。
b. 把dllDB. h、dllDB. lib、dllDB. dll 三个文件复制到工作区所在路径(如:E: \ ketishiyan) 的目录下。
c. 引入头文件和库文件在需要调用DLL 的. cpp 文件的头部加入一行: #include“dllDB. h”,再选“工程”→“设置”,而后在“连接”签页的“对象/ 库模块”下加入:
E: \ matlab6p5 \ extern \ lib \ win32 \ microsoft \msvc60 \ libmat . lib
E: \ matlab6p5 \ extern \ lib \ win32 \ microsoft \msvc60 \ libmatlb. lib
E: \ matlab6p5 \ extern \ lib \ win32 \ microsoft \msvc60 \ libmmfile. lib
E: \ matlab6p5 \ extern \ lib \ win32 \ microsoft \msvc60 \ libmx. lib
E: \ ketishiyan \ ppp. Lib
d. 在需要使用DLL 的. cpp 文件中加入以下,比如下面的是实现待拟合数据的传送和结果接收的接口:
dllDBInitialize () ;
double slope ;
double a[10 ] = {0. 0} ;
double b[10 ] = {2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11} ;
double b1[1 ] = {0. 0} ;
b1[0 ] = double (dllFunctionSelect1) ;
a[0 ] = m- ax0 ;a [ 1 ] = m- ax1 ;a [ 2 ] = m- ax2 ;a [ 3 ]= m- ax3 ;a[4 ] = m- ax4 ;
a[5 ] = m- ax5 ;a [ 6 ] = m- ax6 ;a [ 7 ] = m- ax7 ;a [ 8 ]= m- ax8 ;a[9 ] = m- ax9 ;
mxArray 3 A = mclGetUninitializedArray() ;
mxArray 3 B1 = mclGetUninitializedArray() ;
mxArray 3 B = mclGetUninitializedArray() ;
mxArray 3 C = mclGetUninitializedArray() ;
mlfAssign(&A ,mlfDoubleMatrix(1 ,10 ,a ,NULL) ) ;
mlfAssign(&B ,mlfDoubleMatrix(1 ,10 ,b ,NULL) ) ;
3结论
用VC 调用Matlab 编译的DLL 文件进行复杂数据处理。
实践证明,该模式不仅简洁通用,更具有很强的实用性和可扩展性,在科学计算与工程运用领域具有广泛的推广应用价值。
参考文献:
1飞思科技产品研发中心. Visual C 灵感.
2郝红伟. Matlab 6 实例.
3刘志俭,等. Matlab 应用接口用户指南.
4臧桂鹏,等. Visual C ++中文版新概念百例.
5储开颜,严利民,王朔中. VC 与MATLAB 的接口及其实现。