MATLAB与VC混合编程指导书0_1_第1页
MATLAB与VC混合编程指导书0_1_第2页
MATLAB与VC混合编程指导书0_1_第3页
MATLAB与VC混合编程指导书0_1_第4页
MATLAB与VC混合编程指导书0_1_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MATLAB与VC混合编程实习指导书5目录第一局部 序言-3第二局部 Matlab的可视化功能简介-42.1、Matlab的可视化功能简介- -42.2、Matlab的可视化功能实现-8第三局部 使用Matcom进行混合编程-193.1、Matcom 的简介-193.1.1、Matlab与VC混合编程的实现方法-193.1.2、Matcom 的简介-203.2、Matcom的安装-21 3.3、Visual Matcom开发环境的配置-233.3.1、Visual Matcom开发环境的配置一-233.3.2、VC与Matcom解线性方程组比照-23 3.3.3、Visual Matcom开发

2、环境的配置二-26 3.3.4、Visual Matcom开发环境的配置三-273.3.5、Visual Matcom开发环境的配置四-293.3.6、Matcom C+ 矩阵库的矩阵类Mm-293.4、Matcom的应用实例-333.4.1、实例1 Mm矩阵的创立及使用-333.4.2、实例2 VC中调用Matlab函数画图-36 3.4.3、Matcom C+矩阵库的图形和图像显示功能-393.4.4、实例3 图形绘制的根本功能演示-413.3.5、实例4 利用Matcom绘制动态曲线-45 3.3.6、实例5 Matcom二维和三维曲线绘制综合应用-57第四局部 使用其他方式进行混合编程

3、-714.1、Matlab COM接口混合编程-714.2、在VC+中调用Matlab Engine编程-784.3、Matlab Engine API介绍-81第一局部 序言在我学习?数学实验?这门课的时候,对Matlab强大的科学计算功能深深佩服,但是觉得Matlab可视化编程太繁杂了(我的数学实验作业就是用Matlab写了一个可视化程序,见后),于是乎我就想到用VC+来做应用程序的界面,而用Matlab来实现应用程序的功能,这样在VC中就不用再写复杂的算法了,在Matlab中也就不用再为复杂的可视化而烦恼了,所以此时我就萌生一种想法,何不来一个Matlab与VC进行混合编程的研究呢?而在

4、此时,正赶上学校遴选创新人才,所以我就把Matlab与VC混合编程的课题研究作为我的一个创新点,在这个创新课题的研究中,得到讲授?数学实验?这门课的老师沈远彤老师的大力支持,在此非常感谢老师的栽培与信任。由于个人能力有限和时间紧迫,我个人也没能够深入地研究,所以这本实习指导书的内容比较简略,本书的资料大多来源于互联网。最后衷心希望有想往这个方向开展的同学能够在我的根底上有更好的开展!第二局部 Matlab的可视化功能简介MATLAB自1984年由美国MathWorks公司推向市场以来,已成为全球公认的科学应用软件,已被从事科学研究、工程计算的广阔科技工作者。高校师生确认为必须掌握的计算工具,是

5、从理论通向实际的桥梁,也是最可信赖的科技资源之一。Matlab 除了强大的科学计算功能以外,可视化功能也是其一大特色。现在,市面上流行着许多可以实现可视化的软件,比方:3D max 、flash 等等,都可以做出多彩、万变的图形和动画效果。但是,这些软件仅仅是对现成的图形做一些处理和变化。而Matlab作为一种“数学家软件,数学专用软件,它的可视化功能也是和数密不可分的。Matlab的可视化是数据的可视化,是基于数学的运算和逻辑的。它是由数值、数据、 函数等数学元素产生图形和动画等可视化效果,图形等根据数的变化而变化,故而可以通过数值、逻辑、运算的改变而轻松改变可视化效果。同样,通过Matla

6、b 的可视化效果,可以从一堆杂乱的离散数据中去观察和发现数据间的关系,感受由图形所传递的数据间的内在本质,直观的去理解数。Matlab 的这种图与数之间的相辅相成的关系,极大的方便了科学研究 ,这也是Matlab 之所以获得广阔科技工作者以及高校师生喜欢和认可的重要因素。2.1 Matlab的可视化功能简介为了实现Matlab的可视化功能,它提供了很丰富的作图函数和图形处理指令,理解和掌握了这些函数和指令,我们就可以去实现Matlab 多样的可视化功能。这些函数和指令一般是Matlab 的“高层指令,例如:plot、comet 、movie等。这种指令,形态和格式比较友善,易于理解和应用。一、

