MATLAB程序设计2课件

上传人:pu****.1 文档编号:569846649 上传时间:2024-07-31 格式:PPT 页数:55 大小:1.04MB
返回 下载 相关 举报
MATLAB程序设计2课件_第1页
第1页 / 共55页
MATLAB程序设计2课件_第2页
第2页 / 共55页
MATLAB程序设计2课件_第3页
第3页 / 共55页
MATLAB程序设计2课件_第4页
第4页 / 共55页
MATLAB程序设计2课件_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《MATLAB程序设计2课件》由会员分享,可在线阅读,更多相关《MATLAB程序设计2课件(55页珍藏版)》请在金锄头文库上搜索。

1、1MATLAB程序设计(2)5.1 M文件5.2 数据的输入输出5.3 选择结构5.4 循环结构5.5 函数文件5.6 全局变量和局部变量补充2MATLAB程序设计(2)程序设计注意事项:1) 良好的代码习惯;良好的代码习惯;(1)变量名的定义简单易懂;(2)程序结构流程清晰; (3)详细的注释;3MATLAB程序设计(2)2) 与其它高级语言区别:与其它高级语言区别:(1) 交互式语言,解释性语言; (2) 矩阵运算的思想; (3) 号表示续行; 3) 编程积累编程积累(1)在实践中积累(2)注重交流4MATLAB程序设计(2)5.1 M文件1)概念:用户把要实现的命令写在一个以m文件作为扩

2、展名的文件中,然后由系统进行解释,运行出结果。 2)格式:函数式M文件和脚本式M文件。(1)函数式函数式M文件:第文件:第1句以句以Function语句语句作为引导;作为引导; (2)脚本式脚本式M文件:命令的简单叠加,与文件:命令的简单叠加,与批处理文件类似。批处理文件类似。 5.1.1 5.1.1 基本概念基本概念 5MATLAB程序设计(2)(3)相同之处:以相同之处:以m文件作为扩展名的文本文件作为扩展名的文本文件,都不进入命令窗口,而是由文本编文件,都不进入命令窗口,而是由文本编辑器来创建外部文本文件;辑器来创建外部文本文件; (4)不同之处:函数式不同之处:函数式M文件和脚本式文件

3、和脚本式M文文件与件与MATLAB在通信方面不同;在通信方面不同;脚本式脚本式M文件运行产生的所有变量都是全文件运行产生的所有变量都是全局变量;局变量;而函数式而函数式M文件的所有变量除特别声明外,文件的所有变量除特别声明外,均是局部变量;均是局部变量;在在MATLAB中的中的M文件绝大多数是函数文件绝大多数是函数式式M文件。文件。6MATLAB程序设计(2)5.1.2 M5.1.2 M文件的建立与编辑文件的建立与编辑 1.建立新M文件: (1)菜单操作菜单操作: MATLAB命令窗口的命令窗口的File菜单菜单 New菜单项菜单项 M-file命令。命令。(2)命令操作:命令操作: 输入命令

4、输入命令edit。(3)命令按钮操作:命令按钮操作: 单击命令窗口工具栏单击命令窗口工具栏上的上的“新建新建”2. 编辑已有M文件:!注意:!注意:可在其它文本环境下编辑。可在其它文本环境下编辑。7MATLAB程序设计(2) 例5.1 建立一个脚本文件将变量a,b的值互换,然后运行该脚本文件。 1)首先建立脚本文件并以文件名)首先建立脚本文件并以文件名exch.m存盘:存盘: clear; a=1:10; b=11,12,15,14;15,16,17,18; c=a; a=b; b=c; a b2)然后,在)然后,在MATLAB的命令窗口中输入的命令窗口中输入exch,将会执行该脚本文件。,将

5、会执行该脚本文件。 8MATLAB程序设计(2) 例5.2 建立一个函数文件将变量a,b的值互换,然后在命令窗口调用该函数文件。1)首先建立函数文件)首先建立函数文件fexch.m: function a,b=exch(a,b) c=a;a=b;b=c;2)然后在命令窗口调用该函数文件:)然后在命令窗口调用该函数文件:clear;x=1:10; y=11,12,15,14;15,16,17,18;x,y=fexch(x,y)9MATLAB程序设计(2)5.1.3 M5.1.3 M文件性能剖析文件性能剖析 MATLAB提供的程序评述器可以记录程序中每一步的运行时间;评述(profile)文件是提

