《matlab循环语句》由会员分享,可在线阅读,更多相关《matlab循环语句(9页珍藏版)》请在金锄头文库上搜索。
1、 matlab 基本语句1.循环语句 forfor i=s1:s3:s2循环语句组end解释:首先给 i 赋值 s1;然后,判断 i 是否介于 s1 与 s2 之间;如果是,则执行循环语句组,i=i+s3(否则,退出循环.);执行完毕后,继续下一次循环。例:求 1 到 100 的和,可以编程如下:sum=0for i=1:1:100sum=sum+iend这个程序也可以用 while 语句编程。注:for 循环可以通过 break 语句结束整个 for 循环.2.循环语句 while例:sum=0;i=1;while(i,=,,然后执行。 实现顺序结构的方法非常简单,只需将程序语句顺序排列即可
2、。 2 选择结构 在 MATLAB 中,选择结构可由两种语句来实现。 (1) if 语句 if 语句的最简单用法为: if 表达式; 程序模块; end if 语句的另一种用法为: if 表达式 程序模块 1 else 程序模块 2 end 例 1 使用 if 语句判断学生的成绩是否及格。 程序: clear n=input(输入 n= ) m=60; if n,r=不及格 else r=及格 end 练习一:将例 1 写入 M-文件编辑器,然后在 command window 调用这个程序。 当针对多个条件进行选择时,可以采用下面的格式: if 表达式 1 程序模块 1 elseif 表达式
3、 2 程序模块 2 elseif 表达式 n 程序模块 n else 程序模块 n+1 end 例 2 将百分之的学生成绩转换为五分制输出。 程序: clear n=input(输入 n= ) if n=90 chji=优秀 elseif n=80 chji=良好 elseif n=70 chji=中等 elseif n=60 chji=及格 else chji=不及格 end 练习二:将例 2 写入 M-文件编辑器,然后在 command window 调用这个程序。 (2) switch 语句 switch 语句可以替代多分支的 if 语句,而且 switch 语句简洁明了,可读性更好。其
4、格式为: switch 表达式 case 数值 1 程序模块 1 case 数值 2 程序模块 2 otherwise 程序模块 n end 其中的 otherwise 模块可以省略。 switch 语句的执行过程是:首先计算表达式的值,然后将其结果与每一个case 后面的数值依次进行比较,如果相等,则执行该 case 的程序模块;如果都不相等,则执行 otherwise 模块中的语句。如图 3 所示。例 3 用 switchcase 开关结构将百分制的学生成绩转换为五分制的成绩输出。 程序: clear x=58 switch fix(x/10) case 10,9 y=优秀 case 8
5、y=良好 case 7 y=中等 case 6 y=及格 otherwise y=不及格 end 练习三:将例 3 写入 M-文件编辑器,然后在 command window 调用这个程序。 3 循环结构 循环结构的流程图如图 4 所示它可以多次重复执行某一组语句。循环是计算机解决问题的主要手段。在 MATLAB 中,循环结构可以由两种语句结构实现。 (1) forend 循环结构。其格式为: for i=V,循环体结构,end 其中 V 为一个行向量,循环变量 i 每次从 V 中取一个数值,执行一次循环体的内容,如此下去,直到完成 V 中的所有分量,就自动结束循环体的执行。 例 4 计算 s
6、=12+22+52。 程序: a=1 2 5 ; s=0; for k=a, s=s+k2; end, s, 该例题只是为了说明 for 语句的格式,事实上,用下面的语句求和更为简单。 命令: p=sum(a.2) 练习四:建立 MATLAB 与 word 的连接,在新建的 m-book 中写入上面的程序,并用 notebook 菜单运行之。 循环结构里面还可以包含循环结构,形成多重循环。 例 5 设计一个九九乘法表。 程序: clear for i=1:9 for j=1:9 a(i , j)=i*j; end end a, 练习五:直接在命令窗编写上面的程序。 试运行下面的程序,并加以分析
7、: 程序: disp( 九九乘法表 ),for i=1:9, for j=1:i,pi(j)=j*i;end,disp(pi),end (2) whileend 循环结构。其格式为: while (表达式) 循环结构体 end 例 6 求 MATLAB 的相对精度 解:解题的思路是,让 y 值不断减小,直到 MATLAB 分不出 1+y 与 1 的差别为止。 程序: y=1; while 1+y1; y1=y; y=y/2; end,y1说明: for 循环与 while 循环的区别是,for 语句的循环次数是确定的,而 while语句的循环次数是不确定的。 一定要注意在循环结构体内设置“修改
8、条件表达式的语句 ”,以免进入“死循环”。 一旦出现死循环,在命令窗用 ctrl+c 可使程序中止。 注意程序的可读性。 练习六:在 M-文件编辑器内编写上面的脚本文件,并利用菜单或快捷按钮运行之。 三、M-文件 M 文件是包含 MATLAB 代码的文件。M 文件按其内容和功能可分为脚本 M文件和函数 M 文件这两大类。 1、脚本 M 文件 脚本 M 文件是许多 MATLAB 代码按顺序组成的命令集合,不接受参数的输入和输出,与 MATLAB 工作区共享变量空间。脚本文件一般用来实现一个相对独立的功能,比如对某个数据集进行某种分析、绘图,求解方程等等。 前面的几个例题都是脚本文件的类型。 2、
9、函数 M 文件 MATLAB 的 M-函数是由 function 语句引导的,其基本格式如下: function 输出形参列表 = 函数名 (输入形参列表) 注释说明语句段,由%引导; 函数体语句 函数文件需要在 M-文件编辑器中编写。写完以后,按照当前的搜索路径保存。以后就可以随时调用这个函数了。 与脚本 M 文件不同的是,调用函数 M 文件时需要输入自变量的实际值。 随便打开一个 M-文件看一看: open lsqlin 编程实例 例 7. 定义一个函数 f(x)=sin(x)2, 其中 x 以“度” 为单位。然后再调用该函数。 解:在 M-文件编辑器内写入下面的文件: function
10、y=sinsd(x) %自变量 x 以“ 度” 为单位。 % %白城师院 %数学建模协会,2007-5-12 a=x/180*pi; y=sin(a).2; 将上面的文件保存之后即可随时调用。 命令: t=sinsd(45) t = 0.5000 命令: help sinsd 命令: t=sinsd(45,60) t = 0.5000 0.7500 表明该函数对元素群运算有效。上面的语句相当于 命令: x=45,60;t=sinsd(x) t = 0.5000 0.7500 命令: x=45,60;30,90;f=sinsd(x) f = 0.5000 0.7500 0.2500 1.0000
11、 将源文件中最后一行的“.”去掉,再运行以上两条命令,我们会发现什么? 例 8. 在 MATLAB 中,一个函数可以调用其它函数,也可以调用自身,即递归调用。下面利用递归算法编写一个函数,用来计算 Fibonacci 数列的第 k 项。 Fibonacci 数列: 1, 1,2,3,5,8,13,21 , M-函数文件: function a=my_fibo(k) if k=1|k=2,a=1; else,a=my_fibo(k-1)+my_fibo(k-2);end 将这个文件写入 M-文件编辑器并以名称 “my_fibo.m”保存,以后就可以调用这个函数。 递归算法无疑是解决某一类问题的有
12、效方法,但不宜滥用,因为它的运算速度往往很慢。 命令: tic, n= my_fibo(26) ,toc n = 121393 elapsed_time = 34.4290 下面我们尝试用一般的循环语句来求解这个问题。 程序: tic,n=1,1;for k=3:100,n(k)=n(k-1)+n(k-2);end,toc, elapsed_time = 0.0100 命令: n(1:26) ans = Columns 1 through 8 1 1 2 3 5 8 13 21 Columns 9 through 16 34 55 89 144 233 377 610 987 Columns
13、17 through 24 1597 2584 4181 6765 10946 17711 28657 46368 Columns 25 through 26 75025 121393 例 9. 可变输入变量个数的函数 MATLAB 提供的 conv( )函数可用来求两个多项式的乘积。对于多个多项式的连乘,则不能直接使用此函数,需要用该函数嵌套使用,用起来很不方便。下面编写一个 MATLAB 函数,使它能直接处理任意多个多项式的乘积问题。 M-函数文件 : function a=convs(varargin) a=1; for i=1:length(varargin) a=conv(a,var
14、argini); end 形参 varargin 是一个特殊的字符串,它把输入变量列表转换成一个元胞数组,每一个输入变量都是这个元胞数组的一个元素。下面调用这个函数,求解 d=(x 4+2x3+4x2+5)(x+2)(x2+2x+3) 命令: p=1,2,4,0,5;q=1,2;f=1,2,3; d=convs(p,q,f) d = 1 6 19 36 45 44 35 30 命令: convs(p,q,f,1,1,1,3,1,1) ans = 1 11 56 176 376 578 678 648 527 315 90 例 10 关于 break、continue、return 的用法。 当
15、程序运行过程中出现 return 命令时,程序停止运行。break、continue用在循环语句中。在循环语句中,如果遇到 break 命令时,程序结束当前的“for”或“while”循环,转而执行它下面最近的 end 以下的语句;遇到 continue 时,跳过当次循环而继续下一次的循环,例如,原定要循环 5 次,但在进入第 3 次循环时遇到了 continue,则第 3 次的循环被跳过,而继续第 4 次、第 5 次的循环。循环体实际上只重复执行了 4 次。 程序: clear str=MATLAB R14.3 version; for i=1:length(str) if (isletter(str(i) continue end result(i)=str(i);