7、句柄图形体系可视化的根底Matlab 的一些图形处理函数都是Matlab 的“高层指令,而这些“高层指令都是由Matlab 的“低层图形函数写成的,或以M函数的形式,或以内装函数的形式。所以,为了更深入理解高层绘图指令,绘出更精细、更生动、更个性的图形,利用低层作图函数和图形对象属性开发专用绘图函数,作出更人性化的可视化作品,我们将详细介绍Matlab 的这些“低层图形函数,即句柄图形体系。所谓句柄图形,就是一组“低层图形函数的名称,是一种面向对象的绘图系统。它深入Matlab 可视化功能的内核,可以提供创立计算机图形所必须的各种软件,它所支持的指令,可直接创立线、文字、网线、面以及图形用户界

8、面等根本的图形对象。低层的函数指令使用起来,不像“高层指令那样数学概念清晰,调用格式简明易懂。但低层函数指令直接操作根本绘图要素(Basic drawing elements),可更细致、更具个性地表现图形,更自然、贴切地展现应用场合地物理意义。句柄图形的根本思想是:Matlab 的每一个可视局部就是一个对象,每个对象都有一个相应的唯一的标识符或者句柄,并且每个对象都有一组可以根据需要进行修改的属性,Matlab 句柄图形的这一根本思想就是它实现可视化功能的根本方法和重要原那么。首先,介绍一下句柄图形的几个重要概念 ,也就是在句柄图形的根本思想中提到的几个概念。1、对象:即图形对象 Matla

9、b 把用于数据可视和界面制作的根本绘图要素称为句柄图形对象Handle graphics object,比方:线、面、控件、坐标轴等。一个图形对象就是一个可以被单独处理的单位,可以被独立的操作。Matlab 的可视化的实现实际上就是对对象进行操作处理完成的。图形命令所创立的都是图形对象,包括有图形窗口或者仅包括图形,以及坐标轴、线、外表、文本等。在Matlab 中生成的每个具体图形都由假设干不同对象构成,每个具体图形不必包含全部对象,但每个对象必须具备根屏幕和图形窗简称图。在句柄图形体系中,各图形对象并不平等,他们之间的关系可用以下树结构层次Tree-structured nierarchy表

10、示: 对象是句柄图形的根底和关键,后面将后面介绍各种对象。2、对象句柄:每个具体对象都有一个“与生俱来、终生不变的独特身份,即句柄handle,是一个双精度数。句柄是存取图形对象的唯一标准识别符,不同对象的句柄不可能重复和混淆。每台计算机,根对象只有一个,即屏幕,它的句柄总是数字0;而简称为图的图形窗口figure windows的句柄总是正整数,它用来标识图形窗的序号。注意:对根屏幕、图对象来说,数字可以直接作为调用对象的句柄,但不要企图通过直接输入双精度数,作为其他对象的句柄。这些对象的句柄只能由相关指令运行而得。如:h_ax=gca 就返回当前图形中当前坐标系(axis)的句柄。3、对象

11、属性:“每个对象都有一组可以根据需要进行修改的属性,这些属性由属性名以及相应的属性值构成,定义了对象的特征,通过设置、修改这些属性,用户可以根据需要灵活地改变、调整图形对象显示的方式。 有的属性名比较“群众化,在所有的对象中都能见到由下面表中列出,而与每个对象类型如:线、面等相关的属性都是唯一的。对象可以包含很多属性,例如:对象的位置、大小、颜色等等。对对象的操作,实际上就是对对象属性的操作。每个不同的对象都有其自身独立的属性,这就保证了在用户改变这些属性时,不会改变其它同类型的对象的属性。 在生成一个对象的时候,其初始化属性值就是默认属性值。这些属性值可以在生成对象时同时设置,例如:语句hf