6、高文件运行的一种方法。10MATLAB程序设计(2)5.2 数据的输入输出5.2.1 input5.2.1 input函数函数 1)调用格式为: A=input(提示信息,选项);2)说明:(1)提示信息为一个字符串,用于提示用户输入什么样的数据。 (2)如果在input函数调用时采用s选项,则允许用户输入一个字符串。例如例如:想输入一个人的姓名,采用命令:想输入一个人的姓名,采用命令: xm=input(Whats your name?,s)11MATLAB程序设计(2)5.2.2 disp5.2.2 disp函数函数 1)调用格式: disp(输出项) 2)说明:输出项既可以为字符串,也可

7、以为矩阵。注意:注意:用用disp函数显示矩阵时将不显示矩阵的函数显示矩阵时将不显示矩阵的名字,而且其格式更紧密,且不留任何名字,而且其格式更紧密,且不留任何没有意义的空行。没有意义的空行。12MATLAB程序设计(2) 例5.3求一元二次方程ax2 +bx+c=0的根。 a=input(a=?); b=input(b=?); c=input(c=?); d=b*b-4*a*c; x=(-b+sqrt(d)/(2*a),(-b-sqrt(d)/(2*a); disp(x1=,num2str(x(1),x2=,num2str(x(2); 13MATLAB程序设计(2) 5.2.3 pause5.

8、2.3 pause函数函数1)调用格式:pause(延迟秒数)2)说明:(1)如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行;(2)若要强行中止程序的运行可使用Ctrl+C命令。14MATLAB程序设计(2)5.3 选择结构 5.3.1 if 5.3.1 if语句语句(3(3种格式种格式) ) 1.单分支if语句1)语句格式:语句格式: if 条件条件 语句组语句组 end2)说明:说明:当条件成立时,则执行语句组,执当条件成立时,则执行语句组,执行完之后继续执行行完之后继续执行if语句的后继语句,若条语句的后继语句,若条件不成立,则直接执行件不成立,则直接

9、执行if语句的后继语句。语句的后继语句。15MATLAB程序设计(2) 2.双分支if语句 1)语句格式:语句格式: if 条件条件 语句组语句组1 else 语句组语句组2 end2)说明:说明:当条件成立时,执行语句组当条件成立时,执行语句组1,否,否则执行语句组则执行语句组2,语句组,语句组1或语句组或语句组2执行执行后,再执行后,再执行if语句的后继语句。语句的后继语句。16MATLAB程序设计(2) 例5.4 计算分段函数值 x=input(请输入请输入x的值的值:); if x=10 y=cos(x+1)+sqrt(x*x+1); else y=x*sqrt(x+sqrt(x);

10、end 17MATLAB程序设计(2) 3.多分支if语句 1)语句格式:语句格式: if 条件条件1 语句组语句组1 elseif 条件条件2 语句组语句组2 elseif 条件条件m 语句组语句组m else 语句组语句组m+1 end 18MATLAB程序设计(2)例5.5 输入一个字符:若为大写字母,则输出其后继字符;若为小写字母,则输出其前导字符;若为数字字符则输出其对应的数值;若为其他字符则原样输出。 c=input(请输入一个字符请输入一个字符,s); if c=A & c=a& c=0& c=9 disp(abs(c)-abs(0); else disp(c); end19MA

11、TLAB程序设计(2)20MATLAB程序设计(2) 5.3.2 switch5.3.2 switch语句语句 语句格式:语句格式: switch 表达式表达式 case 表达式表达式1 语句组语句组1 case 表达式表达式2 语句组语句组2 case 表达式表达式m 语句组语句组m otherwise 语句组语句组m+1 end21MATLAB程序设计(2) 例5.6 某商场对顾客所购买的商品实行打折销售,已知打折标准,求所售商品的实际销售价格。 price=input(请输入商品价格请输入商品价格); switch fix(price/100) case 0,1 rate=0; case

12、 2,5,4 rate=5/100; case num2cell(5:9) rate=5/100; case num2cell(10:24) rate=8/100; case num2cell(25:49) rate=10/100; otherwise rate=14/100; end price=price*(1-rate)22MATLAB程序设计(2) 5.3.3 try5.3.3 try语句语句1)语句格式:语句格式: try 语句组语句组1 catch 语句组语句组2 end 2)说明:说明: try语句先试探性执行语句组语句先试探性执行语句组1,如,如果语句组果语句组1在执行过程中出

13、现错误,则将错在执行过程中出现错误,则将错误信息赋给保留的误信息赋给保留的lasterr变量,并转去执行变量,并转去执行语句组语句组2。这种试探性执行语句是其他高级这种试探性执行语句是其他高级语言所没有的。语言所没有的。23MATLAB程序设计(2) 例5.7 矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。 A=1,2,5;4,5,6;B=7,8,9;10,11,12;try C=A*B;catch C=A.*B;endClasterr %显示出错原因显示出错原因24MATLAB程序设计(2)5.4 循环结构5.4.1 for5.4.1 fo

