MATLAB与VC混合编程指导书 .doc

上传人:来看看 文档编号:5090155 上传时间:2020-02-01 格式:DOC 页数:84 大小:1.29MB
返回 下载 相关 举报
MATLAB与VC混合编程指导书 .doc_第1页
第1页 / 共84页
MATLAB与VC混合编程指导书 .doc_第2页
第2页 / 共84页
MATLAB与VC混合编程指导书 .doc_第3页
第3页 / 共84页
MATLAB与VC混合编程指导书 .doc_第4页
第4页 / 共84页
MATLAB与VC混合编程指导书 .doc_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《MATLAB与VC混合编程指导书 .doc》由会员分享,可在线阅读,更多相关《MATLAB与VC混合编程指导书 .doc(84页珍藏版)》请在三一文库上搜索。

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的可视化是数据的可视化,是基于数学的运算和逻辑的。它是由数值、数据、 函数等数学元素产生图形和动画等可视化效果,图形等根据数的变化而变化,故而可以通过数值、逻辑、运算的改变而轻松改变可视化效果。同样,通过

6、Matlab 的可视化效果,可以从一堆杂乱的离散数据中去观察和发现数据间的关系,感受由图形所传递的数据间的内在本质,直观的去理解数。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、对象:

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

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

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

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

13、个和多个属性的当前值, 最常用的调用语法为: get(handle,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的可视

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

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

16、形等。绘图指令Plot,plot3创建的就是图形对象。 块(Rectangle):在轴对象下的“块”对象为带有边缘的多边形,绘图指令fill,fill3和contour3创建的是快对象。 文本(Text):在轴对象下的“文本”对象表示字符串,title,xlabel,ylabel,gtext,text等都可以创建文本对象。光照(Light):在轴对象下的“光照”对象设置光源,以影响块和表面对象,用户可以设置光源属性控制颜色,位置和方向等。表面对象(surface)在轴对象下由绘图指令做的二三维图形都是表面对象。菜单对象和控件对象是Matlab的特色之处,是生成人机交互界面的关键,我们特别介绍:

17、1、界面菜单:在缺省情况下,在Matlab图形窗上总有一个顶层菜单条,我们可以看到,它包含文件(File)等五个标准菜单项。我们可以用Menubar属性的两个属性值nonefigure来控制它的隐藏恢复。我们也可以根据自己的需要设计自己的菜单,通过uimenu指令来创建,格式如下:h_menu=uimenu(h_parent,propertyname,propertyvalue,)注:菜单也可作父对象,创建子菜单。2、控件对象除菜单外,控件是另一种实现用户与计算机交互的主要途径。有按键、文本框等10种表现形式,也就是类型。通过uicontrol指令创建。 格式如下:h_c=uicontrol(

18、h_parent,pn,pv,.)注:控件的类型由style属性的sv字符串决定。见下图:属性值SV控件名称特征及其使用场合pushbutton单功能按键上带文字标识的矩形;单功能选择用radiobutton无线电选择按键带文字标识的小圆圈,开关状态用圈内黑白点表示。多项“互斥”功能选择用。togglebutton双位按键上带文字标识的矩形,开关状态用凹凸表示。两状态切换选择用。checkbox检录框带文字标识的小方框;方框用对号表示选中,多项“互容”功能选择用listbox列表框带垂直滚动条的文本框,多项“互容”功能选择用。popupmehu弹出框带操纵键的长方形文本框。多项“互斥”功能选择

19、用。slider滑动键呈长方形;中间游标、两端带滑动操纵;可连续步进取值。edit text可编辑文本框凹形方框,可使合法的MATLAB语句,程序输入运行。可随意输入运行指令程序。static text静态文本框凹形方框,其中文字纯粹做注释说明用。frame控件区域框为醒目,在图面上,用方框圈定用户控件所在区域。控件的具体应用,可在下面实例中找到。2.2 Matlab动画功能实现(一)Matlab动画功能介绍Matlab提供了丰富的作图函数和图形处理指令来实现其可视化功能。有关静态图形的内容在这里就不详细叙述了,仅仅对动态图形的有关内容作以总结。首先,动态图形的实现是以静态图形为基础得。原则上

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

21、=getframe 将图形的数据向量存放入构架数组中movie(m,k,t) 以每秒t帧的速度播放m中的画面k次。4. 实时动画:保持图形中绝大部分的象素颜色不变,只更新部分象素的颜色,构成运动图象。一般需借助于循环的函数体来实现。关键点:运动对象的擦除属性“EraseMode”的定义。 擦除属性“EraseMode”的可选属性值可选值 含义normal计算整个画面的数据,重画整个图形。这种模式产生的图形最准确,但最最慢。backgrund将旧对象的颜色变为背景颜色,实现擦除。这种模式将损坏被擦除对象下面的对象。但新对象会正确着色。none不做任何擦除。xor只画与屏幕颜色不一致的新对象点;只

22、擦除与屏幕颜色不一致的原对象点。该方式不损坏被擦除对象下面的对象。(常用)(二)Matlab动画制作函数的分析Matlab的动画制作函数有的是以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并在程序中以%标

23、识作以解释分析。function comet(x, y, p)%COMET Comet-like trajectory.% COMET(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(s

24、in(t)-sin(tan(t)% See also COMET3.% Charles R. Denham, MathWorks, 1989.% 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 na

25、rgin 2, y = x; x = 1:length(y); end(3) if nargin =3,(10) head = line(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

26、,co(1,:),marker,o,erase,xor, . xdata,x(1),ydata,y(1);(15) body = line(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 =

27、2:k+1(21) j = i-1:i;(22) set(head,xdata,x(i),ydata,y(i)(23) set(body,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% 彗星的头,身体和尾部运动至头到达目

28、的地时。(33) for i = m+1:m+k(34) j = i-1:i;(35) set(tail,xdata,x(j-k),ydata,y(j-k)(36) drawnow(37) end% 尾部运动到目的地。几点说明:该函数是以M函数的形式编写的,但是它的具体运行原理和思想是实时动画。通过对函数spinmap的分析(由于篇幅我们省去该函数的分析),也可以知道色图的变幻函数也是由实时动画的思想,以M函数的形式编写的。彗星状轨线函数comet实际上是一个多对象的动画函数,因为,它有彗星的头,身体和尾部三个对象的运动。我们也根据它的原理和思想去研究多对象的动画函数。(三)Matlab的多对

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

30、针对数组的操作,可以将数组拆分调用,以达到交互的效果。对于实时动画自然也可以,因为它是针对运动具体细节的操作,不但可与自身一起交互运动,如comet函数中彗星的头,身体和尾部三个对象的运动。还可以与影片动画交互运动。后面给出实例。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

31、=zzz;end %设置三轴之比的的缺省值Z=sum(zb);ZZ=max(zb);xx=3.*zb(1)/Z;yy=3.*zb(2)/Z;zz=3.*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(x

32、2,y2,g,x3,y3,r);%产生圆线向量并画线axis(-2 2 -2 2);%固定坐标axis offxa=randn(1,18);xb=randn(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

33、.9);%变换星群 axis(-2 2 -2 2); hold on mmm(:,i)=getframe; %将图片存入购架数组mmmendh2=line(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

34、(i);%变换坐标位置 drawnow; i=i+1; s=s+1; if s=4 s=0; mm=mmm(l); l=l+1; movie(mm,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;点击菜单“文件一般实例”得到

35、:点击菜单“色彩变幻”得到:点击菜单“影片放映”得到:点击菜单“实时动画”得到:点击菜单“彗星轨迹图实例1”得到:(运动中)点击菜单“彗星轨迹图卫星回归”得到:点击菜单“文件多对象实例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、Matco

36、m 的简介3.1.1、Matlab与VC混合编程的实现方法在前面的介绍中,只是简介绍了Matlab可视化程序设计的一个简单例子,从上个例子可以看出Matlab可视化编程是很复杂的,在以后的文章中,我们将会介绍Matlab与VC混合编程的方法。Matlab与VC混合编程的方法有多种,为了对混合编程有一个大概认识,将常用的几种方法中介绍一下:一、通过Matlab Engine方式Matlab Engine是指一组Matlab提供的接口函数,支持C语言, Matlab Engine采用C/S(客户机/服务器)模式,Matlab作为后台服务器,而C程序作为前台客户机,通过Windows的动态控件与服务

37、器通信,向Matlab Engine传递命令和数据信息,从Matlab Engine接受数据信息。用户可以在前台应用程序中调用这些接口函数,实现对Matlab Engine的控制。采用这种方法几乎能利用Matlab全部功能,但是需要在机器上安装Matlab软件,而且执行效率低,因此在实际应用中不采用这种方法,在软件开发中也不可行,我认为适合个人使用或做演示用,因此只作简单介绍。二、直接调用Matlab的C/C+数学函数库Matlab中提供了可以供C/C+语言调用的C/C+数学函数库,其中包含了大量用CC+语言重新编写的Matlab数学函数,这些函数涉及到线形代数、数值分析、傅立叶变换、多项式计

38、算、解微分方程等,并且函数库中提供了大量各种矩阵操作函数,在VC中可以直接使用这些函数,通过这些函数可以在VC中方便的实现在Matlab中矩阵运算功能。可以看出用这种方法可以很灵活的调用Matlab来编写应用程序,但要求读者对CC+语言比较熟悉,可以看出使用这种方法调用Matlab的工具箱函数有很大困难。适合对CC+语言比较熟悉的用户使用。三、用Matlab自带的Matlab CompilerMatlab Compiler的作用是将m文件转化成C/C+代码(也就是通常所用的mcc命令),这种源代码需要用C/C+编译器编译连接成独立应用程序,在将m文件转成独立应用程序的过程中生成的C/C+文件,

39、原则上是可以被其它的C/C+代码调用的,编译器可以通过设置mcc命令的选项,将m文件编译成动态链接库文件、C/C+文件、可执行文件等一系列文件。到matlab R21.1为止,Matlab Compiler的m程序转换成C/C+代码功能有很多限制: 不能转换脚本m文件,只能转换m函数; 不能使用matlab对象; 不能用input或者eval操作matlab空间变量; 不能动态地命名变量,然后用load或者save命令来操作; 不能处理具有嵌套调用其他m文件的m文件; 不能使用MATLAB内联函数; 四、使用matlab的combuilde工具 COM是component object mod

40、ule的简称,它是一种通用的对象接口,任何语言只要按照这种接口标准,就可以实现调用它。matlab6.5新推出来的combuilder就是把用matlab编写的程序做成com组件,供其他语言调用。该方法实现简单,通用性强,而且几乎可以使用Matlab的任何函数(注意:不支持脚本文件,脚本文件使用时要改为函数文件),因此在程序较大、调用工具箱函数或调用函数较多时推荐使用,这也是Matlab公司(Matlab公司就是Mathworks公司)推荐的使用方法。 五、使用matcom工具(详细介绍)这是个第三方控件,很小(8M多),原本属于mathtool公司,后来被Mathworks公司合并了,使用该

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 绩效管理


经营许可证编号:宁ICP备18001539号-1