第二节MATLAB程序设计_第1页
第二节MATLAB程序设计_第2页
第二节MATLAB程序设计_第3页
第二节MATLAB程序设计_第4页
第二节MATLAB程序设计_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

1、第二节第二节 MATLAB程序设计程序设计 1 M文件文件 2 程序控制结构程序控制结构 3 函数文件函数文件 4 程序举例程序举例 5 程序调试程序调试 1 M文件文件 1.1 M文件概述文件概述 用用MATLAB语言编写的程序,称为语言编写的程序,称为M文件。文件。M文件可文件可 以根据调用方式的不同分为两类:以根据调用方式的不同分为两类: 1、命令文件、命令文件(也称为脚本文件也称为脚本文件)(Script File) 2、函数文件、函数文件(Function File)。 命令文件命令文件(Script File): 命令简单罗列,使用主窗口中变量,命令简单罗列,使用主窗口中变量, 输

2、出也存放在主窗口对应的内存中。输出也存放在主窗口对应的内存中。 函数文件函数文件(Function File):除命令罗列外,还有参数的输入和除命令罗列外,还有参数的输入和 输出操作,并且具有固定的格式。输出操作,并且具有固定的格式。 1、首先建立命令文件并以文件名、首先建立命令文件并以文件名f2c.m存盘。存盘。 clear; %清除工作空间中的变量清除工作空间中的变量 f = input( 输入华氏温度输入华氏温度f= ); c = 5*(f-32)/9 2、 然后在然后在MATLAB的命令窗口中输入的命令窗口中输入f2c,将会执行该命,将会执行该命 令文件,执行情况为:令文件,执行情况为

3、: l f2c l 输入华氏温度输入华氏温度f=73 l c = l 22.7778 例例1 建立命令文件将华氏温度建立命令文件将华氏温度 f 转换为摄氏温度转换为摄氏温度 c。 1.2 M文件的建立与打开文件的建立与打开 1.2.1建立新的建立新的M文件文件 为建立新的为建立新的M文件,启动文件,启动MATLAB文本编辑器有文本编辑器有3种方法:种方法: (1) 菜单操作:从菜单操作:从File菜单中选择菜单中选择New菜单项,再选择菜单项,再选择M-file 命令,则出现命令,则出现MATLAB 文本编辑器窗口。文本编辑器窗口。 (2) 命令操作:在命令操作:在MATLAB命令窗口输入命令

4、命令窗口输入命令edit,则启动,则启动 MATLAB文本编辑器。文本编辑器。 M文件是一个文本文件,它可以用任何编辑程序来建立文件是一个文本文件,它可以用任何编辑程序来建立 和编辑。和编辑。 (3) 命令按钮操作:单击命令按钮操作:单击MATLAB主窗口工具栏上的主窗口工具栏上的New M-File命令按钮。命令按钮。 1.2.2 打开已有的打开已有的M文件文件 打开已有的打开已有的M文件,也有文件,也有3种方法:种方法: (1) 菜单操作:从菜单操作:从File菜单中选择菜单中选择Open命令,则出现命令,则出现Open 对话框,在对话框中选中所需打开的对话框,在对话框中选中所需打开的M文

5、件。文件。 (2) 命令操作。在命令操作。在MATLAB命令窗口输入命令:命令窗口输入命令: edit 文件名文件名 则打开指定的则打开指定的M文件。文件。 (3) 命令按钮操作。单击主窗口工具栏上的命令按钮操作。单击主窗口工具栏上的Open File命令按命令按 钮,则在弹出对话框中选择所需打开的钮,则在弹出对话框中选择所需打开的M文件。文件。 2 程序控制结构程序控制结构 2.1 顺序结构顺序结构普通结构普通结构 2.1.1数据的输入数据的输入 从键盘输入数据,则可以使用从键盘输入数据,则可以使用input函数来进行,该函数的函数来进行,该函数的 调用格式为:调用格式为: 变量变量 = i

6、nput(提示信息,选项提示信息,选项); 其中提示信息为一个字符串,用于提示用户输入什么样的数据。其中提示信息为一个字符串,用于提示用户输入什么样的数据。 如果在如果在input函数调用时采用函数调用时采用s选项,则允许用户输入选项,则允许用户输入 一个字符串一个字符串;如果省略则不识别字符串。如果省略则不识别字符串。 例如,想输入一个人的姓名,可采用命令:例如,想输入一个人的姓名,可采用命令: xm=input( Whats your name? , s ); 2.1.2数据的输出数据的输出 MATLAB提供的命令窗口输出函数主要有提供的命令窗口输出函数主要有disp函数,其调用函数,其调