12、_1=figure(color,r),生成一个图形窗口对象,颜色为红色,将句柄赋予hf_1。也可以在对象生成后再修改它的属性值。4、get语句和 set语句-句柄图形的根本语句 在对象生成后再查看和修改它的属性值,函数inspest提供了相应的图形用户界面,只需输入inspest(H),就可以翻开一个图形用户界面,其中H是要查看和修改的对象的句柄,这种方法比较直观,易懂,这里不做详细介绍。现在介绍另外一种查看和修改对象属性的方式,get语句和 set语句。get语句和 set语句被用来获得和修改句柄图形对象的属性。get语句返回对象的一个和多个属性的当前值, 最常用的调用语法为: get(ha

13、ndle,propertyname)例: p=get(hf_1,position) 返回句柄为hf_1的图形对象的位置向量。set语句改变句柄图形对象的属性值,其语法为: set(handle,propertyname1,propertyvalue1,propertyname2,propertyvalue2)例:set(hf_1,color,r) 将句柄为hf_1的图形对象的颜色改为红色。Matlab的可视化实际上是以对对象的操作所实现的,而对象的操作又是对对象属性的操作,故而有了get语句和 set语句就根本可以实现Matlab的可视化。get语句和 set语句的运用非常简单易学,但要做出出

14、色、人性化、多变的作品,就需要灵活、熟练地运用这两个语句,并结合Matlab的其他语法结构,加上清晰的数学思路来实现,这也不难做到。二、图形对象可视化操作的根本单位图形对象不但是可视化操作的根本单位,也是组成图形作品的根本单位,因此,我们有必要将图形对象作以简要介绍。各种对象及其关系的在第二局部已经列出,简要介绍如下:根屏幕root:“根屏幕对应于计算机屏幕,它不需要创立,但可以设置属性值。其它图形对象都是该对象的“子。图形窗figure:图形窗是显示图形的窗口,“根屏幕下可以有多个图形窗,但只有一个是当前窗口。控件Uicontrol:图形窗下的控件主要包括:按钮,列表框,文件框,滑块等,它是

15、人机交互界面。菜单Uimenu:图形窗下的菜单是下拉式菜单,它是调用子程序的按钮。轴axis:在图形窗口中,“轴对象定义一个区域,该区域是图形窗的子,同时也是图像,光照,线条等对象的父。所有绘图指令如plot,surf,mesh和bar等都可以创立轴对象。如果图形窗中有多个轴对象,那么只有一个是当前轴对象。图像Image:在轴对象下,一个图像对象由数据矩阵和色数矩阵组成,根据矩阵的不同类型又分索引图像,灰度图像和全彩色图像。 线条Line:在轴对象下的“线条对象为根本的图形元素,用于绘制二,三维图形等。绘图指令Plot,plot3创立的就是图形对象。 块Rectangle:在轴对象下的“块对象

16、为带有边缘的多边形,绘图指令fill,fill3和contour3创立的是快对象。 文本Text:在轴对象下的“文本对象表示字符串,title,xlabel,ylabel,gtext,text等都可以创立文本对象。光照Light:在轴对象下的“光照对象设置光源,以影响块和外表对象,用户可以设置光源属性控制颜色,位置和方向等。外表对象surface在轴对象下由绘图指令做的二三维图形都是外表对象。菜单对象和控件对象是Matlab的特色之处,是生成人机交互界面的关键,我们特别介绍:1、界面菜单:在缺省情况下,在Matlab图形窗上总有一个顶层菜单条,我们可以看到,它包含文件File等五个标准菜单项。

17、我们可以用Menubar属性的两个属性值nonefigure来控制它的隐藏恢复。我们也可以根据自己的需要设计自己的菜单,通过uimenu指令来创立,格式如下:h_menu=uimenu(h_parent,propertyname,propertyvalue,)注:菜单也可作父对象,创立子菜单。2、控件对象除菜单外,控件是另一种实现用户与计算机交互的主要途径。有按键、文本框等10种表现形式,也就是类型。通过uicontrol指令创立。 格式如下:h_c=uicontrol(h_parent,pn,pv,.)注:控件的类型由style属性的sv字符串决定。见以下列图:属性值SV控件名称特征及其使用