14、r语句语句1)语句格式: for 循环变量=表达式1:表达式2:表达式5 循环体语句 end2)说明: (1)首先计算三个表达式的值;首先计算三个表达式的值;25MATLAB程序设计(2) (2) 再将表达式再将表达式1的值赋给循环变量,如果的值赋给循环变量,如果此时循环变量的值介于表达式此时循环变量的值介于表达式1和表达式和表达式5的值之间,则执行循环体语句,否则结束的值之间,则执行循环体语句,否则结束循环的执行。执行完一次循环之后,循环循环的执行。执行完一次循环之后,循环变量自增一个表达式变量自增一个表达式2的值的值; (3)然后再判断循环变量的值是否介于表达然后再判断循环变量的值是否介于

15、表达式式1和表达式和表达式5之间之间,如果满足仍然执行循环如果满足仍然执行循环体,直至不满足为止。这时将结束体,直至不满足为止。这时将结束for语句语句的执行,而继续执行的执行,而继续执行for语句后面的语句。语句后面的语句。26MATLAB程序设计(2)例5.8 已知求y的表达式,当n=100时,求y的值。 程序如下:程序如下:y=0;n=100;for i=1:n y=y+1/i/i;endy 在实际在实际MATLAB编编程中,为提高程序程中,为提高程序的执行速度,常用的执行速度,常用向量运算来代替循向量运算来代替循环操作:环操作: n=100; i=1:n; f=1./i.2; y=su

16、m(f)27MATLAB程序设计(2) 例5.9 求定积分 程序如下:程序如下:a=0;b=3*pi;n=1000; h=(b-a)/n;x=a:h:b; f=exp(-0.5*x).*sin(x+pi/6);for i=1:n s(i)= (f(i)+f(i+1)*h/2ends=sum(s)事实上,事实上,MATLAB提供提供了有关数值积分了有关数值积分的标准函数,实的标准函数,实际应用中可直接际应用中可直接调用这些函数求调用这些函数求数值积分。数值积分。28MATLAB程序设计(2) 注意:for语句更一般的格式: for 循环变量=矩阵表达式 循环体语句 end 说明:执行过程是依次将

17、矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。实际上,“表达式1:表达式2:表达式5”是一个仅为一行的矩阵(行向量),因而列向量是单个数据。29MATLAB程序设计(2) 例5.10 已知5个学生4门功课的成绩,求每名学生的总成绩。s=0;a=65,76,56,78; 98,85,74,85; 76,67,78,79; 98,58,42,75; 67,89,76,87;for k=a s=s+k;Enddisp(s);30MATLAB程序设计(2) 5.4.2 while5.4.2 while语句语句 1)格式: while (条件) 循环体语句 end 2)说明:(1

18、)执行过程:若条件成立执行过程:若条件成立,则执行循环体语句,执则执行循环体语句,执行后再判断条件是否成立行后再判断条件是否成立,如果不成立则跳出循环如果不成立则跳出循环;(2)与循环结构相关的还有一个与循环结构相关的还有一个break语句,当在循语句,当在循环体内执行到该语句时,程序将跳出循环。该语句环体内执行到该语句时,程序将跳出循环。该语句一般与一般与if语句配合使用。语句配合使用。31MATLAB程序设计(2)32MATLAB程序设计(2) 例5.11 已知求y的表达式,当n=100时,求y的值。 y=0; i=1; while 1 f=1/i/i; y=y+f; if i=100 b

19、reak; end i=i+1; end y33MATLAB程序设计(2) 5.4.3 5.4.3 循环嵌套循环嵌套1)如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。2)要特别注意内、外循环之间的关系,以及各语句放置的位置,不要搞错。3)3)可跳出循环的指令有可跳出循环的指令有break和continue 在执行在执行keyboardkeyboard指令后需要返回正在执指令后需要返回正在执行程序的指令是行程序的指令是return 。34MATLAB程序设计(2) 例5.12 用筛选法求某自然数范围内的全部素数。 程序如下:程序如下:m=input(m=);

20、p=2:m;for i=2:sqrt(m) n=find(rem(p,i)=0&p=i); p(n)=;endp35MATLAB程序设计(2)5.5 函数文件5.5.1 5.5.1 函数文件的基本结构函数文件的基本结构 1)函数文件由function语句引导;2)基本结构:function 输出形参表=函数名(输入形参表) 注释说明部分 函数体语句36MATLAB程序设计(2)(1)函数文件名函数文件名: 函数文件名与函数名可以不相函数文件名与函数名可以不相同同;当两者不同时,当两者不同时,MATLAB将忽略函数名而将忽略函数名而确认函数文件名,故调用时使用函数文件名。确认函数文件名,故调用时

