matcom法Word格式.docx
- 文档编号:22474711
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:57
- 大小:1.52MB
matcom法Word格式.docx
《matcom法Word格式.docx》由会员分享,可在线阅读,更多相关《matcom法Word格式.docx(57页珍藏版)》请在冰豆网上搜索。
m文件保存的默认位置为:
matcom安装目录\matcom45,生成的C++文件保存的默认位置为:
matcom安装目录\matcom45\Debug\,本例matcom安装目录为C盘即C:
\matcom45\Debug\,在该目录下将会产生Test1.h、Test1.cpp、Test1.r、Test1.obj文件。
2、在VC中用MFCWizard(exe)创建一个基于对话框名为Example的工程。
在面板上添加一个ID为IDC_BUTTON1按扭。
3、将C:
\matcom45\Debug目录下的Test1.cpp文件的内容拷贝到
voidCExamleDlg:
:
OnButton1()下,(如图五)。
图五
4、将C:
\matcom45\lib\下的matlib.h和v4501v文件和C:
\matcom45\debug下的Test1.h文件拷贝到工程Example目录下,然后在VC中将库文件和头文件加入到工程中:
工程->
添加工程->
Files,选择刚刚拷贝到Example目录下的matlib.h、v4501v和Test1.h文件(如图六)。
图六
5、在ExamleDlg.cpp中加入如下代码:
#include"
matlib.h"
Test1.h"
6、在voidCExamleDlg:
OnButton1()中分别添加一个初始化类库调用函数”initM(MATCOM_VERSION)”和一个结束类库调用函数”exitM()”(如图七)。
图七
运行程序,点击画图按扭(如图八)。
图八
程序的release版本需要ago4501.dll、v4501v.dll、v4501.lib三个文件的支持。
以上只是介绍了VC和Matcom接口编程的一个简单例子,功能并不完善,也远远达不到一个软件所要求的水平,但只要熟悉了VC和Matcom接口编程的基本原理和方法,相信大家一定能够编出优秀的软件。
浅析VC与Matlab联合编程
(二)
在“浅析VC与Matlab联合编程
(一)”中简单介绍了VC与matcom的接口编程,实现了VC调用matcom的一个基本功能,要真正熟练使用接口编程,还要对函数调用有一定了解。
本文通过一个实例,较详细的介绍如何在VC中调用matcom编译后的函数。
首先新建一个函数huatu.m,该函数的功能是:
接受用户输入的左端点值和右端点值两个输入参数,然后在该区间画正弦图形。
函数还将生成两个随机数,作为一个点的坐标在图中打印出来(绿点),用来说明如何在VC中处理调用函数的返回值。
步骤如下:
1.建立一个名为Example2基于对话框的MFC(exe)工程。
2.在matcom中新建一个名为huatu.m文件,如图1;
图1
3.在matcom命令窗口中运行该函数,如图2;
图2
4.将生成的huatu.h、huatu.cpp(默认位置为安装目录:
\matcom45\samples\Debug)和matlib.h、v4501v.lib(默认位置为安装目录:
\matcom45\lib)四个文件拷贝到建立的工程Example2目录下。
5.将第四步拷贝的四个文件加入到VC工程中:
文件,选择刚才拷贝到Example2目录下的四个文件。
完成后如图3;
图3
6.在Example2dlg.cpp中添加头文件:
(如图4所示)
huatu.h"
图4
7.为工程建立界面:
添加一个Button按扭控件;
添加四个Editbox控件,用于显示数据;
添加五个Statictext控件,四个显示文字,一个显示图形,将显示图形的Statictext的ID设置为ID_PIC。
其他所有控件属性保持默认(为了看图方便,可以适当调整显示图形Statictext控件的边缘)。
如图5所示
图5
8.按Ctrl+W为控件添加变量。
如图6所示
图6
9.为Button1按钮添加响应代码。
如图7所示
图7
10.运行程序,输入左端点和右端点,点击”画图”按钮,结果如图8所示。
(本例只是为了说明如何调用函数,没有进行容错处理)
图8
注:
如果在编译中出现下列错误:
fatalerrorC1010:
unexpectedendoffilewhilelookingforprecompiledheaderdirective
进行下列设置:
设置->
C/C++选择precompiledheaders选择第一或第二项:
自动选择预补偿页眉,如图9所示
图9
本例介绍了在VC中如何调用用matcom编译的m函数的方法,并且基本上实现了VC和Matlab的无缝结合,希望对大家编程会有所帮助,现在时间很紧,下次有机会详细介绍m文件翻译成C++语言后代码的含义。
我的QQ:
44760299欢迎大家一起讨论!
浅析VC与Matlab联合编程<
三>
在“浅析VC与Matlab联合编程<
一>
”和“浅析VC与Matlab联合编程<
二>
”中介绍了matcom,这个工具可以将用matlab写的m文件翻译成C++文件,或者是可执行文件(exe)或库文件(dll)。
但是matcom在很多方面也有限制,比如,对struct等类的支持有缺陷,部分绘图语句无法实现或得不到准确图象,尤其是三维图象。
实际上VC与matlab的接口实现方法有很多种,matcom只是其中一种,本文再介绍一种比较容易实现的方法:
COM接口方法。
COM(CompponentObjectModel组件对象模型)是一项比较复杂的技术,详细讲的话几本书也讲不完,所以在这里不作介绍,本文通过一个例子详细介绍如何在matlab下做COM组件,以及如何在VC中调用COM组件。
首先在Matlab编辑器里编辑m函数文件:
启动matlab->
File->
New->
M-file函数内容如图1:
该函数无输入输出参数,文件保存为huatu.m。
图1m函数huatu.m
在matlab下建立COM组件,步骤如下:
1、在matlabcommandwindow输入如下命令:
>
comtool
出现com编辑界面,如图2:
图2com组件编辑界面
2、新建工程:
NewProject…,如图3。
图3com组件属性设置图4com组件属性设置1
3、设置组件属性,在"
Componentname"
项中填写组件名称"
component"
这时候会自动生成类"
在"
Classname"
项中填写类名称"
huatu"
如图4
为了便于区分,选中"
Classes"
中的"
点击“remove”按钮,将类component移除,再点击"
Add>
"
添加新类huatu,结果如图5。
点击"
OK"
,接下来出现一个对话框,选择"
Yes"
.
图5com组件属性设置2
4.添加文件:
选中左边工作区的"
点击Project->
AddFile…,选择已经编辑好的函数文件huatu.m,如图6。
需要注意的是m文件必须是m函数,否则会报错,如果是m脚本文件的话,只需要改为无输入输出参数的m函数即可。
图6添加m文件
5、生成com组件:
点击Build->
COMObject…,结果如图7。
图7
com组件已经由matlab做好,默认的保存位置为:
matlab安装位置\work\component。
VC中调用COM组件,步骤如下:
1、在VC中建立名为ComHuaTu的基于对话框的MFC(exe)。
2、面板上添加一个名为“画图”的button按钮,如图8。
图7工程界面
3、将component_idl.h和component_idl_i.c文件拷贝到VC建立的工程ComHuaTu目录下。
两文件默认目录为\work\component\src
4、将上面两文件加入工程:
Files,选择刚刚拷到目录下的component_idl.h和component_idl_i.c文件。
5、将目录/extern/include/下的mwcomtypes.h拷贝到工程ComHuaTu目录下,并加入到工程中,方法同上。
6、为程序添加头文件component_idl.h、component_idl_i.c和mwcomtypes.h,结果如图9
图9添加头文件
7、按钮画图函数添加代码:
图10添加按钮函数代码
函数代码的意义涉及到COM,正在写VC调用COM组件所涉及到的有关COM方面的知识。
8、设置预编译头文件:
设置(快捷键Alt+F7),选择C/C++项precompliedHeaders,设置如图11
图11预编译头文件设置
9、编译、连接、运行,结果如图12。
图11运行结果
可以看出利用VC调用com组件的方式来调用matlab比较简单,而且几乎支持matlab所有的函数,在m文件较大、用matcom、调用mathlibrary或使用mcc方式无法实现的时候,推荐使用。
需要说明的是,以上程序拷到另一台机器上是无法直接运行的,因为COM组件没有新机器上注册,如果要在另一台机器上使用的话,还需要打包安装COM组件,并且由于本程序代码很简单,所以也就不提供源程序了,自己可以动手做一下。
本人正在写一本关于VC和matlab接口方面的书,估计年底完稿,详细介绍VC和matlab接口的几种方法,并提供详细的例子,例子都是我自己写过的,欢迎大家提供些好的意见和建议。
浅析VC与MATLAB联合编程<
四>
在浅析VC与MATLAB联合编程<
、浅析VC与MATLAB联合编程<
和浅析VC与MATLAB联合编程<
中简单介绍了VC和MATLAB接口的两种方法,初学者可能会问为什么要用VC和MATLAB接口,接口的实质又是什么,本文就通过一个例子来回答这两个问题。
首先来介绍一下MATLAB。
MATLAB名字由MATrix和LABoratory两词的前三个字母组合而成。
那是20世纪七十年代后期的事:
时任美国新墨西哥大学计算机科学系主任的CleveMoler教授出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK库程序的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB。
经几年的校际流传,在Little的推动下,由Little、Moler、SteveBangert合作,于1984年成立了MathWorks公司,并把MATLAB正式推向市场。
从这时起,MATLAB的内核采用C语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。
MATLAB以商品形式出现后,仅短短几年,就以其良好的开放性和运行的可靠性,使原先控制领域里的封闭式软件包(如英国的UMIST,瑞典的LUND和SIMNON,德国的KEDDC)纷纷淘汰,而改以MATLAB为平台加以重建。
在时间进入20世纪九十年代的时候,MATLAB已经成为国际控制界公认的标准计算软件。
MATLAB已经成为目前国际上最流行、应用最广泛的科学工程计算软件,它广泛的应用于自动控制、数学运算、信号分析、图象处理、财务分析等各行各业。
由于它具有强大的计算和绘图功能、大量稳定可靠的算法库和简洁高效的编程语言,已成为数学计算工具方面事实上的标准。
在欧美大学里,诸如应用代数、数理统计、自动控制、数字信号处理、模拟与数字通信、时间序列分析、动态系统仿真等课程的教科书都把MATLAB作为内容。
这几乎成了九十年代教科书与旧版书籍的区别性标志。
在那里,MATLAB是攻读学位的大学生、硕士生、博士生必须掌握的基本工具。
在国际学术界,MATLAB已经被确认为准确、可靠的科学计算标准软件。
在许多国际一流学术刊物上(尤其是信息科学刊物)都可以看到MATLAB的应用。
在设计研究单位和工业部门,MATLAB被认作进行高效研究、开发的首选软件工具。
如美国NationalInstruments公司信号测量、分析软件LabVIEW,Cadence公司信号和通信分析设计软件SPW等,或者直接建筑在MATLAB之上,或者以MATLAB为主要支撑。
又如HP公司的VXI硬件,TM公司的DSP,Gage公司的各种硬卡、仪器等都接受MATLAB的支持。
为了说明问题,我们举个例子:
解下列线形方程组:
(如图1):
用C语言(VC环境中)编写的代码为:
(图2)
编译、连接,运行结果为:
(图3):
而该方程在MATLAB中只需要一个命令“\”就可以解决:
在MATLAB中建立一个新的m文件,在MATLAB菜单中:
Mfile(如图4):
图4
在M文件中输入代码,并保存为QJFCZ.m。
(如图5)
图5
在MATLABCommand命令窗口中输入以下命令:
QJFCZ
然后回车,结果如下:
x=
-0.1429
2.7857
可以看出用MATLAB写出的代码十分简单,对于上面的方程,如果矩阵A和b的维数发生变化的话,C代码还要重新编写,而用MATLAB书写的代码几乎不用改动,只需改变数据即可。
如果现在我们用VC编写的一个软件,其中要求解有5个未知数的线形方程组,如果用C\C++语言来写程序的话其编程量是很大的,如果在C\C++语言中能用MATLAB那么简单的代码来实现该功能就可以大大减少工作量,VC和MATLAB接口就是做这个工作的。
MATLAB中提供了大量用C\C++重新编写的MATLAB库函数,包括初等数学函数、线形代数函数、矩阵操作函数、数值计算函数、特殊数学函数、插值函数等等,还可以利用MATLAB的编译工具将m文件方便的转化为C\C++语言、可执行程序(exe)、动态连接库文件(dll)、COM组件等等,并可直接供C\C++语言调用,利用VC和MATLAB接口技术可以在VC中充分发挥MATLAB的数值计算功能,并且可以不依赖MATLAB软件运行,我们在编写程序时,可以在VC下做出很漂亮的界面,而把复杂的数值处理交给MATLAB去做(实际上MATLAB也能做界面GUI(GraphicUserInterface),而且做出的界面我认为并不比VC逊色,但是需要MATLAB软件作为后台运行,如果不依赖MATLAB软件运行的话,可以在VC中调用GUI),然后通过接口技术将MATLAB集成到VC中,这样可以大大减轻编程的负担,并减少程序编写时间。
事实上正是由于MATLAB数值计算功能的强大,MATLAB与许多程序都有接口,例如Fortran、VB、Java、SPSS(一个著名的统计软件)、Excel、Word等,其实质也是通过接口在程序中调用MATLAB的功能。
精通VC与Matlab联合编程(五)
在前面的介绍中,只是简介绍了VC与Matlab程序设计的几个简单例子,很多关键性的知识都没有介绍(例如函数的输入输出格式,VC中调用工具箱函数,编译器的使用,几种方法的混合使用等等)在以后的文章中,将会对这些知识进行介绍(因此标题也改了一下,呵呵,如果有错误的地方,还望大家多多指点)VC调用Matlab的方法有多种,为了对混合编程有一个大概认识,将常用的几种方法中介绍一下:
一、通过MatlabEngine方式
MatlabEngine是指一组Matlab提供的接口函数,支持C语言,MatlabEngine采用C/S(客户机/服务器)模式,Matlab作为后台服务器,而C程序作为前台客户机,通过Windows的动态控件与服务器通信,向MatlabEngine传递命令和数据信息,从MatlabEngine接受数据信息。
用户可以在前台应用程序中调用这些接口函数,实现对MatlabEngine的控制。
采用这种方法几乎能利用Matlab全部功能,但是需要在机器上安装Matlab软件,而且执行效率低,因此在实际应用中不采用这种方法,在软件开发中也不可行,我认为适合个人使用或做演示用,因此不打算介绍。
二、直接调用Matlab的C/C++数学函数库
Matlab中提供了可以供C/C++语言调用的C/C++数学函数库,其中包含了大量用C\C++语言重新编写的Matlab数学函数,这些函数涉及到线形代数、数值分析、傅立叶变换、多项式计算、解微分方程等,并且函数库中提供了大量各种矩阵操作函数,在VC中可以直接使用这些函数,通过这些函数可以在VC中方便的实现在Matlab中矩阵运算功能。
可以看出用这种方法可以很灵活的调用Matlab来编写应用程序,但要求读者对C\C++语言比较熟悉,可以看出使用这种方法调用Matlab的工具箱函数有很大困难。
适合对C\C++语言比较熟悉的用户使用,
三、用Matlab自带的MatlabCompiler
MatlabCompiler的作用是将m文件转化成C/C++代码(也就是通常所用的mcc命令),这种源代码需要用C/C++编译器编译连接成独立应用程序,在将m文件转成独立应用程序的过程中生成的C/C++文件,原则上是可以被其它的C/C++代码调用的,编译器可以通过设置mcc命令的选项,将m文件编译成动态链接库文件、C/C++文件、可执行文件等一系列文件。
到matlabR21.1为止,MatlabCompiler的m程序转换成C/C++代码功能有很多限制:
1.不能转换脚本m文件,只能转换m函数;
2.不能使用matlab对象;
3.不能用input或者eval操作matlab空间变量;
4.不能动态地命名变量,然后用load或者save命令来操作;
5.不能处理具有嵌套调用其他m文件的m文件;
6.不能使用MATLAB内联函数;
四、使用matlab的combuilde工具
COM是componentobjectmodule的简称,它是一种通用的对象接口,任何语言只要按照这种接口标准,就可以实现调用它。
matlab6.5新推出来的combuilder就是把用matlab编写的程序做成com组件,供其他语言调用。
该方法实现简单,通用性强,而且几乎可以使用Matlab的任何函数(注意:
不支持脚本文件,脚本文件使用时要改为函数文件),因此在程序较大、调用工具箱函数或调用函数较多时推荐使用,这也是Matlab公司(Matlab公司就是Mathworks公司)推荐的使用方法。
五、使用matcom工具。
这是个第三方控件,很小(8M多),原本属于mathtool公司,后来被Mathworks公司合并了,使用该工具可以将m脚本文件和m函数转化成相同功能的C\C++文件,相比其它方法使用matcom具有如下优点:
1.转换过程简单(由matcom工具自动实现),容易实现;
2.可以方便的生成动态链接库文件(dll)和可执行文件(exe);
3.不仅可以转换独立的脚本文件,也可以转换嵌套脚本文件;
4.设置环境后,可以使用Matlab的工具箱函数;
但matcom也有以下不足:
1.对struct等类的支持有缺陷,对class数据类型;
2.部分绘图语句无法实现或得不到准确图象,尤其是三维图象;
因此在不涉及到三维做图以及m文件不大的情况下推荐使用。
以上几种方法可以单独使用,也可以混合使用。
这里简单的介绍了VC和matlab接口的几种方法,读者可以根据需要选择适合自己的方法。
需要说明的是上以上几种方法并不是相互独立的,而是有相互联系的,比如使用C/C++函数库与使用编译器,对于实现相同功能的程序,直接调用函数库与使用编译器最终生成的代码可能相差不大,只不过一个是直接在VC中写C/C++代码,一个是在Matlab中写好m代码,然后通过编译器将m代码转化成相同功能的C/C++代码,而在转化的过程中也需要调用相应的C/C++函数库文件。
在后面的文章中将从第二种方法开始进行介绍
精通VC与Matlab联合编程(六)
MatlabC\C++函数库是Matlab扩展功能重要的组成部分,包含了大量的用C\C++语言重新编写的Matlab函数,主要包括初等数学函数、线形代数函数、矩阵操作函数、数值计算函数、特殊数学函数、多项式函数、插值函数等,用户可以在自己的C\C++程序中调用这些函数,实现复杂的矩阵计算功能,从而减少程序设计工作量,需要说明的是C函数库和C++函数库是两个不同的函数库。
在使用前需要进行安装:
在Matlab命令窗口中输入:
mbuild-setup
按照提示选择VC的编译器,完成后在Matlab命令窗口中输入:
mex-setup
同样选择VC的编译器,就完成编译器的安装和配置。
首先介绍下C函数库,C数学函数库所需要的库函数在该目录下:
Matlab根目录:
\extern\lib
下面来看matlab自带的一个使用C函数库的例子(所有使用c函数例子在:
matlab根目录\extern\examples\cmath):
*ex1.c
*
*Copyright(c)1995-1999byTheMathworks,Inc.AllRightsR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matcom