



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于MATCOM的VC+与MATLAB的混合编程(都是单向的)1. 引言VC+是Windows平台下流行的可视化应用程序开发环境之一,它为软件开发人员提供了完整的编辑、编译和调试工具以及建立在Win32API基础上的MFC类库,可以有效缩短Windows应用程序的开发周期。用VC+开发出的程序具有容易维护、界面友好、执行速度快等优点。用VC+开发工程技术方面的程序时,当涉及矩阵运算或数据可视化,工程技术人员不得不编写大量繁琐的代码。因此,Matlab与VC+混合编程可以吧Matlab在数值计算、算法设计以及数据可视化等领域的优势与VC+有机结合在一起,可以提高程序处理的效率和稳定性,同时也大大减少编写算法代码的工作量,提高工作效率。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的简称,是一种通用对象接口,任何语言只要按照这种接口标准,就可以实现调用。Matlab的Combuilder把Matlab编写的程序做成COM组建,供其他语言调用。该方法实现简单,通用性强,而且几乎可以使用Matlab的任何函数,因此在程序较大、调用工具箱函数或调用函数较多时推荐使用。(3)通过Matlab Engine方式Matlab Engine采用客户机/服务器模式,C/C+程序作为前台客户机,Matlab作为计算引擎,利用Engine实现Matlab的强大功能,引擎程序和C+程序各作为一个进程单独运行,通过进程间的通信机制进行交互。这种方法,需要在机器上安装Matlab软件,而且程序执行效率低。 (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+矩阵函数库Matrix的转换Matlab的m文件到CPP文件的程序,它可将Matlab的源代码编译成同等功能的C+源代码,既保持了Matlab的优良算法,又保持了C+的执行效率高的优势。Matcom软件平台本身的功能相当强大,提供了近千个Matlab的基本功能函数,通过必要的设置,就可以直接实现与C+的混合编程,而不必再依赖Matlab。同时,Matcom还能够将Matlab函数或者编写的Matlab程序转化为C+形式的DLL,它与VC+有良好的接口,只要包含必要的库文件和头文件即可实现对Matlab函数的调用,而无需运行Matlab。Matcom转换过程简单,不仅可以转换独立的脚本文件,也可以转换嵌套脚本文件,可以方便的生成动态链接库文件和可执行文件,它还支持一定的图形显示,生成代码的可读性好。Matcom可以通过插件的形式有机的嵌入VC+开发环境(即Visual Matcom),实现可视化编程,利用Visual Matcom插入m文件到VC+工程中可自动实现所需库文件、头文件、CPP文件的连接及编译环境的设置,如果出现编译错误,直接修改m文件即可。利用Matcom可以在VC+中直接书写类Matlab和Matcom语句实现Matlab与C的混合编程。此方法的缺陷是不能涉及Matlab的内部类,对于Matlab中struct类不支持将Matcom4.5中的ago4501.dll和v4501v.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 操作系统为例。(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+环境中将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)语句来初始化库文件,即允许使用任何库中的函数,并使用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. 应用开发实例(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 Dependencies等文件,此时添加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选择菜单toolsoptions,选择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 * p1 = 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.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 骨科锻炼试题及答案
- bsci考试题及答案
- 2025年氟化工艺考试试题(含答案)
- 医学基础知识试题题库(带答案)
- 消防安全知识的考试题及答案
- 医院三类射线装置辐射工作人员考核试题(附答案)
- 2025年执业药师之药事管理与法规基础试题库和答案
- 2024年全国保密知识竞赛题库和答案
- 2025网络安全知识竞赛题库和参考答案
- 标准文献分类法培训课件
- 第1课 互联网和物联网 课件 2025-2026学年七年级下册信息技术浙教版
- 信息技术在课堂教学中的应用
- 江苏省宿迁市沭阳县如东实验学校2024-2025学年七年级下学期期末数学试卷(含答案)
- 2025年湖南省高考真题卷政治和答案
- 精神病患者的康复护理计划
- 额叶胶质瘤护理查房
- 菜鸟驿站标准化运营流程
- 危险废弃物及固体废物管理培训
- 徒手整形培训课件
- 乡镇密码电报管理制度
- 村级络监控安装方案(3篇)
评论
0/150
提交评论