21、使用函数文件名。(2) 注释说明部分:注释说明部分: 紧随函数文件引导行之后以紧随函数文件引导行之后以%开头的第一开头的第一 注释行;注释行; 第一注释行及之后连续的注释行;第一注释行及之后连续的注释行; 与在线帮助文本相隔一空行的注释行。与在线帮助文本相隔一空行的注释行。 3)说明:37MATLAB程序设计(2) 例例5.13 5.13 编写函数文件求半径为编写函数文件求半径为r r的圆的面积和周长。的圆的面积和周长。 function s,p=fcircle(r) %CIRCLE calculate the area and perimeter of a circle of radil r

22、 %r 圆半径圆半径 %s 圆面积圆面积 %p 圆周长圆周长 s=pi*r*r; p=2*pi*r; 将以上函数文件以文件名将以上函数文件以文件名fcircle.m存入存入c:matlabwork下,然后在下,然后在MATLAB命令窗口命令窗口调用该函数:调用该函数: s,p=fcircle(10)38MATLAB程序设计(2)5.6 全局变量和局部变量1)定义:命令global; 2)说明:函数文件的内部变量是局部的,与其他函数文件及MATLAB工作空间相互隔离。39MATLAB程序设计(2)例5.17 全局变量应用示例 1)先建立函数文件)先建立函数文件wadd.m,该函数将输入的,该函数

23、将输入的参数加权相加。参数加权相加。 function f=wadd(x,y) global ALPHA BETA f=ALPHA*x+BETA*y; 2)在命令窗口中输入:)在命令窗口中输入: global ALPHA BETA ALPHA=1; BETA=2; s=wadd(1,2)40MATLAB程序设计(2)补充:n n1、Matlab预定义变量Inf和nargin的含义分别是无穷大、函数输入总量数。 n n2、eps是机器阈值:比2小的最大数是2-eps ;比2大的最小数是2+eps;n n alpha(v):对面、块、象三种图形对象的透明度加以控制;n n控制浓淡的函数shadin

24、g函数; n nMatlab预定义变量realmin和eps的含义分别是最小正实数、机器零阈值 ;n nNaN是非数,inf+NaN ?0/0+1 ?inf-inf ?inf/inf ?41MATLAB程序设计(2)编程综合练习n n指令阅读n n有指令如下:clearsyms w X t u v x yk=sym(4)A=sin(x)+k+u*w*v则findsym(A,1),findsym(A,2),findsym(A)三条指令的执行结果分别是什么?42MATLAB程序设计(2)编程综合练习findsym(A,1)xfindsym(A,2)x,wfindsym(A)u, v, w, x43

25、MATLAB程序设计(2)编程综合练习n n程序阅读clearclearx=1:4x=1:4y=linspace(1,2,2)y=linspace(1,2,2)X,Y=meshgrid(x,y)X,Y=meshgrid(x,y)则如下三个指令的运算结果分别是什么?则如下三个指令的运算结果分别是什么?X+YX+YX*(Y)X*(Y)X.*YX.*Y44MATLAB程序设计(2)编程综合练习 X+YX+Yansans = = 2 3 4 5 2 3 4 5 3 4 5 6 3 4 5 6 X*(Y)X*(Y)ansans = = 10 20 10 2010 2010 20 X.*YX.*Yansa

26、ns = = 1 2 3 4 1 2 3 4 2 4 6 8 2 4 6 845MATLAB程序设计(2)编程综合练习n n指令阅读如下指令执行后如下指令执行后q1q1、q2q2、q3q3、q4q4、q5q5、q6q6的值分别是什么?的值分别是什么?clearcleara=1;b=2;c=3;d=4;a=1;b=2;c=3;d=4;Mn=a,b;c,dMn=a,b;c,dMc=a,b;c,dMc=a,b;c,dMs=sym(Mc)Ms=sym(Mc)q1=size(Mn)q1=size(Mn)q2=size(Mc)q2=size(Mc)q3=size(Ms)q3=size(Ms)q4=clas

