第六章 MATLAB编程.ppt_第1页
第六章 MATLAB编程.ppt_第2页
第六章 MATLAB编程.ppt_第3页
第六章 MATLAB编程.ppt_第4页
第六章 MATLAB编程.ppt_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

1、第六章 MATLAB编程,6.1 编程入门 6.2 函数(命令)文件概念 6.3 转向语句 6.4 循环语句,我们已经知道,MATLAB的每一个命令是一个子程序,我们可以把它当作一个具有相当功能的集成块。如果我们将这些集成块有机地组合在一起,将产生相当强大的功能,这就是编制程序。显而易见,这样编制的程序结构简单,编程方便,特别是对具有C、FORTRAN编程经验的使用者。我们还可以很方便地对MATLAB命令集进行扩充,即我们可以编制自己的一套算法程序并命名为一个函数命令,这正是MATLAB的优点之一。我们可以在MATLAB网站上看到世界各地的各学科的科学工作者贡献的各种子命令。 MATLAB程序

2、具有C、FORTRAN 的结构,如循环结构、条件转向结构等等,对于变量来说也分局部变量和全局变量。在数学建模竞赛中,我们是将我们的各项实验和探索最终编制成程序进行计算的。在这一章我们将介绍编程的基本概念和编程的步骤,特别关注在程序中使用各种数据的输入和输出的命令,如何将目前流行的关系数据库的数据读入到我们的MATLAB程序中,以及将计算结果在输出到这些数据库中的方法,这在数学建模竞赛中是非常重要的处理数据的方法。,MATLAB的每一个命令或者说函数事实上是一个子程序,我们可以把它当作一个具有相当功能的集成块。如果我们将这些集成块有机地组合在一起将产生相当强大的功能,这就是编制程序。 6.1 编

3、程入门 我们来编程序,并把它定义成一个MATLAB的函数(命令)。 【例6.1.1】求两求相交的交线,并作两球和交线图形。 解题思路:首先建立两球的方程,利用solve命令求解交线方程的的公式,然后利用作图命令将三个图形作在一起。,(1)编写M脚本文件的步骤,l 点击MATLAB指令窗工具条上的New File图标 ,就可打开如图6.1.1所示的MATLAB文件编辑调试器MATLAB Editor/Debugger。其窗口名为untitled ,用户即可在空白窗口中编写程序。比如输入如下一段程序,% 2004年四月二十六日,两球相交作图。 syms a b x y a1 b1 t c=2.1

