第3章_Matlab程序设计_part2_第1页
第3章_Matlab程序设计_part2_第2页
第3章_Matlab程序设计_part2_第3页
第3章_Matlab程序设计_part2_第4页
第3章_Matlab程序设计_part2_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、3.3 M文件3.3.13.3.1 M M文件概述文件概述Matlab作为一种高级计算语言,不仅可以如前几章那样,以一种人机交互的命令行方式工作,还可以像Basic, Fortran, C 等其它高级语言一样进行程序设计。用用MATLABMATLAB语言编写的程序,称为语言编写的程序,称为M M文件文件。 M文件的分类1)命令式:命令式M文件(简称命令文件,也称为脚本式M文件,脚本文件)就是命令(或语句)的简简单叠加单叠加(不存在输入参数和输出参数的问题)。可在命令窗口直接输入文件名运行。当运行命令式 M文件时,MATLAB就会自动按顺序执行文件中的语句(或命令),这样就可以避免在命令窗口运行

2、许多命令的麻烦和重复性工作,也便于修改。2 2)函数式:函数式M文件(简称函数文件)用来定义函数,主要解决参数传递和函数调用问题,它的第一条语句以function语句为引导。3.3.2 M文件的创建与打开M文件是一个文本文件,可以用任何编辑程序来建立和编辑。最常用的是利用Matlab提供的M文件编辑器。1. 1. 建立新的建立新的M M文件文件为建立新的文件,启动M文件编辑器的方法有三种:1)菜单方式。从Matlab主窗口中选择File-New-M-file命令,出现M文件编辑器窗口。2)命令方式:在命令窗口输入edit命令。3)命令按钮方式:单击Matlab主窗口工具栏上的New M-fil

3、e命令按钮。例:绘制y=sin(x)在区间 内的图形。方式1. 交互的命令行工作方式: 直接在命令窗口输入命令:x=linspace(0,2*pi, 101);y=sin(x);plot(x,y);方式2. M文件方式(程序方式): 按照前面三种方式之一启动M文件编辑器,依次输入以上三条语句,保存文件(不妨将文件命名为test1.m)注意: 我们建立的M文件是命令式M文件(或简称为命令文件)。2 , 0命令文件的运行:在命令窗口中输入该M文件名(test1),或者选择M文件编辑器窗口中debug菜单下的run子菜单运行该命令文件,就会顺序执行该命令文件中的语句(或命令)。关于函数的定义格式、调

4、用格式、参数传递及有关的问题我们将在后面专门介绍。2. 打开已有的文件打开已有的文件有多种方法:1) 在当前目录窗口当前目录窗口选中要打开的文件,双击鼠标左键。2)菜单方式:从Matlab主窗口中选择File-Open子菜单,则屏幕出现“Open”对话框,选择所需打开的M文件。3)命令按钮方式:单击Matlab主窗口工具栏上的Open file命令按钮。4)命令方式:在命令窗口输入命令edit edit 文件名文件名例:修改test1.m, 改为绘制 的图形。方法:打开文件test1.m,将语句y=sin(x)修改为y=exp(-0.5*x).*sin(x), 保存文件,然后运行该命令文件即可

5、。)sin(5 . 0 xeyx3.3.3 输入输出语句1.1. inputinput 函数函数 调用格式为: A=input(提示信息,选项); 其中提示信息为一个字符串,用于提示用户输入什么样的数据。 例如: R=input(input the value of radius); 如果在input函数调用时采用s选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令: xm=input(Whats your name? ,s)例3-11 建立一个命令文件,实现数组a的平方运算和a中各个元素的平方。程序:a=input(a=? );x=a2y=a.2运行以上程序:1) 输入一个