27、s(Mn)q4=class(Mn)q5=class(Mc)q5=class(Mc)q6=class(Ms)q6=class(Ms)46MATLAB程序设计(2)编程综合练习n n指令阅读q1 =q1 = 2 2 2 2q2 =q2 = 1 9 1 9q3 =q3 = 2 2 2 2q4 =q4 =doubledoubleq5 =q5 =charcharq6 =q6 =symsym47MATLAB程序设计(2)clearclearA=zeros(2,4)A=zeros(2,4)A(:)=2:2:16A(:)=2:2:16q1=A(2,4)q1=A(2,4)q2=A(5)q2=A(5)q3=A(e

28、nd-3)q3=A(end-3)运算结束后,运算结束后,q1q1、q2q2、q3q3的结果分的结果分别是什么?别是什么? q1 =q1 = 2 2 2 2q2 =q2 = 1 9 1 9q3 =q3 = 2 2 2 2clearclearA=zeros(2,6);A=zeros(2,6);A(:)=1:12;A(:)=1:12;q1=A(2,4);q1=A(2,4);q2=A(8);q2=A(8);q3=A(:,1,3);q3=A(:,1,3);运算结束后,运算结束后,A A、q1q1、q2q2、q3q3、q4q4、q5q5、q6q6的结果分别是什么的结果分别是什么 48MATLAB程序设计(

29、2)clearclearA=1:9A=1:9B=10-AB=10-Ar0=(A6)r0=(A2)y=find(x2)请写出请写出x x、y y的计算结果的计算结果 clearclearsyms a b t u v x ysyms a b t u v x yA=a+b*x,sin(t)+u;x*exp(-t),log(y)+vA=a+b*x,sin(t)+u;x*exp(-t),log(y)+v则则findsym(A,1),findsym(A,2),findsym(A)findsym(A,1),findsym(A,2),findsym(A)三条指令的执行结三条指令的执行结果分别是什么果分别是什么

30、 49MATLAB程序设计(2)编程综合练习n n如下指令执行后,数组A、变量q1、q2的值分别是什么?clearA=reshape(1:19,1,7)A(:,1,2)=q1=all(A(A10)q2=any(A(A26 | sz5 sc=按任意键退出 pause; return; end endend52MATLAB程序设计(2)n n编制一个编制一个MM函数文件。函数文件。MM函数(函数名称为:函数(函数名称为:test1test1)要求如下(假设输入)要求如下(假设输入均为正整数):均为正整数):1 1)当用户输入一个数时,返回小于这个数的所有奇数的)当用户输入一个数时,返回小于这个数的

31、所有奇数的和以及用户输入个数;和以及用户输入个数;2 2)当用户输入两个数时,返回第一个数除以第二)当用户输入两个数时,返回第一个数除以第二个数的余数以及用户输入个数;个数的余数以及用户输入个数;3 3)当用户输入三个或三个以上数时,提)当用户输入三个或三个以上数时,提示输入太多;示输入太多;4 4)需考虑用户输入量和输出量错误的情况;)需考虑用户输入量和输出量错误的情况;5 5)需考虑函数)需考虑函数说明(函数帮助文本)说明(函数帮助文本) function O1,O2=test1(A,B)%注释if nargin=0 error(没有参数可运算);elseif nargin=1 sum1=

32、0; for ii=1:A if (mod(ii,2)=1) sum1=sum1+ii; end end O1=sum1; O2=1;elseif nargin=2 O1=mod(A,B); O2=2;else error(输出参数太多);end53MATLAB程序设计(2)n n提示并等待用户输入,用户输入后一个字母,等待提示并等待用户输入,用户输入后一个字母,等待1 1秒后给出字母表秒后给出字母表中此字母后的字母,直到用户输入一个中此字母后的字母,直到用户输入一个z z结束,结束前提示用户按任结束,结束前提示用户按任意键,按键后结束。意键,按键后结束。zmb=abcdefghijklmno

33、pqrstuvwxyzwhile(1) tmp=input(请输入一个字母,s); if tmp=zmb(26) ls=按任一键退出程序 pause; return; end for k=1:26 if tmp=zmb(k) & k=26 pause(2) tmp=zmb(k+1) break; end endend54MATLAB程序设计(2)n n用间距为用间距为0.10.1的水平线和垂直线均匀分割的矩形域,在所有水平线和的水平线和垂直线均匀分割的矩形域,在所有水平线和垂直线交点上编程计算函数的值。要求分别用非向量化程序和向量化垂直线交点上编程计算函数的值。要求分别用非向量化程序和向量化程序分别实现。程序分别实现。 clear;x=-2:0.1:2;y=(-4:0.1:4);N=length(x);M=length(y);for ii=1:M for jj=1:N x0(ii,jj)=x(jj); y0(ii,jj)=y(ii); z0(ii,jj)=sin(abs(x(jj)*abs(ii) endendX,Y=meshgrid(x,y);Z=sin(abs(X.*Y)55MATLAB程序设计(2)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号