18、场合pushbutton单功能按键上带文字标识的矩形;单功能选择用radiobutton无线电选择按键带文字标识的小圆圈,开关状态用圈内黑白点表示。多项“互斥功能选择用。togglebutton双位按键上带文字标识的矩形,开关状态用凹凸表示。两状态切换选择用。checkbox检录框带文字标识的小方框;方框用对号表示选中,多项“互容功能选择用listbox列表框带垂直滚动条的文本框,多项“互容功能选择用。popupmehu弹出框带操纵键的长方形文本框。多项“互斥功能选择用。slider滑动键呈长方形;中间游标、两端带滑动操纵;可连续步进取值。edit text可编辑文本框凹形方框,可使合法的MA

19、TLAB语句,程序输入运行。可随意输入运行指令程序。static text静态文本框凹形方框,其中文字纯粹做注释说明用。frame控件区域框为醒目,在图面上,用方框圈定用户控件所在区域。控件的具体应用,可在下面实例中找到。2.2 Matlab动画功能实现(一)Matlab动画功能介绍Matlab提供了丰富的作图函数和图形处理指令来实现其可视化功能。有关静态图形的内容在这里就不详细表达了,仅仅对动态图形的有关内容作以总结。首先,动态图形的实现是以静态图形为根底得。原那么上,将离散的静态图形连续播放或快速变化就实现了图形的动态化。动态图形的实现方法主要有4种:彗星状轨线,色图变幻,影片动画,实时动

20、画。其动画实现的方式、方法各不相同,下面就对这几种方法的特点应用、应用等作以简单介绍。1. 彗星状轨线:动态地展示质点的运动轨迹。格式:comet(x,y,p)comet(x,y,z,p)其中x y、x y z为图形向量,p为决定慧长的参量。2. 色图的变幻:使当前图形的色图作循环变化,以产生动画效果。格式:spinmap(t,inc)注意:该指令仅对256色设置有效。3. 影片动画:将预先制作好的图形存放在图形缓冲区,然后逐帧播放,到达动画的效果。主要指令: m(i)=getframe 将图形的数据向量存放入构架数组中movie(m,k,t) 以每秒t帧的速度播放m中的画面k次。4. 实时动

21、画:保持图形中绝大局部的象素颜色不变,只更新局部象素的颜色,构成运动图象。一般需借助于循环的函数体来实现。关键点:运动对象的擦除属性“EraseMode的定义。 擦除属性“EraseMode的可选属性值可选值 含义normal计算整个画面的数据,重画整个图形。这种模式产生的图形最准确,但最最慢。backgrund将旧对象的颜色变为背景颜色,实现擦除。这种模式将损坏被擦除对象下面的对象。但新对象会正确着色。none不做任何擦除。xor只画与屏幕颜色不一致的新对象点;只擦除与屏幕颜色不一致的原对象点。该方式不损坏被擦除对象下面的对象。常用二Matlab动画制作函数的分析Matlab的动画制作函数有

