第二讲Matlab编程与作图第一部分Matlab程序设计初步Matlab除了指令行操作的直接交互外,作为一种高级应用软件还提供了自己的编程语言。通过编写Matlab程序,可以更加方便地调用Matlab提供的各种功能强大的函数库,使得程序能完成复杂的运算处理大量的数值数据。1、M文件简介Matlab提供了丰富的编程语言,使得用户可以将一连串的命令写入文件,然后使用简单的函数来执行这些命令。文件被保存为文本文件,后缀为.m,比如说dblquad.m,因此Matlab的程序通常被称为M文件。M文件是一个文本文件,可以使用各种文本编辑器对它进行编辑和修改,比如Windows操作系统自带的记事本,也可以用Matlab内建的M文件编辑器。M文件分为两类,一类称为脚本(Scripts),类似于批处理文件,相当于将在Matlab命令窗口中执行的一系列指令放在一个文件中,当在命令窗口调用该文件名时,则按顺序执行其中的命令集。例:编写求10!的程序。另一类M文件称为函数(Function),它可以接受输入变量,并将运算结果送至输出变量,类似于数学中的函数y=f(x)。函数M文件的基本结构:functionf=fact(n)函数定义行%Computeafactorialvalue.%FACT(N)returnsthefactorialofN,帮助文档%usuallydenotedbyN!%Putsimply,FACT(N)isPROD(1:N),注释f=prod(1:n);函数体2、运算符关系运算符:,=,,=,==,~=逻辑运算符:与(&),或(|),非(~)例:编写分段函数21()1-11321xxfxxxx%myfun1.mfunctiony=myfun1(x)y=(x.^2).*(x1)+(x-1&x=1)+(3+2*x).*(x=-1);注意:1.函数名与变量名的命名法则相同,要求以字母开头,后接字母或下划线;2.函数名与保存的文件名最好一致。3、控制流所有的计算机编程语言都提供了控制程序流执行程序的语法,Matlab也不例外。所有的控制流语法都以end结尾。⑴for循环语句语法:for循环变量=数组指令组;end解释:对于循环变量依次取数组中的值,循环执行指令组直到循环变量遍历数组。数组最常用的形式是初值:步长:终值。例:构造Hibert矩阵⑵while循环语法:while条件式指令组;end解释:当条件式满足,循环执行指令组直到条件式不满足。使用while语句要注意避免出现死循环。例:利用迭代公式11()2kkkaxxx求a近似值,要求误差不超过指定精度。[Sqrt.m]⑶分支语句语法:if条件表达式1指令组1;[elseif条件表达式2指令组2;][·······][else指令组k;]end解释:如果条件表达式1满足,则执行指令组1,且结束该语句;否则检查条件表达式2,若满足则执行指令组2,且结束该语句;······;若所有的条件都不满足,则执行指令组k,并结束该语句。例:用条件语句编写分段函数[myfun2.m]⑷开关语句语法:switch分支变量case值1指令组1;case值2指令组2;··········otherwise指令组k;end解释:若分支变量的值取值1,则执行指令组1,且结束该语句,若分支变量的值取值2,则执行指令组2,且结束该语句,······若分支变量不取所列出的值,则执行指令组k。例:关于switch和input的用法。[useswitch.m]⑸其它常用指令●input指令提示用户从键盘输入数值、字符串或表达式,并接收该输入,语法为:user_entry=input(‘message’)user_entry=input(‘message’,’s’)●pause指令使程序运行暂停,语法为pause:暂停执行程序,等待用户按任意键继续。pause(n):使程序暂停n秒后继续执行。例:forn=1:4x=-1:0.1:1;y=x.^n;plot(x,y)pauseend●return指令结束return指令所在函数的执行,返回到主调函数或者命令窗口。●break指令中断执行,用在循环语句内表示跳出循环。●error(’message’)显示出错信息,终止程序执行。例:编写用区间迭代法求函数零点的程序。[intfzero.m]4、其它一些有用的函数●fcnchk函数验证函数f=fcnchk(fun),fun可以是由字符串表示的函数表达式,(这时返回一个inline函数),也可以是函数句柄,或是函数名字符串。f=fcnchk(fun,‘vectorized’),生成向量化函数,例如用.*代替*举例将intfzero.m文件中的语句f=inline(fun);换成f=fcnchk(fun);●nargin,nargout函数中输入参数或输出参数的个数。●%注释语句●find寻找数组中非零元素对应的下标。S=find(A),[I,J]=find(A)例:重编上面的分段函数[myfun3.m]●取整函数round(x),ceil(x),floor(x),fix(x)第二部分Matlab作图1、曲线图●plot(x,y)作出以数据(x(i),y(i))为节点的折线图,其中x,y为同维数的向量。●plot(x,y,s)其中s是由颜色、标记、线型参数组成的字符串颜色标记线型bblue.point-solidggreenocircle:dottedrredxx-mark-.dashdotccyan+plus--dashedmmagenta*star(none)nolineyyellowssquarekblackddiamondwwhitevtriangle(down)^triangle(up)triangle(left)triangle(right)ppentagramhhexagram●plot(x1,y1,s1,x2,y2.s2,…)在同一个坐标系中作出由向量对(x1,y1),(x2,y2),…为节点的折线。例:在同一坐标系中作出函数31yxx和0.2sin(5)yxx在区间[-1,2]上的图形。●holdon(off)保持(释放)图形窗口●polar(theta,rho)作以(theta,rho)为坐标的极坐标图形,theta,rho为同维数的向量例:作出四叶玫瑰线4sin2的图形。●fplot(fun,[a,b])作出函数fun在区间[a,b]上的图形。●plot3(x,y,z)作空间曲线的图形,x,y,z为同维向量。例:作出曲线sin,cos,xttyttzt的图形。●subplot(m,n,k)将图形窗口分成mn个子图形窗口,将当前操作定位在第k个子图形窗口。2、曲面图[X,Y]=meshgrid(x,y)生成以数组x,y为坐标的网格矩阵mesh(X,Y,Z)绘制网面图,X、Y、Z是同维矩阵surf(X,Y,Z)绘制曲面图,与mesh用法类似。例:作出曲面22xyzxe在22,22xy上的图形●ezmesh(fun)轻松绘出二元函数fun的曲面图(easytousemesh)绘图区域为[2,2,2,2]●ezmesh(fun,[xmin,xmax,ymin,ymax])在指定区域绘图●ezmesh(fun,…,’circ’)绘图区域为圆域上机练习1、设x为一个长度为n的数组,编程求下列均值和标准差221111,[],11nniiiixxsxnxnnn2、求满足0ln(1)100mnn的最小m值。3、用循环语句形成Fibonacci数列12121,,3,4,kkkFFFFFk,并验证极限1152kkFF。(提示:计算至两边误差小于精度810)4、分别用for和while循环结构编写程序,求出610132iiK。并考虑一种避免循环语句的程序设计,比较不同算法的运行时间。5、求出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。例如,153是一个“水仙花数”,因为333153153。6、假定某天的气温变化记录如下表,试作图描述这一天的气温变化规律。时刻t(h)0123456789101112温度T(℃)15141414141516182022232528时刻t(h)131415161718192021222324温度T(℃)3132312927252422201817167、作出下列函数图像⑴曲线22sin(2),22yxxxx(要求分别使用plot或fplot完成)⑵椭圆22149xy⑶抛物面22,3,3zxyxy⑷曲面422232226,3,313zxxyxyxyxy⑸空间曲线sin,cos,cos(2),02xtytztt⑹半球面2sincos,2sinsin,2cos,02,0/2xyz⑺三条曲线合成图123sin,sinsin(10),sin,0yxyxxyxx8、作下列分段函数图1.11.11.11.11.1xyxxx9、用MATLAB函数表示下列函数,并作图2222220.753.751.560.753.751.50.54571(,)0.7575e110.5457e1yxxyxyxxexypxyxyxy