第六章 MATLAB编程.ppt
《第六章 MATLAB编程.ppt》由会员分享,可在线阅读,更多相关《第六章 MATLAB编程.ppt(78页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章第六章 MATLAB编程编程6.1 编程入门编程入门6.2 函数(命令)文件概念函数(命令)文件概念6.3 转向语句转向语句6.4 循环语句循环语句我们已经知道,我们已经知道,MATLAB的每一个命令是一个子程序,我们可以把的每一个命令是一个子程序,我们可以把它当作一个具有相当功能的集成块。如果我们将这些集成块有机地它当作一个具有相当功能的集成块。如果我们将这些集成块有机地组合在一起,将产生相当强大的功能,这就是编制程序。显而易见,组合在一起,将产生相当强大的功能,这就是编制程序。显而易见,这样编制的程序结构简单,编程方便,特别是对具有这样编制的程序结构简单,编程方便,特别是对具有C、F
2、ORTRAN编程经验的使用者。我们还可以很方便地对编程经验的使用者。我们还可以很方便地对MATLAB命命令集进行扩充,即我们可以编制自己的一套算法程序并命名为一个令集进行扩充,即我们可以编制自己的一套算法程序并命名为一个函数命令,这正是函数命令,这正是MATLAB的优点之一。我们可以在的优点之一。我们可以在MATLAB网网站上看到世界各地的各学科的科学工作者贡献的各种子命令。站上看到世界各地的各学科的科学工作者贡献的各种子命令。MATLAB程序具有程序具有C、FORTRAN 的结构,如循环结构、条的结构,如循环结构、条件转向结构等等,对于变量来说也分局部变量和全局变量。在数学件转向结构等等,对
3、于变量来说也分局部变量和全局变量。在数学建模竞赛中,我们是将我们的各项实验和探索最终编制成程序进行建模竞赛中,我们是将我们的各项实验和探索最终编制成程序进行计算的。在这一章我们将介绍编程的基本概念和编程的步骤,特别计算的。在这一章我们将介绍编程的基本概念和编程的步骤,特别关注在程序中使用各种数据的输入和输出的命令,如何将目前流行关注在程序中使用各种数据的输入和输出的命令,如何将目前流行的关系数据库的数据读入到我们的的关系数据库的数据读入到我们的MATLAB程序中,以及将计算结程序中,以及将计算结果在输出到这些数据库中的方法,这在数学建模竞赛中是非常重要果在输出到这些数据库中的方法,这在数学建模
4、竞赛中是非常重要的处理数据的方法。的处理数据的方法。MATLAB的每一个命令或者说函数事实上是一个子程序,我的每一个命令或者说函数事实上是一个子程序,我们可以把它当作一个具有相当功能的集成块。如果我们将这些集们可以把它当作一个具有相当功能的集成块。如果我们将这些集成块有机地组合在一起将产生相当强大的功能,这就是编制程序。成块有机地组合在一起将产生相当强大的功能,这就是编制程序。6.1 编程入门编程入门我们来编程序,并把它定义成一个我们来编程序,并把它定义成一个MATLAB的函数(命令)。的函数(命令)。【例例6.1.1】求两求相交的交线,并作两球和交线图形。求两求相交的交线,并作两球和交线图形
5、。解解题题思思路路:首首先先建建立立两两球球的的方方程程,利利用用solve命命令令求求解解交交线线方方程程的的的公式,然后利用作图命令将三个图形作在一起。的公式,然后利用作图命令将三个图形作在一起。(1)编写)编写M脚本文件的步骤脚本文件的步骤 l点点击击MATLAB指指令令窗窗工工具具条条上上的的New File图图标标,就就可可打打开开 如如 图图 6.1.1所所 示示 的的 MATLAB文文 件件 编编 辑辑 调调 试试 器器 MATLAB Editor/Debugger。其其窗窗口口名名为为untitled,用用户户即即可可在在空空白白窗窗口口中中编编写程序。比如输入如下一段程序写程
6、序。比如输入如下一段程序%2004年四月二十六日,两球相交作图。年四月二十六日,两球相交作图。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+cY1=sqrt(2)*YZ1=sqrt(2)*Zmesh(X,Y,Z),hidden off;hold onaxis
7、equal,axis(-1,3.5,-2.5,2.5,-1.5,1.5)mesh(X1,Y1,Z1),hold onplot3(u1,v*sin(t),v*cos(t),linewidth,6);hold onX1=sqrt(2)*X+uY1=sqrt(2)*YZ1=sqrt(2)*Zmesh(X,Y,Z),hidden off;hold offl点点击击运运行行工工具具条条图图标标,在在第第一一次次运运行行时时将将弹弹出出的的Windows标标准准风风格格的的“保保存存为为”对对话话框框中中,选选择择保保存存文文件件夹夹,键键入入新新编编文文件件名名(如如example1),点点动动【保保存
8、存】键键,就就完完成成了了文文件件保保存存并出现如下提示界面。并出现如下提示界面。直直接接电电击击OK便便开开始始运运行行,如如果果没没有有语语法法等等问问题题,则则结结果果图图将将显显示示出出来来。如如果果有有错错误误会会听听见见嘟嘟的的一一声声响响,这这时时打打开开命命令令窗窗口口我我们们可可以以看看见见有有红红色色的的提提示示符符,告告诉诉你你在在程程序序的的第第几几行行有有什什么么错错误误。我我们们可可以以检检查查修修改改直直到到顺顺利利运运行行。分分段段函函数数的的图图形见下图形见下图6.1.1 MATLAB 函数文件函数文件 我我们们可可以以把把上上面面的的程程序序稍稍微微修修改改
9、一一下下让让它它变变为为函函数数的的形形式式,这这样样我我们们就就可可以以象象使使用用其其他他命命令令一一样样来来使使用用这这个个命命令令了了。我我们们可可以以在在M文文件件中中加加入入这这些些函函数数命命令令,就就象象C、FORTRAN等等高高级级语语言言中中的的子子程程序序,从从而而大大大大提提高高了了程程序序的的效效率率和和可可读读性性。函函数数程程序序必必须须以以关关键字键字function开头。开头。【例例6.1.2】将上面的两球交线的作图将上面的两球交线的作图m文件改成函数文件。文件改成函数文件。对上面的程序只要稍加修改我们就可以产生一个对上面的程序只要稍加修改我们就可以产生一个M
10、ATLAB函数文件函数文件了,即在上面的程序中加一行函数说明关键字了,即在上面的程序中加一行函数说明关键字function,在程序的,在程序的结尾加关键字结尾加关键字end见下面的程序。见下面的程序。function H=two_ball1(c)%2004年四月二十六日,两球相交作图。年四月二十六日,两球相交作图。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,
11、1:100)=uX,Y,Z=sphere(30);X1=sqrt(2)*X+cY1=sqrt(2)*YZ1=sqrt(2)*Zmesh(X,Y,Z),hidden off;hold onaxis equal,axis(-1,3.5,-2.5,2.5,-1.5,1.5)mesh(X1,Y1,Z1),hold onplot3(u1,v*sin(t),v*cos(t),linewidth,6);hold on给程序加一个头给程序加一个头X1=sqrt(2)*X+uY1=sqrt(2)*YZ1=sqrt(2)*Zmesh(X,Y,Z),hidden off;hold offend这里:这里:funct
12、ion H=two_ball1(c)定义了一个函数名定义了一个函数名two-ball1,小括号里的变量为输入参数,小括号里的变量为输入参数c,为两,为两球的距离。球的距离。然后将该修改过的程序保存为程序名为然后将该修改过的程序保存为程序名为two-ball1的的MATLAB文件,文件,我们事实上已经为我们事实上已经为MATLAB的命令集合中又添加了一个新的命令,的命令集合中又添加了一个新的命令,它可以向其他命令一样的使用。它可以向其他命令一样的使用。给程序加个尾给程序加个尾方法方法1:在命令窗口键入:在命令窗口键入:c=2.2 two-ball1(c)就可以得到和上例一样的结果了。事实上我们定
13、义了一个就可以得到和上例一样的结果了。事实上我们定义了一个MATLAB的新命令的新命令.方法方法2:例如编一段小程序,调用该函数。:例如编一段小程序,调用该函数。c=2;two-ball1(c)运行该段程序运行该段程序,也可以产生上面一样的结果。也可以产生上面一样的结果。6.1.2 m脚本文件和函数文件脚本文件和函数文件 上面我们介绍了两种类型的上面我们介绍了两种类型的MATLAB文件,它们都是用文件,它们都是用MATLAB语言要素汇编而成,但是其作用却有本质的不同,语言要素汇编而成,但是其作用却有本质的不同,m脚本文件:为完成某计算任务而编写的程序称脚本文件。脚本文件:为完成某计算任务而编写
14、的程序称脚本文件。函数文件:以函数文件:以function开头的为完成某项任务的程序称为函数文件。开头的为完成某项任务的程序称为函数文件。以下表格以下表格6.1.1列出它们的不同和相同之处。列出它们的不同和相同之处。从中我们可以看出,从中我们可以看出,m脚本文件有些象脚本文件有些象FORTRAN语言里的主程序,语言里的主程序,而函数文件的功能很象而函数文件的功能很象SUBROUTINE子程序,可以被其他程序调子程序,可以被其他程序调用。用。6.2 循环和转向语句循环和转向语句 像其他的高级语言一样,我们也可以使用循环和转向语句。这像其他的高级语言一样,我们也可以使用循环和转向语句。这样我们就可
15、以将样我们就可以将MATLAB的各种函数有机地组成效率非常高的的各种函数有机地组成效率非常高的复杂运算了。由于循环和转向语句在复杂运算了。由于循环和转向语句在FORTRAN或或C语言中都有语言中都有详细的介绍,详细的介绍,MATLAB中的循环和转向语句功能基本一样,仅中的循环和转向语句功能基本一样,仅仅是语言略有不同,因此仅以实例简单介绍。仅是语言略有不同,因此仅以实例简单介绍。6.2.1 for 循环语句循环语句for循环语句的语法结构为:循环语句的语法结构为:for x=循环范围循环范围 循环体循环体end其中循环体可以是一个命令,也可以是一端源程序。其中循环体可以是一个命令,也可以是一端
16、源程序。【例【例6.2.1】一个简单的】一个简单的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 规则:规则:,且且 。现要求该序列中第一
17、个大于现要求该序列中第一个大于10000的元素。的元素。a(1)=1;a(2)=1;i=2;while a(i)8 sums=number*0.95*cost;endsums sums=114.0000 6.2.4 switch-case 结构结构switch-case分支结构的语法为:分支结构的语法为:switch ex ex为变量或字符串变量为变量或字符串变量 case test1命令集合命令集合1 case test2命令集合命令集合2 case testk命令集合命令集合kend【例【例6.2.4】学生的成绩管理,用来演示】学生的成绩管理,用来演示switch结构的应用。结构的应用。c
18、lear;%划分区域:满分划分区域:满分(100),优秀,优秀(90-99),良好,良好(80-89),及格,及格(60-79),不及格,不及格(1 xz=x;elseif nargout=1 xz=z;else%Self demonstration disp()disp(z=3*(1-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).
19、min(min(z)max(max(z)xlabel(x),ylabel(y),title(Peaks)end当我们在命令行中键入:当我们在命令行中键入:help peaks 回车键回车键则产生以下帮助信息,它们正好是则产生以下帮助信息,它们正好是peaks函数的在线帮助中的注释函数的在线帮助中的注释内容。内容。PEAKS A sample function of two variables.PEAKS is a function of two variables,obtained by translating and scaling Gaussian distributions,which
20、is useful for demonstrating MESH,SURF,PCOLOR,CONTOUR,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);.6.4.2 子函数和私密函数(子函数和私密函数(Subfunctions&Private Functions)子函数(子函数(Subfunctions)和高级语言一样,在和高级语言一样,在MATLAB编程中也有子程序即子函数的
21、概编程中也有子程序即子函数的概念。在一个念。在一个m函数文件中,可以包含若干个子函数,定义格式和函数文件中,可以包含若干个子函数,定义格式和m函数一样。而包含这些子函数的函数称为主函数函数一样。而包含这些子函数的函数称为主函数【例【例6.3.2】一个函数的任务是计算数组的均值和中位数,在这个】一个函数的任务是计算数组的均值和中位数,在这个m函数本身包含一个计算平均值和一个计算中位数的子函数。函数本身包含一个计算平均值和一个计算中位数的子函数。function avg,med=newstats(u)%主函数主函数%NEWSTATS Find mean and median with intern
22、al functions.n=length(u);avg=mean(u,n);med=median(u,n);function a=mean(v,n)%计算均值的子函数计算均值的子函数%Calculate average.a=sum(v)/n;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)
23、%产生一个产生一个100元素的随机数数组元素的随机数数组 a,b=newstats(u)%调用函数计算均值和方差调用函数计算均值和方差这里主函数将这里主函数将u作为输入变量,然后调用两个计算子函数,并将计作为输入变量,然后调用两个计算子函数,并将计算结果传给主函数作为输出变量。算结果传给主函数作为输出变量。注意:当我们用注意:当我们用help语句对主函数寻求帮助时,看不见自函数的帮语句对主函数寻求帮助时,看不见自函数的帮助内容,而只能看见主程序中的帮助内容。助内容,而只能看见主程序中的帮助内容。2)私密函数(私密函数(Private Functions)当我们在开发大型的应用软件时,我们的软件
24、工程包括了大量当我们在开发大型的应用软件时,我们的软件工程包括了大量的函数和子函数,在这么多的文件中,我们可以按照调用层次的函数和子函数,在这么多的文件中,我们可以按照调用层次分别方在父目录和子目录中。例如父目录名为分别方在父目录和子目录中。例如父目录名为newmath,而子,而子目录名为目录名为private。那些存放在。那些存放在private目录中的函数就称为私密目录中的函数就称为私密函数,只有那些在父目录中的函数才能调用这些私密函数。或函数,只有那些在父目录中的函数才能调用这些私密函数。或者说私密函数对不在父目录中其他函数实施了屏蔽。这有时是者说私密函数对不在父目录中其他函数实施了屏蔽
25、。这有时是非常有用的,因为私密目录中的函数名可以和其他目录中的文非常有用的,因为私密目录中的函数名可以和其他目录中的文件名一样,但在父目录中的函数首先调用私密目录中的同名文件名一样,但在父目录中的函数首先调用私密目录中的同名文件。件。6.5 界面设计与编程界面设计与编程 界面编程已经成为程序编制重要任务之一,无论是软件开发还界面编程已经成为程序编制重要任务之一,无论是软件开发还是各种实验程序的设计都离不开界面设计与编程。是各种实验程序的设计都离不开界面设计与编程。7.4.1 图形用户界面的设计原则和一般步骤:图形用户界面的设计原则和一般步骤:一、设计原则一、设计原则由于要求不同,设计出来的界面
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六章 MATLAB编程 第六 MATLAB 编程
限制150内