6、标量:例如输入,观察运行结果.2) 输入一个方阵:例如输入1 2;3 4,观察运行结果3)输入一个行向量:例如输入1,2,3,4 ,观察运行结果)还可以输入 ones(2), eye(2), etc.2. disp 和 display函数 调用格式为: disp(X) 或 display(X) 其中X既可以为字符串,也可以为矩阵。 注意:用disp函数显示矩阵时将不显示矩阵的名字,而且其格式更紧密,且不留任何没有意义的空行。例 建立一个命令文件,实现以下功能:输入数值型矩阵a,求a中所有元素的最大值、最小值、所有元素的和与乘积。程序如下:a=input(输入矩阵a= )maxval=max(a

7、(:); minval=min(a(:);sum_a=sum(a(:); pro_a=prod(a(:);display(The max value is , num2str(maxval), The min value is, num2str(minval), The sum is , num2str(sum_a), The production is ,num2str(pro_a)运行以上程序,每次输入不同的值,观察运行结果。1) 输入标量:例如2) 输入向量:例如1 2 3 4 5或1:5或linspace(1,5,5)3) 输入矩阵:例如1 2 3;4 5 6 或 rand(3) 3.

8、 pause3. pause命令命令格式:pause 暂停程序的执行,等待用户按任意键后再继续运行 pause(n) 等待n秒后继续运行pause on 表示其后的pause命令起作用pause off 表示其后的pause命令不起作用pause query 查询当前pause命令的状态3.4 分支结构(选择结构)3.4.13.4.1 if if 语句语句在MATLAB中,if语句有3种格式。1. 1. 单分支单分支ifif语句语句语句格式为: if if 条件表达式条件表达式 语句组语句组 endend 当条件表达式的值为真(非零)时,则执行if和end之间的语句组;否则,(不执行if和en

9、d之间的语句组),直接执行if语句的后继语句(end后面的语句)。 2. 双分支双分支if if语句语句语句格式为: if if 条件表达式条件表达式 语句组语句组1 1 else else 语句组语句组2 2 end end 当条件表达式非零时,执行语句组1;否则执行语句组2。 语句组1或语句组2执行后,再执行if语句的后继语句(end后面的语句)。例3-12 计算分段函数 的值程序如下:x=input(please input x:);if x=A & c=a& c=0& c=9 disp(str2num(c)2);else disp(c);end练习 输入x的值,求以下分段函数的值练习

10、输入x的值,求以下分段函数的值otherwisexxxy11112104410065062xxxxxxxy3.4.2 switch-case结构switch语句根据表达式的取值不同,分别执行不同的语句,其语句格式为:switch switch 表达式表达式 case case 表达式表达式1 1 语句块语句块1 1 case case 表达式表达式2 2 语句块语句块2 2 case case 表达式表达式n n 语句块语句块n n otherwise otherwise 语句块语句块n+1n+1 end endswitch子句后面的表达式应为一个标量或一个字符串,case子句后面的表达式不仅

11、可以为一个标量或一个字符串,而且还可以是一个将多个值(标量或字符串)用大括号括起来的单元数据(Cell)。如果case子句后面的表达式为一个单元数据,则表达式的值等于该单元数据中的某个元素时,执行相应的语句组。switch语句的执行过程 例3-14 通过键盘输入百分制成绩,输出对应的等级(A: 90100, B: 8089,C:7079,D:6069,E: 60)程序如下:n=input(n=);if n100 display(Error!);else i=fix(n/10); switch i case 9,10 display(A) case 8 display(B) case 7 dis

12、play(C) case 6 display(D) otherwise display(E)end %switchend % if例:判断用户选择的是哪种插值方法(bilinear, cubic或nearest)method = input(Input method: (bilinear,cubic or nearest), s) switch lower(method) case linear,bilinear disp(Method is linear) case cubic disp(Method is cubic) case nearest disp(Method is nearest

13、) otherwise disp(Unknown method.)End练习:利用if-elseif-else结构重写以上两个程序。3.4.3 try-catch结构Matlab从5.3版本开始提供了一种新的试探式语句结构。其一般格式为:try try 语句组语句组catchcatch 语句组语句组endend执行时,首先试探性地执行语句组。如果在执行语句组的过程中出错,则将错误信息赋给Matlab预定义变量lasterr后转去执行语句组(如果执行语句组时也出错,将终止程序的执行)。例矩阵乘法运算要求两矩阵的维数相容,否则会出错。创建一个命令文件,先求两矩阵的乘积,若出错,则自动转去求两矩阵的

14、点乘。A=input(请输入A矩阵:)B=input(请输入B矩阵:)lasterr(); %清除原有的错误信息try C=A*B;catch C=A.*B;endCdisp(lasterr) %显示出错原因运行程序,观察程序的执行结果。输入矩阵A:1 2 3;4 5 6输入矩阵B :7 8 9;10 11 12运行结果:(略)再运行一次,输入矩阵A:1 2 3;4 5 6输入矩阵B :1 2;3 4;5 6运行结果:(略)例采用单下标方式对n阶魔方阵的元素进行引用。当下标超出元素个数(最大单下标)时,改为引用最后一个元素,并显示出错警告信息。程序如下:n=input(输入魔方矩阵的阶数:);

15、 A=magic(n)index=input(输入单下标:)try a=A(index)catch a=A(end) lasterrend练习: 用if语句来完成本题。 3.5 循环结构Matlab中循环语句有两种:for语句和while语句。3.5.1 for语句for 语句的一般格式:for for 循环变量循环变量= =数组数组 循环体语句循环体语句endend数组为向量或矩阵。执行时依次将数组的各列赋值给循环变量,然后执行循环体语句,直至各列元素处理完毕。例 建立命令文件,输入以下程序,分析执行过程A=input(A=)sumA=0;for x=A sumA=sumA+x;end su

16、mA请分别输入以下数据,观察程序的运行结果,分析程序的功能:1) 1 2 3;4 5 62) 1 2 3 4 5 63) 1;2;3说明:本题可以用sum函数来改写(留作练习)。for语句最常用的形式格式:for for 循环变量循环变量= =表达式表达式1 1:表达式:表达式2 2:表达式:表达式3 3 循环体语句循环体语句endend其中,表达式1为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。当步长为1时,表达式2可以省略。执行过程例3-18求 ,其中,n=10.程序如下:y=0;for k=1:10 y=y+1/2k;endy说明:若用sum函数,本题可改写为:K=

