《教程ppt课件编程》由会员分享,可在线阅读,更多相关《教程ppt课件编程(47页珍藏版)》请在金锄头文库上搜索。
1、1,Lecture 3 MATLAB程序设计,2,基本要求: (1)学会 Matlab 的M文件的编写方法,包括命令文件和函数文件。了解M件的调试命令和调试方法; (2) 熟练掌握 Matlab 的程序结构(顺序结构、循环结构和分支结构)与流程控制语句 . Outline M-file(M文件); 数据的输入和输出; 程序设计; 函数文件; 全局变量和局部变量,Lecture3 Matlab语言程序设计,3,MATLAB有两种工作方式:,交互式的命令行工作方式,M文件的程序工作方式,4,一. M文件,5,一. M文件,用MATLAB语言编写的程序,称为M文件。 M文件有两类:命令文件和函数文件
2、。 命令文件:没有输入参数,也不返回输出参数。 函数文件:可以输入参数,也可返回输出参数。,6,M文件的建立与编辑,建立新的M文件: 从MATLAB命令窗口的File菜单中选择New菜单项,再选择M-file命令。,一. M文件,编辑已有的M文件: 从MATLAB命令窗口的Flie菜单中选择Open M-file命令。,7,命令文件,将需要运行的命令编辑到一个命令文件中,然后在MATLAB命令窗口输入该命令文件的名字,就会顺序执行命令文件中的命令。 【例1】 建立一个命令文件将变量a,b的值互换。,一. M文件,a=1:9; b=11,12,13;14,15,16;17,18,19; c=a;
3、a=b;b=c; a b 在MATLAB的命令窗口中输入e31,将会执行该命令文件。,8,二数据的输入输出,9,1. input函数:用于向计算机输入一个参数。 调用格式: A=input(提示信息,选项); 注:s选项,则允许用户输入一个字符串。 例如想输入一个人的姓名,可采用命令 xm=input(Whats your name:,s) 【例2】 求一元二次方程a2 +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)
4、将该程序以aa.m文件存盘,然后运行aa.m文件。,10,2 pause函数:暂停程序的执行。 调用格式: pause(延迟秒数) 注:如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。 另: 若要强行中止程序的运行可使用Ctrl+C命令。,二数据的输入输出,3 disp函数:命令窗口输出函数。 调用格式: disp(输出项) 注:输出项为字符串或矩阵。 例如 A=Hello,MATLAB; disp(A) 输出为: Hello,MATLAB,例3: 求一元二次方程ax2 +bx+c=0的根。 程序如下: a=input(a=?); b=input(b=?);
5、 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);,12,三程序设计,13,三程序设计,1、程序结构与流程控制语句,a) 顺序结构,14,b) 条件结构,if- else- end 语句,三程序设计,或,15,switch语句,三程序设计,16,c) 循环结构,while 语句:,for语句:,for 变量=初值:增量:结束值 程序模块; end,三程序设计,17,break语句循环结构,continue 语句循环结构,三程序设计,d
6、) 其它与流程控制有关的语句,if,if,18,(一)选择结构,选择结构的语句有if语句和switch语句。 1 if语句 格式一: if 条件 语句组 end,三程序设计,格式二: if 条件 语句组1 else 语句组2 end,19,(一)选择结构,格式三: if 条件1 语句组1 elseif 条件2 语句组2 elseif 条件m 语句组m else 语句组m+1 end,三程序设计,20,折扣问题 book=20; number=40; sums=0.0; if number=30 sums=book*number*0.7; end sums sums = 560,绘出函数 的图像
7、。 x=-3:0.1:3; if x=1 y=2*x.2+1; plot(x,y) elseif -1x1 y=5; plot(x,y) else y=-x.3; plot(x,y) end,三程序设计,21,【例4】 输入三角形的三条边,求面积。,A=input(请输入三角形的三条边:); if A(1)+A(2)A(3) else disp(不能构成一个三角形。) end 运行: 请输入三角形的三条边:4 5 6 9.9216,三程序设计,(一)选择结构,22,【例5】 输入一个字符,若为大写字母,则输出其后继字符,若为小写字母,则输出其前导字符,若为其他字符则原样输出。,c=input(
8、,s); if c=A end,三程序设计,(一)选择结构,23,2 switch语句,switch语句根据变量或表达式的取值不同,分别执行不同的语句。其格式为: switch 表达式 case 值1 语句组1 case 值2,语句组2 case 值m 语句组m otherwise 语句组m+1 end,三程序设计,(一)选择结构,24,【例6】 根据变量 num 的值来决定显示的内容。,num=input(请输入一个数); switch num case -1 disp(I am a teacher.); case 0 disp(I am a student.); case 1 disp(Y
9、ou are a teacher.); otherwise disp(You are a student.); end,三程序设计,(一)选择结构,例7: 某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示): price200 没有折扣 200price500 3%折扣 500price1000 5%折扣 1000price2500 8%折扣 2500price5000 10%折扣 5000price 14%折扣 输入所售商品的价格,求其实际销售价格。,程序如下: price=input(请输入商品价格); switch fix(price/100) case 0,1
10、 %价格小于200 rate=0; case 2,3,4 %价格大于等于200但小于500 rate=3/100; case num2cell(5:9) %价格大于等于500但小于1000 rate=5/100; case num2cell(10:24) %价格大于等于1000但小于2500 rate=8/100; case num2cell(25:49) %价格大于等于2500但小于5000 rate=10/100; otherwise %价格大于等于5000 rate=14/100; end price=price*(1-rate) %输出商品实际销售价格,27,(二)循环结构,实现循环结
11、构的语句:for语句和while语句。 1 for语句: 格式: for 循环变量=表达式1:表达式2:表达式3 循环体语句 end 注:其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表达式2可以省略。,三程序设计,28,2 while语句 格式为: while (条件) 循环体语句 end,三程序设计,(二)循环结构,29, sum=0; i=0; while(i sum sum = 14196774,举例:,三程序设计, for I=1:10 A(I)=1/(I+1) ; end A A = Columns 1 through 7 0.50
12、00 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 Columns 8 through 10 0.1111 0.1000 0.0909,30,3 循环的嵌套,如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。 多重循环的嵌套层数可以是任意的。可以按照嵌套层数,分别叫做二重循环、三重循环等。处于内部的循环叫作内循环,处于外部的循环叫作外循环。,三程序设计,(二)循环结构,31,【例8】 求100,1000以内的全部素数。,n=0; for m=100:1000 flag=1; j=m-1; i=2; while i=j end
13、,i=i+1; end if flag n=n+1; prime(n)=m; end end prime %变量prime存放素数,三程序设计,(二)循环结构,例9: 一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙花数。 程序如下: for m=100:999 m1=fix(m/100); %求m的百位数字 m2=rem(fix(m/10),10); %求m的十位数字 m3=rem(m,10); %求m的个位数字 if m=m1*m1*m1+m2*m2*m2+m3*m3*m3 disp(m) end end,例10: 求100,200之间第一个能被21整除的整数。 程
14、序如下: for n=100:200 if rem(n,21)=0 continue end break end n,例11: 若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。求1,500之间的全部完数。 程序:for m=1:500 s=0; for k=1:m/2 if rem(m,k)=0 s=s+k; end end if m=s disp(m); end end,35,pause 指令使程序运行停止,等待用户按任意键继续; input 指令提示用户从键盘输入数值、字符串或表达式,并接受输入; disp指令在屏幕上显示字符串; echo on指令显示其后
15、所有执行文件的指令; echo off指令关闭其后所有执行文件的指令显示。,三程序设计,36,四函数文件,37,函数文件是另一种形式的M文件,每一个函数文件都定义一个函数。事实上,MATLAB提供的标准函数大部分都是由函数文件定义的。,四. 函数文件,1函数文件格式,函数文件由function语句引导,其格式为: function 输出形参表=函数名(输入形参表) 注释说明部分 函数体 注:其中函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于1个时,则应该用方括号括起来。,38,2函数调用,函数文件编制好后,就可调用函数进行计算了。如上面定义ffib函数后,调用它求小于2000的Fibonacci数。 函数调用的一般格式是: 输出实参表=函数名(输入实参表),四. 函数文件,例12: ,计算f(1)f(2)+f2(3),f(5), f(6), .,f(100) 首先建立一个M函数:fun1.m function Y= fun1(x) Y=(x3 - 2*x2 + x - 6.3)/(x2 + 0.05*x - 3.14); 在指令窗口运行以下指令: fun1(1)*fun1(2)+fun1(3)*fun1(3) ans = -12.6023,