4、% 在x轴平移的参数 S=solve(x2+y2=1,(x-c)2+y2=2) % 解平面两圆方程 u=subs(S.x(1) v=subs(abs(S.y(1) t=linspace(0,2*pi,100) u1(1,1:100)=u % 产生球体数据 X,Y,Z=sphere(30); X1=sqrt(2)*X+c Y1=sqrt(2)*Y Z1=sqrt(2)*Z mesh(X,Y,Z),hidden off;hold on axis equal,axis(-1,3.5,-2.5,2.5,-1.5,1.5) mesh(X1,Y1,Z1),hold on plot3(u1,v*sin(t)

5、,v*cos(t),linewidth,6);hold on,X1=sqrt(2)*X+u Y1=sqrt(2)*Y Z1=sqrt(2)*Z mesh(X,Y,Z),hidden off; hold off,l点击运行工具条图标 ,在第一次运行时将弹出的Windows标准风格的“保存为”对话框中,选择保存文件夹,键入新编文件名(如example1),点动【保存】键,就完成了文件保存并出现如下提示界面。,直接电击OK便开始运行,如果没有语法等问题,则结果图将显示出来。如果有错误会听见嘟的一声响,这时打开命令窗口我们可以看见有红色的提示符,告诉你在程序的第几行有什么错误。我们可以检查修改直到顺利

6、运行。分段函数的图形见下图,6.1.1 MATLAB 函数文件 我们可以把上面的程序稍微修改一下让它变为函数的形式,这样我们就可以象使用其他命令一样来使用这个命令了。我们可以在M文件中加入这些函数命令,就象C、FORTRAN等高级语言中的子程序,从而大大提高了程序的效率和可读性。函数程序必须以关键字function开头。 【例6.1.2】将上面的两球交线的作图m文件改成函数文件。 对上面的程序只要稍加修改我们就可以产生一个MATLAB函数文件了,即在上面的程序中加一行函数说明关键字function,在程序的结尾加关键字end见下面的程序。,function H=two_ball1(c) % 2

7、004年四月二十六日,两球相交作图。 syms a b x y a1 b1 t %c=2.1 % 在x轴平移的参数 S=solve(x2+y2=1,(x-c)2+y2=2)% 解平面两圆方程 u=subs(S.x(1) v=subs(abs(S.y(1) t=linspace(0,2*pi,100) u1(1,1:100)=u X,Y,Z=sphere(30); X1=sqrt(2)*X+c Y1=sqrt(2)*Y Z1=sqrt(2)*Z mesh(X,Y,Z),hidden off;hold on axis equal,axis(-1,3.5,-2.5,2.5,-1.5,1.5) mes

8、h(X1,Y1,Z1),hold on plot3(u1,v*sin(t),v*cos(t),linewidth,6);hold on,给程序加一个头,X1=sqrt(2)*X+u Y1=sqrt(2)*Y Z1=sqrt(2)*Z mesh(X,Y,Z),hidden off; hold off end,这里: function H=two_ball1(c) 定义了一个函数名two-ball1,小括号里的变量为输入参数c,为两球的距离。 然后将该修改过的程序保存为程序名为two-ball1的MATLAB文件,我们事实上已经为MATLAB的命令集合中又添加了一个新的命令,它可以向其他命令一样的

9、使用。,给程序加个尾,方法1: 在命令窗口键入: c=2.2 two-ball1(c) 就可以得到和上例一样的结果了。事实上我们定义了一个MATLAB的新命令. 方法2:例如编一段小程序,调用该函数。 c = 2; two-ball1(c) 运行该段程序,也可以产生上面一样的结果。,6.1.2 m脚本文件和函数文件 上面我们介绍了两种类型的MATLAB文件,它们都是用MATLAB语言要素汇编而成,但是其作用却有本质的不同, m脚本文件:为完成某计算任务而编写的程序称脚本文件。 函数文件:以function开头的为完成某项任务的程序称为函数文件。 以下表格6.1.1列出它们的不同和相同之处。,从

10、中我们可以看出,m脚本文件有些象FORTRAN语言里的主程序,而函数文件的功能很象SUBROUTINE子程序,可以被其他程序调用。,6.2 循环和转向语句,像其他的高级语言一样,我们也可以使用循环和转向语句。这样我们就可以将MATLAB的各种函数有机地组成效率非常高的复杂运算了。由于循环和转向语句在FORTRAN或C语言中都有详细的介绍,MATLAB中的循环和转向语句功能基本一样,仅仅是语言略有不同,因此仅以实例简单介绍。 6.2.1 for 循环语句 for循环语句的语法结构为: for x = 循环范围 循环体 end 其中循环体可以是一个命令,也可以是一端源程序。,【例6.2.1】一个简

11、单的for循环示例。 for i=1:10; % i依次取1,2,10。 x(i)=i; % 对每个i值,重复执行由该命令构成的循环体。 end; x % 要求显示运行后数组x的值。 x = 1 2 3 4 5 6 7 8 9 10 6.2.2 while循环语句 while循环语句的语法结构为: while 表达式 命令集合 end,【例6.2.2】Fibonacci数组的元素满足Fibonacci 规则: , 且 。 现要求该序列中第一个大于10000的元素。,a(1)=1;a(2)=1;i=2; while a(i)=10000 a(i+1)=a(i-1)+a(i); %当现有的元素仍小

12、于10000时,求解下一个元素。 i=i+1; end; i,a(i), i = 21 ans = 10946,6.2.3 if else end分支结构 if-else-end分支结构的语法为: if 表达式 命令集合 end,或者 if 表达式1 命令集合 elseif 表达式2 命令集合 . else 命令集合 end,或者 if 表达式 命令集合 else 命令集合 end,【例6.2.3】一个简单的分支结构。 cost=10 number=12 if number8 sums=number*0.95*cost; end sums sums = 114.0000,6.2.4 switc

13、h-case 结构 switch-case分支结构的语法为: switch ex ex为变量或字符串变量,case test1 命令集合1 case test2 命令集合2 case testk 命令集合k end,【例6.2.4】学生的成绩管理,用来演示switch结构的应用。 clear; %划分区域:满分(100),优秀(90-99),良好(80-89),及格(60-79),不及格(60)。 for i=1:10 ai=89+i bi=79+i ci=69+i di=59+i end c=d,c; Name= Jack,Marry,Peter, Rose, Tom;%元胞数组 Mark=

14、72,83,56,94,100 Rank=cell(1,5); %创建一个含5个元素的构架数组S,它有三个域。 S=struct(Name,Name,Marks,Mark,Rank,Rank); %根据学生的分数,求出相应的等级。,for i=1:5 switch S(i).Marks case 100 %得分为100时 S(i).Rank=满分;%列为满分等级 case a %得分在90和99之间 S(i).Rank= 优秀; %列为优秀等级 case b %得分在80和89之间 S(i).Rank= 良好; %列为良好等级 case c %得分在60和79之间 S(i).Rank= 及格;

15、 %列为及格等级 otherwise %得分低于60。 S(i).Rank=不及格; %列为不及格等级 end end; %将学生姓名,得分,登记等信息打印出来。 disp(学生姓名 , 得分 , 等级);disp( ) for i=1:5; disp(S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank); end;,学生姓名 得分 等级 Jack 72 及格 Marry 83 良好 Peter 56 不及格 Rose 94 优秀 om 100 满分,6.2.5 try-catch 结构 try catch 结构的语法为: t

16、ry 命令集合 catch 命令集合 end,【例6.2.5】try-catch结构应用实例。 clear N=4 A=magic(3); %设置3行3列矩阵A。 try A_N=A(N,:),%取A的第N行元素 catch A_end=A(end,:), %如果取A(N,:)出错,则改取A的最后一行。 end lasterr%显示出错原因 A_end = 4 9 2 ans = Index exceeds matrix dimensions.,6.3 输入和输出,MATLAB程序也象其他的各种高级语言一样具有输入和输出命令,数据的输入和输出是程序的重要部分。MATLAB有非常丰富的输入命令,

17、可以解决各种格式数据的输入和输出,除MATLAB本身的数据文件和文本格式的数据文件外,还包括流行的excel、access和大型数据库格式的数据文件。 6.3.1 mat格式文件的产生 以mat为扩展名的数据文件是MATLAB格式的数据文件。可以利用save命令产生mat格式的文件,也可以产生其他格式的文件。save命令的语法为:,save save filename save filename var1 var2 . save . option save(filename, .),save:将工作空间的所有内存变量保存到当前目录中去,并名为matlab.mat,(系统内定)。 save fi

18、lename:将工作空间的所有内存变量保存到当前目录中去,并名为filename.mat。 save filename var1 var2 .:将工作空间指定的变量var1 var2 保存到当前目录中去。 option:选择文件的保存格式。 选择项见下表:,【例6.3.1】利用save命令产生各种格式的数据文件。 u=magic(6); v=rand(5); save my_data u,v % 将变量u,v保存到mat格式的文件中去 save my_ascii.dat -ascii u,v % 将变量保存到ascii格式的文件中去。 执行上面的程序后可以在当前目录中看到这两个文件,注意它们的

19、扩展名。见图6.3.1,6.4 MATLAB中的规范化编程,一个M文件应该具有可读性,或者说应该具有一定的格式。例如尽量用注释语句说明该M文件计算的目的,输入变量和输出变量的含义以及开发的日期和最后的版本等,这样既便于同行之间的沟通又便于过了一段时期后阅读。而每一程序段前也可以用注释语句说明该段的功能,如果必要也可以在每一行后面加注释。函数程序具有广泛的应用,特别是它可以作为MATLAB命令来使用,因此应该特别注意它的编程的规范性。,6.4.1 函数m文件的基本格式 我们新编写的m函数文件是对MATLAB命令集的扩充,因此该命令应该具有和其他命令一样的帮助功能,所有这些帮助信息都应该象其他命令

20、一样能用相同的方法查询,而这些帮助内容都应该写在函数程序的固定位置上。典型的函数M文件应该有如下的结构:,(1) 函数定义行(The Function Definition Line) 它位于函数文件的第一行,以MATLAB的关键字function开头,函数名及函数的输入输出参数都在这一行进行说明。例如: function xz,y,z = peaks(arg1,arg2) 这里: function:为定义函数的关键子 xz,y,z:方括号里的变量为输出变量,函数计算产生的结果。 peaks:为定义的函数名 (arg1,arg2):小括号括起来的变量为输入变量,函数计算时用到的参数,(2) H

21、1行(the first help text line) 紧跟函数声明行之后以%号开头,即注释行。该行包含大写的函数名;使用该函数的各种说明、函数的功能等等。该行供look for 在命令窗口进行查询,同时也可用help进行查询。,(3) 在线帮助文本区(Help text) 在H1行后面以%号开头,较为详细的函数使用说明。包括函数的每个参数的说明,函数的调用规则等等。,(4) 备忘录 在线帮助文本的下一行以%开头,记录该文件的开发过程,如重点难点,修改的日期和最后定稿的日期等等。,(5) 函数体(Function body) 即这个函数的命令集合,或称程序体。,【例6.3.1】我们来看MAT

22、LAB的一个规范化的M函数文件peaks,这是一个产生peaks数据并作图的函数或称MATLAB的一个命令。 function xz,y,z = peaks(arg1,arg2); %PEAKS A sample function of two variables. % PEAKS is a function of two variables, obtained by translating and % scaling Gaussian distributions, which is useful for demonstrating % MESH, SURF, PCOLOR, CONTOUR,

23、 etc.,% There are several variants of the calling sequence: % % Z = PEAKS; % Z = PEAKS(N); % Z = PEAKS(V); % Z = PEAKS(X,Y); % % PEAKS; % PEAKS(N); % PEAKS(V); % PEAKS(X,Y); % % X,Y,Z = PEAKS; % X,Y,Z = PEAKS(N); % X,Y,Z = PEAKS(V); % % The first variant produces a 49-by-49 matrix. % The second vari

24、ant produces an N-by-N matrix. % The third variant produces an N-by-N matrix where N =,length(V). % The fourth variant evaluates the function at the given X and Y, % which must be the same size. The resulting Z is also that size. % % The next four variants, with no output arguments, do a SURF % plot

25、 of the result. % % The last three variants also produce two matrices, X and Y, for % use in commands such as PCOLOR(X,Y,Z) or SURF(X,Y,Z,DEL2(Z). % % If not given as input, the underlying matrices X and Y are % X,Y = MESHGRID(V,V) % where V is a given vector, or V is a vector of length N with % ele

26、ments equally spaced from -3 to 3. If no input argument is % given, the default N is 49. % CBM, 2-1-92, 8-11-92, 4-30-94. % Copyright 1984-2002 The MathWorks, Inc. % $Revision: 5.10 $ $Date: 2002/04/08 20:04:50 $,if nargin = 0 dx = 1/8; x,y = meshgrid(-3:dx:3); elseif nargin = 1 if length(arg1) = 1

27、x,y = meshgrid(-3:6/(arg1-1):3); else x,y = meshgrid(arg1,arg1); end else x = arg1; y = arg2; end z = 3*(1-x).2.*exp(-(x.2) - (y+1).2) . - 10*(x/5 - x.3 - y.5).*exp(-x.2-y.2) . - 1/3*exp(-(x+1).2 - y.2); if nargout 1 xz = x; elseif nargout = 1,xz = z; else % Self demonstration disp( ) disp(z = 3*(1-

28、x).2.*exp(-(x.2) - (y+1).2) . ) disp( - 10*(x/5 - x.3 - y.5).*exp(-x.2-y.2) . ) disp( - 1/3*exp(-(x+1).2 - y.2) ) disp( ) surf(x,y,z) axis(min(min(x) max(max(x) min(min(y) max(max(y) . min(min(z) max(max(z) xlabel(x), ylabel(y), title(Peaks) end,当我们在命令行中键入: help peaks 回车键 则产生以下帮助信息,它们正好是peaks函数的在线帮助

29、中的注释内容。 PEAKS A sample function of two variables. PEAKS is a function of two variables, obtained by translating and scaling Gaussian distributions, which is useful for demonstrating MESH, SURF, PCOLOR, CONTOUR, etc. There are several variants of the calling sequence: Z = PEAKS; Z = PEAKS(N); Z = PEA

30、KS(V); Z = PEAKS(X,Y); PEAKS; PEAKS(N); PEAKS(V); PEAKS(X,Y);.,6.4.2 子函数和私密函数(Subfunctions ,function m = median(v,n) % 计算中位数的子函数 % Calculate median. w = sort(v); if rem(n,2) = 1 m = w(n+1)/2); else m = (w(n/2)+w(n/2+1)/2; end,将m函数存到当前目录中,并在命令出口键入: u = rand(1,100) % 产生一个100元素的随机数数组 a,b = newstats(u)

31、% 调用函数计算均值和方差 这里主函数将u作为输入变量,然后调用两个计算子函数,并将计算结果传给主函数作为输出变量。 注意:当我们用help语句对主函数寻求帮助时,看不见自函数的帮助内容,而只能看见主程序中的帮助内容。,2) 私密函数(Private Functions) 当我们在开发大型的应用软件时,我们的软件工程包括了大量的函数和子函数,在这么多的文件中,我们可以按照调用层次分别方在父目录和子目录中。例如父目录名为newmath,而子目录名为private。那些存放在private目录中的函数就称为私密函数,只有那些在父目录中的函数才能调用这些私密函数。或者说私密函数对不在父目录中其他函数

32、实施了屏蔽。这有时是非常有用的,因为私密目录中的函数名可以和其他目录中的文件名一样,但在父目录中的函数首先调用私密目录中的同名文件。,6.5 界面设计与编程 界面编程已经成为程序编制重要任务之一,无论是软件开发还是各种实验程序的设计都离不开界面设计与编程。 7.4.1 图形用户界面的设计原则和一般步骤: 一、设计原则 由于要求不同,设计出来的界面也就千差万别。但是,自从人们开始设计图形界面以来,界面设计的评判标准却没有太大的变化。简单说来,一个好的界面应遵循以下三个原则:简单性(Simplicity)、一致性(Consistency)、及习常性(Familiarity)。 (1)简单性 设计界

33、面时,应力求简洁、直接、清晰地体现出界面的功能和特征。那些可有可无的功能,应尽量删去,以保持界面的整洁。设计的图形界面要直观,为此应多采用图形,而尽量避免数值。设计界面应尽量减少窗口数目,力避在不同窗口之间进行来回切换。,(2) 一致性 所谓一致性有两层含义:一是读者自己开发的界面风格要尽量一致;二是新设计的界面要与其他已有的界面风格不要截然相左。这是因为用户在初次使用新界面时,总习惯于凭经验进行试探。比方说,图形显示区常安排在界面左边,而按键等控制区被排在右侧。,(3)习常性 设计新界面时,应尽量使用人们所熟悉的标致和符号。用户可能并不了解新界面的具体含义及操作方法,但他完全可以根据熟悉标致

34、作出正确猜测,自学入门。,(4)其他考虑因素 除了以上对界面的静态要求外,还应注意界面的动态性能。如果面对用户操作的响应要迅速(Immediate)、连续(Continous);对持续时间较长的运算,要给出等待时间提示,并允许用户中断运算。,7. 4. 2 界面设计的步骤 (1)分析界面所要求实现的主要功能,明确设计任务。 (2)在稿纸上绘出界面草图,并站在使用者的角度来审查草图。 (3)按构思的草图,上机制作(静态)界面。并检查之。 (4)编写界面动态功能的程序,对功能进行逐项检查。 例 7.4.1 作一个界面,有一个输入框,一个输出框和两个动作框。对输入的字符转为大写或小写。本程序包括:

35、(1)用figure命令建立带有菜单的图形界面 (2)利用uicontrol()命令建立两个编辑筐和两个按纽 (3)利用callback属性将这些图形目标有机的连在一起,h0=figure(toolbar,none,. position,200 150 350 250,. name,实例7.4.1); % 建立带菜单的图形父界面 f=Please input the letter; % 字符串在第一图形框中显示 % 调用命令,将小写的字符串变为大写并显示在第二编辑框中 huidiao1=. g=upper(f);,. set(h2_edit,string,g),. ; % 调用命令,将大写的字

36、符串变为小写并显示在第二编辑框中 huidiao2=. g=lower(f);,. set(h2_edit,string,g),. ;,% 创建第一编辑框,可以任意输入字符串。 h1_edit=uicontrol(gcf,style,edit,. position,100 200 100 50,. HorizontalAlignment,left,. string,Please input the letter,. callback,f=get(h1_edit,string);,. background,w,. max,5,. min,1); % 创建第二编辑框,可以显示字符串。 h2_edi

37、t=uicontrol(gcf,style,edit,. HorizontalAlignment,left,. position,100 100 100 50,. background,w,. max,5,. min,1);,% 创建第一按纽框,调用前面定义的函数huidiao1,即小写变大写 h1_button=uicontrol(gcf,style,pushbutton,. string,小写变大写,. position,100 45 100 20,. callback,huidiao1); % 创建第一按纽框,调用前面定义的函数huidiao1,即小写变大写 h2_button=uico

38、ntrol(gcf,style,pushbutton,. string,大写变小写,. position,100 20 100 20,. callback,huidiao2);,6.6 建立图形目标的命令 (1)figure命令建立图形父目标 基本语法: Figure % 使用内定参数创建图形 figure(PropertyName,PropertyValue,.) %选择图形创建图形 figure(h) % 创建第h个图形 h = figure(.) % 创建句柄图形,利用PropertyName我们可以设置图形的大小、图形菜单、图形的位置、图形的颜色等等各种属性。见前例中:,h0=figu

39、re(toolbar,none,. % 不建立工具图标 position,200 150 350 250,. % 指出图形的位置、大小 name,实例7.4.1); % 显示图形的名称,图形属性列表:,(2) uicontrol()命令在父图形目标上建立子目标 在有figure建立的图形目标下,我们可以建立一下列的子目标如,图形输出框、文字输入输出框、选择框、滑动选择框等等,统称为控件。建立这些控件我们使用uicontrol()。其语法为: handle = uicontrol(parent) handle = uicontrol(.,PropertyName,PropertyValue,.)

40、,控件名,设定各种属性,上例中: % 创建第一按纽框,调用前面定义的函数huidiao1,即小写变大写 h1_button=uicontrol(gcf,style,pushbutton,. string,小写变大写,. position,100 45 100 20,. callback,huidiao1);,(3)控件的类型: Check boxes %校对框 Editable text % 编辑框 Frames % 一般框架 List boxes % 列表框 Pop-up menus % 多项选择框 Push buttons % 按纽控件 Radio buttons % 旋转按纽控件 Sli

41、ders % 滑动选择控件 Static text % 文字显示框 Toggle buttons % 选择按纽,(4) 控件的属性 我们可以参考下面的列表:,(5)控件击活 当我们利用设置界面命令在父图形上建立了很多的控件后,他们并不能有相互之间的调用和击活动作,这就需要我们加进一些属性设置来进行击活。例如: h1_edit=uicontrol(gcf,style,edit,. position,100 200 100 50,. HorizontalAlignment,left,. string,Please input the letter,. callback,f=get(h1_edit,

42、string);,. background,w,. max,5,. min,1);,这里对属性callback进行设置,即获取编辑框h1-edit的字符串。,例7.4.2 设置光源来源坐标,h0=figure(toolbar,none,. position,198 56 408 468,. name,实例53); h1=axes(parent,h0,. position,0.15 0.5 0.7 0.5,. visible,off); x,y=meshgrid(-8:0.5:8); r=sqrt(x.2+y.2)+eps; z=sin(r)./r; fh=surf(x,y,z); shadin

43、g interp view(-60 30) camlight left lightk=light(position,0 -2 1); button1=uicontrol(parent,h0,. style,pushbutton,. string,设置光线,. position,80 60 70 30,.,callback,. an1=inputdlg(光线来源的X轴坐标);,. k1=str2num(an11);,. an2=inputdlg(光线来源的Y轴坐标);,. k2=str2num(an21);,. an3=inputdlg(光线来源的Z轴坐标);,. k3=str2num(an31

44、);,. set(lightk,position,k1 k2 k3);,. set(edit1,string,num2str(k1), ,num2str(k2), ,num2str(k3),);); button2=uicontrol(parent,h0,. style,pushbutton,. string,关闭,. position,250 60 70 30,. callback,close);,edit1=uicontrol(parent,h0,. style,edit,. max,2,. min,0,. fontsize,15,. backgroundcolor,1 1 1,. str

45、ing,0 -2 1,. position,80 110 220 30); text1=uicontrol(parent,h0,. style,text,. backgroundcolor,0.75 0.75 0.75,. fontsize,15,. string,光线来源坐标,. position,80 140 220 30);,6.6 可视化编程 直接编程产生图形目标有时不方便、不直观。现代编程经常使用视化编程简单方便。MATLAB提供了可视化编程界面,我们可以利用各种控件按纽进行设计。 (1)进入可视化编程界面 在命令窗口键入guide命令,选择,常规按纽,按纽,旋转按纽,校对按纽,编辑

46、按纽,文本按纽,滑动按纽,列表按纽,多选择按纽,图形输出按纽,例7.6.1 选择三种数据,分别用surf、mesh、contour作图。 分析:首先应该有一个图形输出框,三个绘制不同图形的按纽。还有一个选择控件,选择三种不同的数据。我们可以先作草图:,利用控件图标将需要的控件拉出,点击保存图标,我们将保存一个m文件和一个同名的框架文件,扩展名为。fig,M文件已经将图形框的所有控件都显示出来了,但每个控件还不能相互调用,我们必须编制程序来激活它们。我们来看完整的文件: function varargout = simple_gui(varargin) % SIMPLE_GUI Applicat

47、ion M-file for simple_gui.fig % FIG = SIMPLE_GUI launch simple_gui GUI. % SIMPLE_GUI(callback_name, .) invoke the named callback. % Last Modified by GUIDE v2.0 27-Feb-2001 14:49:10 if nargin = 0 % LAUNCH GUI fig = openfig(mfilename,reuse); % Use system color scheme for figure: set(fig,Color,get(0,de

48、faultUicontrolBackgroundColor);,% Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); % - % Call the popup menu callback to initialize the handles.data % field with the current value of the popup data_popup_Callback(handles.data_popup

49、,handles) % - if nargout 0 varargout1 = fig; end elseif ischar(varargin1) % INVOKE NAMED SUBFUNCTION OR CALLBACK,try if (nargout) varargout1:nargout = feval(varargin:); % FEVAL switchyard else feval(varargin:); % FEVAL switchyard end catch disp(lasterr); end End,% - function varargout = surf_pushbut

50、ton_Callback(h, eventdata, handles, varargin) z = handles.data; surf(z); % - function varargout = mesh_pushbutton_Callback(h, eventdata, handles, varargin) z = handles.data; mesh(z) % - function varargout = contour_pushbutton_Callback(h, eventdata, handles, varargin) z = handles.data; contour(z),白色的程序为我们加上的,% - function varargout = data_popup_Callback(h, eventdata, handles, varargin) val = get(h,Value); switch val case 1 handles.data = peaks(35); case 2 handles.data = membrane

温馨提示

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

评论

0/150

提交评论