基于MATCOM的VC++与MATLAB混合编程.doc

上传人:asd****56 文档编号:79333565 上传时间:2023-03-21 格式:DOC 页数:4 大小:40KB
返回 下载 相关 举报
基于MATCOM的VC++与MATLAB混合编程.doc_第1页
第1页 / 共4页
基于MATCOM的VC++与MATLAB混合编程.doc_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《基于MATCOM的VC++与MATLAB混合编程.doc》由会员分享,可在线阅读,更多相关《基于MATCOM的VC++与MATLAB混合编程.doc(4页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、基于MATCOM的VC+与MATLAB的混合编程(都是单向的)1. 引言VC+是Windows平台下流行的可视化应用程序开发环境之一,它为软件开发人员提供了完整的编辑、编译和调试工具以及建立在Win32API基础上的MFC类库,可以有效缩短Windows应用程序的开发周期。用VC+开发出的程序具有容易维护、界面友好、执行速度快等优点。用VC+开发工程技术方面的程序时,当涉及矩阵运算或数据可视化,工程技术人员不得不编写大量繁琐的代码。因此,Matlab与VC+混合编程可以吧Matlab在数值计算、算法设计以及数据可视化等领域的优势与VC+有机结合在一起,可以提高程序处理的效率和稳定性,同时也大大

2、减少编写算法代码的工作量,提高工作效率。2. 常用方法(1) Matlab CompilerMatlab Compiler是Matlab自带的编译器,可以通过设置mcc命令的选项,将m文件编译成动态链接库文件、C/C+文件、独立可执行应用程序等。Matlab Compiler将m文件转化成独立应用程序过程中的C/C+文件,原则上可以被其他C/C+代码调用。但是这种方法不能处理嵌套调用其他m文件的m文件,不支持Matlab对象,不能编译Matlab的一些内联函数,并且转换代码的可读性较差。(2)Matlab CombuilderCOM是Component Object Module的简称,是一种

3、通用对象接口,任何语言只要按照这种接口标准,就可以实现调用。Matlab的Combuilder把Matlab编写的程序做成COM组建,供其他语言调用。该方法实现简单,通用性强,而且几乎可以使用Matlab的任何函数,因此在程序较大、调用工具箱函数或调用函数较多时推荐使用。(3)通过Matlab Engine方式Matlab Engine采用客户机/服务器模式,C/C+程序作为前台客户机,Matlab作为计算引擎,利用Engine实现Matlab的强大功能,引擎程序和C+程序各作为一个进程单独运行,通过进程间的通信机制进行交互。这种方法,需要在机器上安装Matlab软件,而且程序执行效率低。 (

4、4)直接调用Matlab C/C+ Math Library 数学函数库Matlab中提供了可以供C/C+语言调用的C/C+数学函数库,在VC+中可以直接使用这些函数。但使用这种方法调用Matlab的工具箱函数有很大困难,适合对C/C+语言比较熟悉的用户使用,并且不支持Matlab中丰富的图形句柄处理函数。(5)Matlab中调用C程序-MEX文件 一般形式的C源代码程序并不能直接被编译成MEX文件,只有按照约定格式编写的C源代码文件才能转化为有效的MEX文件。(参见北航出版的精通Matlab与CC+混合程序设计)(6)使用Matcom工具Matcom是MatTools公司开发的一个基于C+矩

5、阵函数库Matrix的转换Matlab的m文件到CPP文件的程序,它可将Matlab的源代码编译成同等功能的C+源代码,既保持了Matlab的优良算法,又保持了C+的执行效率高的优势。Matcom软件平台本身的功能相当强大,提供了近千个Matlab的基本功能函数,通过必要的设置,就可以直接实现与C+的混合编程,而不必再依赖Matlab。同时,Matcom还能够将Matlab函数或者编写的Matlab程序转化为C+形式的DLL,它与VC+有良好的接口,只要包含必要的库文件和头文件即可实现对Matlab函数的调用,而无需运行Matlab。Matcom转换过程简单,不仅可以转换独立的脚本文件,也可以

6、转换嵌套脚本文件,可以方便的生成动态链接库文件和可执行文件,它还支持一定的图形显示,生成代码的可读性好。Matcom可以通过插件的形式有机的嵌入VC+开发环境(即Visual Matcom),实现可视化编程,利用Visual Matcom插入m文件到VC+工程中可自动实现所需库文件、头文件、CPP文件的连接及编译环境的设置,如果出现编译错误,直接修改m文件即可。利用Matcom可以在VC+中直接书写类Matlab和Matcom语句实现Matlab与C的混合编程。此方法的缺陷是不能涉及Matlab的内部类,对于Matlab中struct类不支持将Matcom4.5中的ago4501.dll和v4

7、501v.dll放在工程目录下,即可脱离Matcom4.5实现运算和绘图。参见:MathTools Ltd. MIDEVA MATCOM&Visual MATCOM users guide V4.5 release MathTools Ltd.Using Visual MatixLIB in MFC application EB.MathTools Ltd,1999 MathTools Ltd.Reference Guide EB.The MathWorks,Ltd,19993. Visual Matcom编程环境的安装及设置以Matcom4.5、中文版VC+6.0和Windows XP 操作

8、系统为例。(1)在VC+中嵌入Matcom工具条 安装Matcom4.5(参见Matcom安装指南)。 拷贝binusertype.dat文件到CommonMSDev98Bin目录下,、分别指Matcom4.5与VC+6.0的安装路径。 运行Visual C+6.0,从菜单条中选择“工具/定制/附加项和宏定义”,选择“浏览”,改变文件类型为Add-ins(.dll),选定binmvcide.dll文件,确信Visual Matcom Add-in被选定,点击“关闭”。 一个包含四个按钮的新工具栏出现在Visual C+界面上,表明Visual Matcom安装成功。 在Visual C+环境中

9、将M文件转化为CPP文件,单击Visual Matcom工具条中的.M+(Add m-files to current project)按钮,在弹出的对话框中选择要转换的M文件,则该M文件就会被添加到当前的工程中,同时会生成由该M文件转换得到的同等功能的CPP文件。这样便可以像使用工程中的其他CPP文件一样,使用新的CPP文件中定义的函数。M文件被调入的同时v4501v.lib和matlib.h这两个文件也被加入到工程文件中,他们是MathTools公司提供的库文件,其中定义了Matcom中所有的常量、变量以及函数。在编程的时候,还必须使用initM(MATCOM_VERSION)语句来初始化

10、库文件,即允许使用任何库中的函数,并使用exitM来结束该请求。(2) VC+编译环境设置 在VC+工程设置中,选择Project(工程)Setting(设置)Link(连接)分类Input(输入),将编程所需要的库v4501v.lib写入ObjectLibrary modules(对象库模块),并在Additional Library Path(附加库路径)中添加库的路径lib。 选择Project(工程)Setting(设置)CC+,在Preprocessor(预处理器)选项下为头文件matlib.h添加目录,在Additional Library Path中添加路径lib。4. 应用开发

11、实例(1)在VC+中调用*.m函数进行图形绘制 (此函数可以没有参数)A在VC环境中建立一个基于对话框的工程TestMatcom,并在对话框中添加一个按钮控件IDC_TEST,双击该控件,添加其消息响应函数voidCTestMatcomDlg:OnTest()。B装载*.m文件。点击VC工具栏中.m+图标,选择wire.m,这是Matcom45自带的一个绘图文件。添加*.m文件以后,即完成了*.m到*.Cpp文件的转换。C在VC开发环境的FileView标签中可以看到m-files,C+ files created from m-files,Matrix和External Dependenci

12、es等文件,此时添加void CTest MatcomDlg:OnTest()函数:void CTestMatcomDlg:OnTest()initM(MATCOM_VERSION);/初始化Matcom进程wires();/执行wires函数exitM();/退出进程return;D在TestMatcomDlg.h中添加头文件#include “matlib.h”和#includes “wires.h”,编译运行工程,可得到运行结果。(2)利用Mm类直接在对话框中作图(绘制八叶玫瑰线与抛物面) Mm类函数的用法可参见Matcom自带的Reference Guide。A选择菜单toolsopt

13、ions,选择directories,选择“include files”,加入Matcom中“matlib.h”的路径。选择菜单projectadd to project files,将v4501.lib加入VC工程中。并在*Dlg.h中添加#include “matlib.h”。触发“2D-PLOT”按钮的函数如下:void CPDlg:OnButton1() / TODO: Add your control notification handler code hereinitM(MATCOM_VERSION);Mm t;t = colon(0.0,0.01,2.0*pi);CWnd * p

14、1 = NULL;p1 = (CWnd *)GetDlgItem(IDC_PIC);Mm plothandle = winaxes(p1-m_hWnd);Mm pos = (BR(20),20,200,100);set(plothandle,TM(RealPosition),pos);polar(CL(t),abs(times(sin(2.0*t),cos(2.0*t);exitM();触发“3D-PLOT”按钮的函数如下:void CPDlg:OnButton2() / TODO: Add your control notification handler code hereinitM(MATCOM_VERSION);dMm(y);dMm(z);dMm(x1);dMm(y1);clf(1);y=colon(8.0,-0.5,-8.0);meshgrid(y,y,i_o,x1,y1);z = power(x1,2.0)+power(y1,2.0);CWnd * p1=NULL;p1=(CWnd *)GetDlgItem(IDC_PIC);Mm plothandle = winaxes(p1-m_hWnd);Mm pos = (BR(20),20,100,50);set(plothandle,TM(RealPosition),pos);mesh(CL(z);exitM();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com