22、的是以M函数的形式编写的,如:comet(x,y,p)、comet(x,y,z,p)、spinmap(t,inc)等,我们可以用M-编辑器翻开它,阅读它的源代码,分析它的运行原理。又有一是系统的内装函数,如: m(i)=getframe,movie(m,k,t)它们经过编译处理,是不可读的,我们只需掌握它的用法就可以了。而对于用M函数编写的函数,我们那么可以作以分析。仅对comet(x,y,p)函数作以分析,用编辑命令翻开:edit comet并在程序中以%标识作以解释分析。function comet(x, y, p)%COMET Comet-like trajectory.% COMET(

23、Y) displays an animated comet plot of the vector Y.% COMET(X,Y) displays an animated comet plot of vector Y vs. X.% COMET(X,Y,p) uses a comet of length p*length(Y). Default is p = % 0.10.% Example:% t = -pi:pi/200:pi;% comet(t,tan(sin(t)-sin(tan(t)% See also COMET3.% Charles R. Denham, MathWorks, 19

24、89.% Revised 2-9-92, LS and DTP; 8-18-92, 11-30-92 CBM.% Copyright 1984-2002 The MathWorks, Inc. % $Revision: 5.12 $ $Date: 2002/06/05 17:52:51 $% 以上为注解段,是帮助信息和版本信息。(1) if nargin = 0, error(Not enough input arguments.); end(2) if nargin 2, y = x; x = 1:length(y); end(3) if nargin =3,(10) head = line

25、(color,co(1,:),marker,o,erase,xor, . xdata,x(1),ydata,y(1);(11) body = line(color,co(2,:),linestyle,-,erase,none, . xdata,ydata,);(12) tail = line(color,co(3,:),linestyle,-,erase,none, . xdata,ydata,);(13) else(14) head = line(color,co(1,:),marker,o,erase,xor, . xdata,x(1),ydata,y(1);(15) body = lin

26、e(color,co(1,:),linestyle,-,erase,none, . xdata,ydata,);(16) tail = line(color,co(1,:),linestyle,-,erase,none, . xdata,ydata,);(17) end% 建立彗星的头,身体和尾部,并为其选择最初三种颜色% 设置不同的擦除属性(18) m = length(x);(19) k = round(p*m);% 由p得到慧长(20) for i = 2:k+1(21) j = i-1:i;(22) set(head,xdata,x(i),ydata,y(i)(23) set(body

27、,xdata,x(j),ydata,y(j)(24) drawnow(25) end% 画出最初的慧身(26) for i = k+2:m(27) j = i-1:i;(28) set(head,xdata,x(i),ydata,y(i)(29) set(body,xdata,x(j),ydata,y(j)(30) set(tail,xdata,x(j-k),ydata,y(j-k)(31) drawnow(32) end% 彗星的头,身体和尾部运动至头到达目的地时。(33) for i = m+1:m+k(34) j = i-1:i;(35) set(tail,xdata,x(j-k),yd

28、ata,y(j-k)(36) drawnow(37) end% 尾部运动到目的地。几点说明:该函数是以M函数的形式编写的,但是它的具体运行原理和思想是实时动画。通过对函数spinmap的分析由于篇幅我们省去该函数的分析,也可以知道色图的变幻函数也是由实时动画的思想,以M函数的形式编写的。彗星状轨线函数comet实际上是一个多对象的动画函数,因为,它有彗星的头,身体和尾部三个对象的运动。我们也根据它的原理和思想去研究多对象的动画函数。三Matlab的多对象的动画函数顾名思义,多对象的动画就是在一个图中同时实现多个对象的运动和变化。然而,Matlab语句的每一句指令仅仅作用于一个对象,语句也是逐句

29、执行,不可以多句同时运行。故而,无法实现真正意义上的“同时运动的多对象动画。然而,单个对象的动画也只是将离散的图片或数据点连续播放或快速变化,利用眼睛的“滞留而到达动画效果的。因此,我们可以使多个对象快速地交互运动,使不同的对象在不同得时间运动以到达动画效果。现分析以上四种动画方式,找到其交叉点,交叉方式。comet函数与spinmap函数都是由实时动画的思想,以M函数的形式编写的。所以,无法与其它方式进行交互运动。影片动画是由指令来完成的,但其是针对数组的操作,可以将数组拆分调用,以到达交互的效果。对于实时动画自然也可以,因为它是针对运动具体细节的操作,不但可与自身一起交互运动,如comet

30、函数中彗星的头,身体和尾部三个对象的运动。还可以与影片动画交互运动。后面给出实例。Matlab的多对象的动画实例的核心函数该实例是一个三个对象交互运动的程序,中间以影片动画实现一大球的自转,周围以实时动画实现两个小球饶其转动。翻开该程序并分析:function earth(kk,zzz) %建立参数函数if size(kk)=0 k=1;else k=kk;end %设置饶动圈数的缺省值if size(zzz)=0 zb=1 1 1;else zb=zzz;end %设置三轴之比的的缺省值Z=sum(zb);ZZ=max(zb);xx=3.*zb(1)/Z;yy=3.*zb(2)/Z;zz=3

31、.*zb(3)/Z;%由三轴之比向量得到三轴长set(gcf,color,0.1 0.1 0.1)x1,y1,z1=sphere; %产生单位圆球矩阵h1=surf(xx*x1,yy*y1,zz*z1); %做圆球,并返回句柄hold onaxis offt=(0:1000)/1000*2*pi; x2=ZZ*2*cos(t); y2=ZZ*1.55*sin(t); x3=ZZ*1.55*cos(t); y3=ZZ*2*sin(t); plot(x2,y2,g,x3,y3,r);%产生圆线向量并画线axis(-2 2 -2 2);%固定坐标axis offxa=randn(1,18);xb=r

32、andn(1,18);h_xx=plot(xa,xb,*,color,0.9 0.9 0.9);hold on%产生随机星群n=36;for i=1:n rotate(h1,0 0 1,10); %将圆球h1饶0 0 1旋转10度。 delete(h_xx); rand(state,0); xa=randn(1,18); rand(state,0); xb=randn(1,18); h_xx=plot(xa,xb,*,color,0.9 0.9 0.9);%变换星群 axis(-2 2 -2 2); hold on mmm(:,i)=getframe; %将图片存入购架数组mmmendh2=l

33、ine(Color,1 0 1,Marker,.,MarkerSize,50,EraseMode,none); h3=line(Color,0 0.5 1,Marker,.,MarkerSize,50,EraseMode,none); %创立对象,并设置属性m=length(t); i=1;jj=1;s=0;l=1;while 1 set(h2,xdata,x2(i),ydata,y2(i); set(h3,xdata,x3(i),ydata,y3(i);%变换坐标位置 drawnow; i=i+1; s=s+1; if s=4 s=0; mm=mmm(l); l=l+1; movie(mm,

34、1,12000); hold off end if l=36 l=1; end if im i=1; jj=jj+1; end if jjk break; end end hold off(四)实例的运行运行Matlab,将Matlab的Current Directory浏览到Matlab多对象可视化编程 目录下,在命令窗口输入jiemian 得到以下界面。点击菜单“ReadMe得到:点击菜单“返回到jiemian;点击菜单“文件一般实例得到:点击菜单“色彩变幻得到:点击菜单“影片放映得到:点击菜单“实时动画得到:点击菜单“彗星轨迹图实例1得到:运动中点击菜单“彗星轨迹图卫星回归得到:点击菜单

35、“文件多对象实例1得到 输入A(r)点位置:3.1 1.1A(r)点位置:5.67 0 0.9A(r)点位置:0.4 3.19 1.56其中的控件可以编辑画图的表现形式,菜单“设置可以调整图形属性。点击菜单“文件多对象运动的星空得到点击菜单“文件多对象任意曲线的运动得到依次输入2.*sin(t).*sin(v) 3.*sin(t).*cos(v) 4.*cos(t)第三局部 使用Matcom进行混合编程3.1、Matcom 的简介3.1.1、Matlab与VC混合编程的实现方法在前面的介绍中,只是简介绍了Matlab可视化程序设计的一个简单例子,从上个例子可以看出Matlab可视化编程是很复杂

36、的,在以后的文章中,我们将会介绍Matlab与VC混合编程的方法。Matlab与VC混合编程的方法有多种,为了对混合编程有一个大概认识,将常用的几种方法中介绍一下:一、通过Matlab Engine方式Matlab Engine是指一组Matlab提供的接口函数,支持C语言, Matlab Engine采用C/S(客户机/效劳器)模式,Matlab作为后台效劳器,而C程序作为前台客户机,通过Windows的动态控件与效劳器通信,向Matlab Engine传递命令和数据信息,从Matlab Engine接受数据信息。用户可以在前台应用程序中调用这些接口函数,实现对Matlab Engine的控

37、制。采用这种方法几乎能利用Matlab全部功能,但是需要在机器上安装Matlab软件,而且执行效率低,因此在实际应用中不采用这种方法,在软件开发中也不可行,我认为适合个人使用或做演示用,因此只作简单介绍。二、直接调用Matlab的C/C+数学函数库Matlab中提供了可以供C/C+语言调用的C/C+数学函数库,其中包含了大量用CC+语言重新编写的Matlab数学函数,这些函数涉及到线形代数、数值分析、傅立叶变换、多项式计算、解微分方程等,并且函数库中提供了大量各种矩阵操作函数,在VC中可以直接使用这些函数,通过这些函数可以在VC中方便的实现在Matlab中矩阵运算功能。可以看出用这种方法可以很

38、灵活的调用Matlab来编写应用程序,但要求读者对CC+语言比较熟悉,可以看出使用这种方法调用Matlab的工具箱函数有很大困难。适合对CC+语言比较熟悉的用户使用。三、用Matlab自带的Matlab CompilerMatlab Compiler的作用是将m文件转化成C/C+代码也就是通常所用的mcc命令,这种源代码需要用C/C+编译器编译连接成独立应用程序,在将m文件转成独立应用程序的过程中生成的C/C+文件,原那么上是可以被其它的C/C+代码调用的,编译器可以通过设置mcc命令的选项,将m文件编译成动态链接库文件、C/C+文件、可执行文件等一系列文件。到matlab R21.1为止,M

39、atlab Compiler的m程序转换成C/C+代码功能有很多限制: 不能转换脚本m文件,只能转换m函数; 不能使用matlab对象; 不能用input或者eval操作matlab空间变量; 不能动态地命名变量,然后用load或者save命令来操作; 不能处理具有嵌套调用其他m文件的m文件; 不能使用MATLAB内联函数; 四、使用matlab的combuilde工具 COM是component object module的简称,它是一种通用的对象接口,任何语言只要按照这种接口标准,就可以实现调用它。matlab6.5新推出来的combuilder就是把用matlab编写的程序做成com组件

40、,供其他语言调用。该方法实现简单,通用性强,而且几乎可以使用Matlab的任何函数(注意:不支持脚本文件,脚本文件使用时要改为函数文件),因此在程序较大、调用工具箱函数或调用函数较多时推荐使用,这也是Matlab公司(Matlab公司就是Mathworks公司)推荐的使用方法。 五、使用matcom工具详细介绍这是个第三方控件,很小(8M多),原本属于mathtool公司,后来被Mathworks公司合并了,使用该工具可以将m脚本文件和m函数转化成相同功能的CC+文件,相比其它方法使用matcom具有如下优点: 转换过程简单(由matcom工具自动实现),容易实现; 可以方便的生成动态链接库文

41、件(dll)和可执行文件(exe); 不仅可以转换独立的脚本文件,也可以转换嵌套脚本文件; 设置环境后,可以使用Matlab的工具箱函数; 但matcom也有以下缺乏: 对struct等类的支持有缺陷,对class数据类型; 局部绘图语句无法实现或得不到准确图象,尤其是三维图象; 因此在不涉及到三维做图以及m文件不大的情况下推荐使用。以上几种方法可以单独使用,也可以混合使用。这里简单的介绍了VC和matlab接口的几种方法,读者可以根据需要选择适合自己的方法。需要说明的是上以上几种方法并不是相互独立的,而是有相互联系的,比方使用C/C+函数库与使用编译器,对于实现相同功能的程序,直接调用函数库

42、与使用编译器最终生成的代码可能相差不大,只不过一个是直接在VC中写C/C+代码,一个是在Matlab中写好m代码,然后通过编译器将m代码转化成相同功能的C/C+代码,而在转化的过程中也需要调用相应的C/C+函数库文件。在后面的文章中将从第五种方法开始进行详细介绍,其他的方法只作简单介绍。 3.1.2、Matcom简介Matcom是Mathworks公司推出的第一个由Matlab到C+的编译开发软件平台,它的可视化界面,方便丰富的调试功能和对数学库的强大支持受到广阔技术人员的重视。现在的最高版本为Matcom4.5。Matcom是一个能将M文件转化成相同功能C+代码的工具。相比Matlab自带的

43、编译器Compiler,用Matcom转化代码要简单和方便得多。Matcom是一个十分有用的.m文件翻译器(Replacement),它的主要优点我认为有以下几点:1 它提供了matlab中.m文件与其他高级语言的接口,使.m文件可以编译为脱离matlab环境独立执行的可执行性程序,这样 提高了代码的复用率 提高了代码的执行速度 使纯文本的.m文件变为二进制的可执行程序,增加了知识保护的平安性 2它提供了近千个数学函数,对于其他高级语言编译器来说,提供了一个丰富的数学库,根本上在matlab上能用的常用函数都可以在高级语言中直接调用。 数学函数主要包括: 矩阵属性函数 矩阵生成函数 矩阵操作函

44、数 矩阵变换函数 数学函数 特殊函数 数值函数 串函数 绘图函数 颜色函数 函数函数 存盘及读文件 系统资源函数 系统操作函数 判断函数(Is函数族) 付氏变换 等等3 提供了.m文件的方便快捷的编译调适环境,可以step, watch,breakpoint等各种调试手段。 Matcom的工作原理 Matcom的矩阵运算局部是基于一个名为Matrix的C+数学库,这个库提供了绝大多数的关于矩阵类、矩阵操作函数、数值计算函数、数学函数等的定义,在Matcom中是以lib目录下的*.lib以及windows/system/对应名称的dll文件提供的。Matcom的另一大局部就是图形局部,它是用一种

45、非常流行的绘图OCX控件Teechart来实现的,这种控件对于一般的绘图功能都可以实现,但也存在一定缺陷。在Matcom4.5版本中使用的是TeeChart3.0。绘图函数功能主要在lib文件和window/system/ago*.dll中定义的。Matcom编译.m文件是先将.m文件按照与matcom的Cpp库的对应关系,翻译为CPP源代码,然后用对应版本的C编译器将该CPP文件编译为exe或dll文件,所以,在第一次运行时让指定C Complier的路径是必需的,否那么将无法编译。指定好的C Complier的信息写在Matcom/bin/matcom.ini文件中。Matcom的缺乏Ma

46、tcom并不是全能的,对于大多数Matlab函数都可以进行CPP实现,但有些由于其功能有限,只能期待以后的版本来不断补充了。总的来说,matcom有以下缺欠: 1.对class数据类型局部支持2.eval,feval,clear等语句不能在C中实现(如果实现的话,一个文本编辑器就可以成为 一个matlab了:)3.图形窗口有些不仅如人意,如fill3,hide等语句无法实现,surf等语句也无法画出象 matlab中哪样精细的图像来,特别是色彩比较难看.3.2 Matcom 的安装Matcom的安装:安装Matcom前要已求安装VC6.0推荐将vc6.0安装在c盘,否那么可能会出现意想不到的错

47、误而导致无法运行。安装步骤:1. 在安装时需要你输入口令,Matcom4.5的口令为FREE-4.5-1193046-80295111 。2. 在安装过程中出现选择编译器对话框,选择“是。3.出现选择是否安装Matlab时,选“否。安装完成。安装完成后测试:安装完成后,启动界面MIDEVA。MIDEVA集成开发环境包括命令行窗口、变量列表窗口、命令列表窗口和编译链接信息窗口等几局部,并有详细的帮助文档。Matcom命令输入方法与Matlab相同。如果安装在中文版操作系统时,输入命令前加一空格。测试时,随便输入两个数字让其计算,不出现异常那么安装成功。说明:1.如果按照此步骤安装没有成功,可尝试

48、将vc卸载后重新将VC60安装在C盘。 2.在第2次启动mideva时,如果出现让你再次输入口令的对话框如以下列图,可尝试以下方法解除此限制:按HKEY_CURRENT_USER/Software/MathTools/Matcom.50/License找到mideva在window的注册表中的位置。在其下面添加一个键,键名默认,键值为FREE-4.5-1193046-80295111 om.50License然后再在其下面添加一个键,键名默认,键值为FREE-4.5-1193046-80295111 你如果删除它,再次启动matcom的时候,就会再次询问口令。 3.3 Visual Matco

49、m开发环境的配置3.3.1 Visual Matcom开发环境的配置一在这里介绍一种将Matcom集成到VC环境的方法,即安装Visual Matcom的方式,这种方式操作更加简便易行,只需要熟悉Matlab编程,经过简单的步骤就可以轻松实现VC环境中调用Matlab。Visual Matcom开发环境的配置步骤:1拷贝binusertype.dat文件指Matcom的安装路径到CommonMSDev98Bin目录指VC的安装路径)下。2运行Visual C+,从菜单条中选择Tools/Customize/Add-ins and Macro Files,选择Browse,改变文件类型为Add-

50、ins(.dll),选定binmvcide.dll文件,确定。图13这样,可以在Visual C+的开发环境中看到一个如图1所示的Visual Matcom工具栏,说明安装成功。运行环境:Win2000、Matlab70、Matcom4.5、Visual C+6.03.3.2 VC与Matcom解线性方程组比照在配置好Visual Matcom开发环境后,本节介绍,使用单纯VC与 VC和Matcom混合编程方式分别求解线性方程组。如:解以下线形方程组1*x + 2*y + 3*z = 374*x + 5*y + 6*z = 857*x + 8*y + 1*z = 69在C+控制台程序中单纯使用C+语言编写求解线性方程组的代码为:结果如下:下面介绍使用VC与matcom混合编程方式来完成该方程组的求解:1Matlab运行环境中编写程序equation.m,并将其保存。其代码如下:%equation 求解线性方程组的解%线性方程组形如:A*X = Bfunctio

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论