17、1:10; x=1./2.K; y=sum(x) nkk121或者:n=10; k=1; term=1/2; y=term;for i=2:n term=term/2; y=y+term;endy 练习已知y= ,求y的值程序如下:n=100;y=0;for i=1:n y=y+(-1)(i+1)/i;endy思考:本题不用循环如何实现?(利用sum函数)10014131211或者:n=100; i=1; sig=1; y=1;for i=2:n sig=-sig; y=y+sig/i;endy 练习分别用循环语句和sum函数两种方法求解以下两题:(1)求(2)编写程序,计算的值(用input

18、语句输入n的值)100131nny) 12(7531ny例3-19 设 , 求 分析:为计算定积分我们将积分区间a,b分成n等分,则第i个分点为第i个小区间为 ,于是,当n充分大时6sin6cos)(xxxf20)(dxxfsbadxxf)(,1iixx1,.,1,) 1(ninabhhiaxihxfxfdxxfiixxii2)()()(11hxfxfdxxfdxxfniiinixxbaii1112)()()()(1(梯形公式)程序如下:a=0;b=2*pi;n=1000; h=(b-a)/n;x=a:h:b; %或x=linspace(a,b,n+1); f=cos(x-pi/6).*sin

19、(x+pi/6);y=0;for i=1:n s(i)=(f(i)+f(i+1)/2*h; y=y+s(i);endy思考本题不用循环如何实现? 练习 编写程序,求定积分3021dxxxs例3-20 求100,200之间第一个能被13整除的整数。程序如下:for n=100:200 if rem(n,13)=0 break; endendn思考:不用循环,如何实现相同的功能?(提示:利用find函数)例3-22 一个整数各位数字的立方和等于这个数本身,则称该数为水仙花数。输出全部三位的水仙花数。程序如下:for m=100:999 m1=fix(m/100); %求m的百位数 r1=rem(m

20、,100); %m的后两位 m0=fix(r1/10); %m的十位数 m3=rem(r1,10) %m的个位数 if m13+m23+m33=m display(m) endend 循环的嵌套例3-24 编程:输入n,输出n阶Hilert矩阵说明:Hilbert矩阵的第i行第 j列元素为程序如下:N=input(N=); format rat ; H=zeros(N);for i=1:N for j=1:N H(i,j)=1/(i+j-1); endendH11,jihji例 设x,y,z均为正整数,下列不定方程组共有多少组解?求出它的所有正整数解。分析:根据题意, , 我们用枚举法求解程序

21、:n=0; solutions=;for x=1:18 for y=1:18 z=20-x-y; 40016202520zyxzyx18,1zyx if z0 & 25*x+20*y+16*z=400 solutions =solutions; x,y,z; n=n+1; end %if end % for yend % for x display(方程共有 num2str(n) 组解)disp(solutions)3.5.2 while语句while语句的一般格式为: while while 条件表达式条件表达式 循环体语句循环体语句 endend 其执行过程为:若条件表达式为真(非零),则执行循环体语句,否则,跳出循环。每次执行循环体语句后,重新判断条件表达式是否为真(如果为真,则继续执行循环体语句,否则跳出循环)。重复以上过程,直至条件表达式为假(零)时,跳出循环。 break和continue命令另外,在执行循环体语句时,当执行到break 命令时,也跳出for循环或while 循环(注意:只跳出break所在的一层循环)。如果在循环体语句中遇到continue 语句,则停止执行剩余的循环体语句,转到下一次循环的开始执行(对于for语句,则给循

温馨提示

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

评论

0/150

提交评论