7、用 格式为格式为 disp(输出项输出项1,输出项输出项2,) 其中输出项既可以为字符串,也可以为矩阵。其中输出项既可以为字符串,也可以为矩阵。 例例2 输入输入x,y的值,并将它们的值互换后输出。的值,并将它们的值互换后输出。 程序如下:程序如下: x=input(Input x please.); y=input(Input y please.); z=x; x=y; y=z; disp(x); disp(y); 例例3 求一元二次方程求一元二次方程ax2 +bx+c=0的根。的根。 程序如下:程序如下: a=input(a=?); b=input(b=?); c=input(c=?);

8、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) ); la=?3 lb=?6 lc=?9 lx1=-1+1.4142i,x2=-1-1.4142i 函数函数num2str(),把数值转化为字符串。把数值转化为字符串。 2.1.3程序的暂停程序的暂停 1、暂停执行可以使用、暂停执行可以使用pause指令,其调用格式为:指令,其调用格式为: pause(延迟秒数延迟秒数) 如:如: pause (3) 则延时则延时3秒秒 如果省略延迟时间,则将暂停程

9、序,直到用户按如果省略延迟时间,则将暂停程序,直到用户按 任一键后程序继续执行。任一键后程序继续执行。 2、keyboard 指令没有调用参数,每次该指令出现,指令没有调用参数,每次该指令出现, 则用户获得操作权,程序暂停,同时命令提示符则用户获得操作权,程序暂停,同时命令提示符 变化为变化为K,用户可以输入其他指令运行,如果想用户可以输入其他指令运行,如果想 继续程序的执行,只需输入继续程序的执行,只需输入return并按下回车。并按下回车。 3、要强行中止程序的运行可使用、要强行中止程序的运行可使用Ctrl+break操作。操作。 2.2 选择结构选择结构 1if语句语句 在在MATLAB

10、中,中,if语句有语句有3种格式。种格式。 (1) 单分支单分支if语句:语句: 实例:实例: if 条件条件 if a, , 小于小于 , =, =, 小于等小于等 于于 =, 30 语句组语句组1 b=a-3; else else 语句组语句组2 b=a+3; end end 当条件成立时,执行语句组当条件成立时,执行语句组1,否则执行语,否则执行语 句组句组2,语句组,语句组1或语句组或语句组2执行后,再执行执行后,再执行if语语 句的后继语句。句的后继语句。 程序如下:程序如下: x=input(请输入请输入x的值的值:); if x=1 y=10; elseif (x-1) else

11、 y=-10; end 例例5:分段函数:分段函数 switch语句根据表达式的取值不同,分别执行不同语句根据表达式的取值不同,分别执行不同 的语句,其语句格式为:的语句,其语句格式为: switch 表达式表达式 case 表达式表达式1 语句组语句组1 case 表达式表达式2 语句组语句组2 case 表达式表达式m 语句组语句组m otherwise 语句组语句组n end 2switch语句语句 price 200 没有折扣没有折扣 200 price500 3%折扣折扣 500 price1000 5%折扣折扣 1000price2500 8%折扣折扣 2500price fix(

12、-0.9 -0.1 1.1 1.5) lans = l 0 0 1 1 l同类函数有: l四舍五入取整round() l向正无穷方向取整ceil() l向负无穷方向取整floor() 元胞数组(cell array):允许存放,操作各种不同类型, 不同大小的数据。 l A=rand(2,2); l B=rand(3,3); l C=good; l D=0; l X(1,1)=A; l X(1,2)=B; l X(2,1)=C; l X(2,2)=D l celldisp(X(1,1) lans1 = l 0.9501 0.6068 l 0.2311 0.4860 2.3 循环结构循环结构 1f

13、or语句语句 for语句的格式为:语句的格式为: for 循环变量循环变量=表达式表达式1:表达式表达式2:表达式表达式3 循环体语句循环体语句 end 其中表达式其中表达式1的值为循环变量的初值,的值为循环变量的初值, 表达式表达式2的值为步长,的值为步长, 表达式表达式3的值为循环变量的终值。的值为循环变量的终值。 步长为步长为1时,表达式时,表达式2可以省略。可以省略。 for m=100:999 m1=fix(m/100); %求求m的百位数字的百位数字 m2=rem(fix(m/10),10); %求求m的十位数字的十位数字 m3=rem(m,10); %求求m的个位数字的个位数字

14、if m=m1*m1*m1+m2*m2*m2+m3*m3*m3 disp(m) end end 其中:其中:rem为求余数为求余数 例例8 一个三位整数各位数字的立方和等于该数本身则称该一个三位整数各位数字的立方和等于该数本身则称该 数为水仙花数。输出全部水仙花数。数为水仙花数。输出全部水仙花数。 程序如下:程序如下: rem(4,3) ans = 1 rem(5,3) ans = 2 rem(6,3) ans = 0 程序如下:程序如下: y=0; n=100; for i=1:n y=y+1/(2*i-1); end 例例3-9 已知已知 ,当,当n=100时,求时,求y的值。的值。 在实

15、际在实际MATLAB编程中,采用循环语句会降低其执行速度,编程中,采用循环语句会降低其执行速度, 所以前面的程序通常由下面的程序来代替:所以前面的程序通常由下面的程序来代替: n=100; i=1:2:2*n-1; y=sum(1./i); 1*2 1 5 1 3 1 1 n y sum() 为求和函数 for语句更一般的格式为:语句更一般的格式为: for 循环变量循环变量=矩阵表达式矩阵表达式 循环体语句循环体语句 end 执行过程是依次将矩阵的各列元素赋给循环变量,然后执执行过程是依次将矩阵的各列元素赋给循环变量,然后执 行循环体语句,直至各列元素处理完毕。行循环体语句,直至各列元素处理

16、完毕。 例例10 写出下列程序的执行结果。写出下列程序的执行结果。 s=0; a=12,13,14;15,16,17;18,19,20;21,22,23; for k=a s=s+k; end disp(s); 求a中 所有元 素之和 2while语句语句 while语句的一般格式为:语句的一般格式为: while (条件条件) 循环体语句循环体语句 end 其执行过程为:若条件成立,则执行循环体语句,其执行过程为:若条件成立,则执行循环体语句, 执行后再判断条件是否成立,如果不成立则跳出循执行后再判断条件是否成立,如果不成立则跳出循 环。环。 程序如下:程序如下: sum=0; 和和 cnt

17、=0; 输入数值的个数输入数值的个数 val=input(Enter a number (end in 0):); while (val=0) sum=sum+val; cnt=cnt+1; val=input(Enter a number (end in 0):); end if (cnt 0) sum mean=sum/cnt end 例例11 从键盘输入若干个数,当输入从键盘输入若干个数,当输入0时结束输入,求这些时结束输入,求这些 数的平均值和它们之和。数的平均值和它们之和。 3break语句和语句和continue语句语句 与循环结构相关的语句还有与循环结构相关的语句还有break语

18、句和语句和continue 语句。它们一般与语句。它们一般与if语句配合使用。语句配合使用。 break语句用于终止循环的执行。当在循环体内执行语句用于终止循环的执行。当在循环体内执行 到该语句时,程序将跳出循环,继续执行循环语句的下一到该语句时,程序将跳出循环,继续执行循环语句的下一 语句。语句。 continue语句控制跳过循环体中的某些语句。当在循语句控制跳过循环体中的某些语句。当在循 环体内执行到该语句时,程序将跳过循环体中所有剩下的环体内执行到该语句时,程序将跳过循环体中所有剩下的 语句,继续下一次循环。语句,继续下一次循环。 程序如下:程序如下: for n=100:200 if

19、rem(n,21)=0 continue end break end n 例例12 求求100,200之间第一个能被之间第一个能被21整除的整数。整除的整数。 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 4循环的嵌套循环的嵌套 如果一个循环结构的循环体又包括一个循环结构,如果一个循环结构的循环体又包括一个循环结构, 就称为循环的嵌套,或称为多重循环结构。就称为循环的嵌套,或称为多重循环结构。 例例13 若一个数等于它的各个真因子之和,则称该数为完数,若一个数等于它的各个真因子

20、之和,则称该数为完数, 如如6=1+2+3,所以,所以6是完数。求是完数。求1,500之间的全部完数。之间的全部完数。 3 函数文件(用户自定义函数)函数文件(用户自定义函数) 3.1 函数文件的基本结构函数文件的基本结构 函数文件由函数文件由function语句引导,其基本结构为:语句引导,其基本结构为: function 输出形参表输出形参表=函数名函数名(输入形参表输入形参表) 注释说明部分注释说明部分 函数体语句函数体语句 1、以、以function开头的一行为引导行,表示该开头的一行为引导行,表示该M文件是文件是 一个函数文件。并且保存的文件名和函数名相同。一个函数文件。并且保存的文

21、件名和函数名相同。 2、函数名的命名规则与变量名相同。、函数名的命名规则与变量名相同。 3、输入形参为函数的输入参数,输出形参为函数的输、输入形参为函数的输入参数,输出形参为函数的输 出参数。当输出形参多于一个时,则用方括号括起来。出参数。当输出形参多于一个时,则用方括号括起来。 例例14 编写函数文件求半径为编写函数文件求半径为r的圆的面积和周长。的圆的面积和周长。 子函数子函数 1、在某个函数文件中定义的其他函数,成为当前函数文件在某个函数文件中定义的其他函数,成为当前函数文件 的子函数,一般只能被当前函数文件调用。的子函数,一般只能被当前函数文件调用。 2、基本结构:在函数文件、基本结构

22、:在函数文件fun1.m中中 function y=fun1(x1,x2) y=fun2(x1,x2); function y=fun2(a,b) y=fun3(a,b); function y=fun4(e,f) 各个子函数可以互相调用各个子函数可以互相调用 y=e+f ; function y=fun3(c,d) y=fun4(c,d); 例15:绘制草帽函数 3.2 函数调用函数调用 函数调用的一般格式是:函数调用的一般格式是: 输出实参表输出实参表=函数名函数名(输入实参表输入实参表) 注意注意: 1、输入参数用、输入参数用( )输入输入 输出参数用输出参数用 输入输入 2、 函数调用

23、时各实参出现的顺序、个数,应与函函数调用时各实参出现的顺序、个数,应与函 数定义时形参的顺序、个数一致,否则会出错。数定义时形参的顺序、个数一致,否则会出错。 3、函数调用时,先将实参传递给相应的形参,从、函数调用时,先将实参传递给相应的形参,从 而实现参数传递,然后再执行函数的功能。而实现参数传递,然后再执行函数的功能。 l s,p=fcircle(5) ls = l 78.5398 lp = l 31.4159 lme 例例16 利用函数的递归调用,求利用函数的递归调用,求n!。!。 n!本身就是以递归的形式定义的:本身就是以递归的形式定义的: 显然,求显然,求n!需要求需要求(n-1)!

24、,这时可采用递归调用。递归,这时可采用递归调用。递归 调用函数文件调用函数文件factor.m如下:如下: function f=factor(n) if n factor(5) lans = l 120 l y=factor(6); l y ly = l 720 3.3 函数参数的可调性函数参数的可调性 在调用函数时,在调用函数时,MATLAB用两个永久变量用两个永久变量 nargin nargout 分别记录调用该函数时的输入实参和输出实参的个数。分别记录调用该函数时的输入实参和输出实参的个数。 只要在函数文件中包含这两个变量,就可以准确地知道只要在函数文件中包含这两个变量,就可以准确地知

25、道 该函数文件被调用时的输入输出参数个数,从而决定函该函数文件被调用时的输入输出参数个数,从而决定函 数如何进行处理。数如何进行处理。 function fout=charray(a,b,c) if nargin=1 fout=a; elseif nargin=2 fout=a+b; elseif nargin=3 fout=(a*b*c)/2; end 例例17 nargin用法示例。用法示例。 函数文件函数文件charray.m: l y=charray(2) ly = l 2 l y=charray(2,3) ly = l 5 l y=charray(2,3,4) ly = l 12 例

26、例18 全局变量应用示例。定义两个函数全局变量应用示例。定义两个函数 l function y = g1(m,n) lglobal M N lM = m; lN = n; ly = g2(1,1); 3.4 全局变量与局部变量全局变量与局部变量 全局变量用全局变量用global命令定义,格式为:命令定义,格式为: global 变量名变量名 lfunction y = g2(a,b) lglobal M N ly = a*M+b*N; 调用: l g1(2,5) lans = l 7 3.4 程序举例程序举例 例例19 猜数。首先由计算机产生猜数。首先由计算机产生1,100之间的均匀分布之间的

27、均匀分布 的一个随机整数,然后由用户猜测所产生的随机数。的一个随机整数,然后由用户猜测所产生的随机数。 根据用户猜测的情况给出不同提示:根据用户猜测的情况给出不同提示: 如猜测的数大于产生的数,则显示如猜测的数大于产生的数,则显示“High”, 小于则显示小于则显示“Low”, 等于则显示等于则显示“You win”,同时退出。,同时退出。 用户最多可以猜用户最多可以猜7次。次。 提示:随机数生成指令提示:随机数生成指令 rand 答案:答案: lfunction y=play n = 0; m = ceil(100*rand); if m = 0 m = 1; end while(nm) d

28、isp(High); elseif (x fun = 2*a+b2+3*a*b ; y = myfun(fun,4,5) y = 93 4 程序调试程序调试 4.1 程序调试概述程序调试概述 一般来说,应用程序的错误有两类,一类一般来说,应用程序的错误有两类,一类 是语法错误,另一类是运行时的错误。语法错是语法错误,另一类是运行时的错误。语法错 误包括词法或文法的错误,例如函数名的拼写误包括词法或文法的错误,例如函数名的拼写 错、表达式书写错等。错、表达式书写错等。 程序运行时的错误是指程序的运行结果有错误,程序运行时的错误是指程序的运行结果有错误, 这类错误也称为程序逻辑错误。这类错误也称为

29、程序逻辑错误。 4.2 调试器调试器 1Debug 该菜单项用于程序调试,需要与该菜单项用于程序调试,需要与Breakpoints菜菜 单项配合使用。单项配合使用。 2Breakpoints 共有共有6个菜单命令,前两个是用于在程序中设置个菜单命令,前两个是用于在程序中设置 和清除断点的,后和清除断点的,后4个是设置停止条件的,用于临时个是设置停止条件的,用于临时 停止停止M文件的执行,并给用户一个检查局部变量的机文件的执行,并给用户一个检查局部变量的机 会,相当于在会,相当于在M文件指定的行号前加入了一个文件指定的行号前加入了一个 keyboard命令。命令。 例:求素数 矩阵参数操作矩阵参

30、数操作 ln = rank(A) n 是矩阵是矩阵 A的秩的秩 lx = det(A) x 是矩阵是矩阵 A的行列式的行列式 lx = size(A) x 是由是由2个元素组成的行向个元素组成的行向 量,分别为行和列数量,分别为行和列数 lx = length(v) x 是向量是向量v的长度的长度 lx = trace(A) x是矩阵是矩阵A的迹的迹(对角元素之和对角元素之和) lx = norm(A) x 是向量或矩阵是向量或矩阵A的范数的范数 矩阵操作矩阵操作 lA = magic(n) A为为 n n 的魔方矩阵的魔方矩阵 lA = diag(v) 生成以向量生成以向量v各元素为对角线的

31、矩各元素为对角线的矩 阵阵 v = diag(A) 生成以矩阵生成以矩阵A各对角元素组成的各对角元素组成的 向量向量 lX = tril(A) X 是矩阵是矩阵A的下三角阵的下三角阵(包含对角包含对角 线线) lX = triu(A) X 是矩阵是矩阵A的上三角阵的上三角阵(包含对角包含对角 线线) 矩阵操作矩阵操作 lv = max(A) v 是矩阵是矩阵A各列最大值组成的向量,各列最大值组成的向量, 如果如果A为向量,则为向量,则v为最大值。为最大值。 lv = min(A) v对应最小值,用法同对应最小值,用法同max lv = sum(A) v为求和操作,用法同为求和操作,用法同max

32、 lv = mean(A) v为均值操作,用法同为均值操作,用法同max lA = sort(A,s) 升序排序操作,升序排序操作,s=1,逐列逐列 s=2,逐行逐行 lV = median(A,s) 求中间值操作求中间值操作, s的值同的值同sort lv = find(表达式表达式) 返回满足表达式条件的所有元素的序号返回满足表达式条件的所有元素的序号 常用函数常用函数 lchar 将数值转换为对应字符将数值转换为对应字符 如如:char(76) = L lsetstr 同同char ,在,在matlab7.0中被中被char代替代替 lint2str 将整数转换为字符串将整数转换为字符串 如如:int2str(76)= 76 lnum2str 可以转换小数,且可以设置有效数位数可以转换小数,且可以设置有效数位数 l num2str(1/11,4) = 0.09091 lstr2num 将字符串转换为数字将字符串转换为数字 如如:a= str2num(23.2) lupper lower 将大小写互相转换将大小写互相转换 如:如: lower(A)=a l a=1 2 2; l norm(a) lans = l 3 l A=mag

温馨提示

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

评论

0/150

提交评论