挺好的——matlab循环语句_第1页
挺好的——matlab循环语句_第2页
挺好的——matlab循环语句_第3页
挺好的——matlab循环语句_第4页
挺好的——matlab循环语句_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、  Matlab 基本语句1.循环语句forfor  i=s1:s3:s2    循环语句组end解释:首先给i赋值s1;然后,判断i是否介于s1与s2之间;如果是,则执行循环语句组,i=i+s3(否则,退出循环.);执行完毕后,继续下一次循环。例:求1到100的和,可以编程如下:   sum=0   for i=1:1:100     sum=sum+i   end

2、   这个程序也可以用while语句编程。      注:for循环可以通过break语句结束整个for循环.2.循环语句while  例:sum=0;i=1;      while(i<=100)       sum=sum+i;i=i+1;      end  

3、0;   3.if语句  if(条件)    语句  end    if(条件)    语句  else    语句  end  if(条件)    语句  elseif    语句  en

4、d    4.关系表达式: =,>,<,>=,<=,=(精确等于)5.逻辑表达式:|(或),&(且)6.n,m=size(A)(A为矩阵)这样可以得到矩阵A的行和列数n=length(A),可以得到向量A的分量个数;如果是矩阵,则得到矩阵A的行与列数这两个数字中的最大值。7.!后面接Dos命令可以调用运行一个dos程序。8.常见函数:poly():为求矩阵的特征多项式的函数,得到的为特征多项式的各个系数。如a=1,0,0;0,2,0;0,0,3,则poly(a)1    -

5、6    11    -6。相当于poly(a)1入3+(-6)入2+11入+(-6)。compan():可以求矩阵的伴随矩阵.sin()等三角函数。 MATLAB在数学建模中的应用(3) 一、程序设计概述 MATLAB所提供的程序设计语言是一种被称为第四代编程语言的高级程序设计语言,其程序简洁,可读性很强,容易调试。同时,MATLAB的编程效率比C/C+语言要高得多。 MATLAB编程环境有很多。常用的有: 1.命令窗口 2.word窗口 3.M-文件编辑器,这是最好的编程环境。 M-文件的扩展名为“.

6、m”。M-文件的格式分为两种:   l M-脚本文件,也可称为“命令文件”。    M-函数文件。这是matlab程序设计的主流。l     保存后的文件可以随时调用。     二、MATLAB程序结构 按照现代程序设计的观点,任何算法功能都可以通过三种基本程序结构来实现,这三种结构是:顺序结构、选择结构和循环结构。其中顺序结构是最基本的结构,它依照语句的自然顺序逐条地执行程序的各条语句。如果要根据输入数据的实际情况进行逻辑判断,对不同的结果进行不同的处理,可以使用选择结构。如果需要反

7、复执行某些程序段落,可以使用循环结构。 1  顺序结构 顺序结构是由两个程序模块串接构成。一个程序模块是完成一项独立功能的逻辑单元,它可以是一段程序、一个函数,或者是一条语句。 看图可知,在顺序结构中,这两个程序模块是顺序执行的,即先执行<程序模块1>,然后执行<程序模块2>。 实现顺序结构的方法非常简单,只需将程序语句顺序排列即可。 2  选择结构 在MATLAB中,选择结构可由两种语句来实现。 (1)  if语句 if语句的最简单用法为: if  表达式; 程序模块; end

8、if语句的另一种用法为: if  表达式 程序模块1 else 程序模块2 end 例1  使用if语句判断学生的成绩是否及格。 程序: clear   n=input(输入n= )   m=60;if  nm, r=不及格      else r=及格 end     练习一:将例1写入M-文件编辑器,然后在command window 调用这个程序。   

9、0; 当针对多个条件进行选择时,可以采用下面的格式: if  表达式1        程序模块1           elseif  表达式2                  程序模块2    &#

10、160;                          elseif  表达式n                      程序模块n  

11、;       else             程序模块n+1         end 例2  将百分制的学生成绩转换为五分制输出。 程序: clear n=input(输入n= ) if  n>=90 chji=优秀 elseif  n>=80

12、 chji=良好 elseif  n>=70 chji=中等 elseif  n>=60 chji=及格 else chji=不及格 end 练习二:将例2写入M-文件编辑器,然后在command window 调用这个程序。 (2)  switch语句 switch语句可以替代多分支的if语句,而且switch语句简洁明了,可读性更好。其格式为: switch  表达式    case  数值1   &

13、#160;            程序模块1 case  数值2           程序模块2 otherwise 程序模块n end 其中的otherwise模块可以省略。 switch语句的执行过程是:首先计算表达式的值,然后将其结果与每一个case后面的数值依次进行比较,如果相等,则执行该case的程序模块;如果都不相等,则执行otherwise模块中的语句。

14、如图3所示。 例3  用switchcase开关结构将百分制的学生成绩转换为五分制的成绩输出。 程序: clear x=58   switch  fix(x/10)     case  10,9         y=优秀     case  8        

15、 y=良好     case  7         y=中等     case  6         y=及格     otherwise         y=不及格 end &#

16、160; 练习三:将例3写入M-文件编辑器,然后在command window 调用这个程序。 3  循环结构 循环结构的流程图如图4所示它可以多次重复执行某一组语句。循环是计算机解决问题的主要手段。程序命令后面输入与不输入“;”的区别是,当输入半角的分号时,命令中的变量会自动列表储存在 workspace中,变量的值不会在window command中显示出来;当不输入半角的分号时,变量不仅也会自动储存在workspace中,还会在window command窗口中显示出变量的值。Matlab取整函数有: fix, floor, ceil, round

17、.具体应用方法如下:   fix朝零方向取整,如fix(-1.3)=-1; fix(1.3)=1;    floor,顾名思义,就是地板,所以是取比它小的整数,即朝负无穷方向取整,如floor(-1.3)=-2; floor(1.3)=1; floor(-1.8)=-2,floor(1.8)=1    ceil与floor相反,它的意思是天花板,也就是取比它大的最小整数,即朝正无穷方向取整,如ceil(-1.3)=-1; ceil(1.3)=2;ceil(-1.8)=-1,ceil(1.8)=2    round四

18、舍五入到最近的整数,如round(-1.3)=-1;round(-1.52)=-2;round(1.3)=1;round(1.52)=2。 在MATLAB中,循环结构可以由两种语句结构实现。 (1) forend 循环结构。其格式为:                         for i=V,循环体结构,end  

19、0;  其中V为一个行向量,循环变量i每次从V中取一个数值,执行一次循环体的内容,如此下去,直到完成V中的所有分量,就自动结束循环体的执行。 例4    计算  s=12+22+52。 程序: a=1 2 5  s=0;  for k=a,  s=s+k2;  end,  s,   该例题只是为了说明for语句的格式,事实上,用下面的语句求和更为简单。 命令: p=sum(a.2)   练习四:建

20、立MATLAB与word的连接,在新建的m-book中写入上面的程序,并用notebook菜单运行之。 循环结构里面还可以包含循环结构,形成多重循环。 例5    设计一个九九乘法表。 程序: clear for  i=1:9 for  j=1:9 a(i , j)=i*j; end end        a,       练习五:直接在命令窗编写上面的程序。 试运行

21、下面的程序,并加以分析: 程序: disp(     九九乘法表 ),for i=1:9, for j=1:i,pi(j)=j*i;end,disp(pi),end   大括号 用于单元阵列的赋值 中括号 用于形成一个向量或矩阵小括号 通常用于一般的算术表达式,指示优先运算,还用于表示函数变量、向量下标和矩阵下标等到(2) whileend 循环结构。其格式为: while  (表达式) 循环结构体 end 例6  求MATLAB的相对

22、精度 解:解题的思路是,让y值不断减小,直到MATLAB分不出1+y与1的差别为止。 程序: y=1; while  1+y>1;  y1=y;  y=y/2; end,y1说明: for循环与while循环的区别是,for语句的循环次数是确定的,而while语句的循环次数是不确定的。 一定要注意在循环结构体内设置“修改条件表达式的语句”,以免进入“死循环”。 一旦出现死循环,在命令窗用ctrl+c可使程序中止。 注意程序的可读性。 练习六:在M-文件编辑器内编写上面的脚本文件,并利用菜单或快捷按钮运行之。

23、三、M-文件 M文件是包含MATLAB代码的文件。M文件按其内容和功能可分为脚本M文件和函数M文件这两大类。 1、脚本M文件 脚本M文件是许多MATLAB代码按顺序组成的命令集合,不接受参数的输入和输出,与MATLAB工作区共享变量空间。脚本文件一般用来实现一个相对独立的功能,比如对某个数据集进行某种分析、绘图,求解方程等等。 前面的几个例题都是脚本文件的类型。 2、函数M文件 MATLAB的M-函数是由function语句引导的,其基本格式如下: function 输出形参列表 = 函数名 (输入形参列表) 注释说明语句段,由%引导; 函数体语句 函数

24、文件需要在M-文件编辑器(editor)中编写。写完以后,按照当前的搜索路径保存。以后就可以随时调用这个函数了。 与脚本M文件不同的是,调用函数M文件时需要输入自变量的实际值。 随便打开一个M-文件看一看: open lsqlin 编程实例 例7. 定义一个函数  f(x)=sin(x)2, 其中x以“度”为单位。然后再调用该函数。 解:在M-文件编辑器内写入下面的文件: function y=sinsd(x) %自变量x以“度”为单位。 a=x/180*pi; %a以弧度表示y=sin(a).2; 将上面的文件保存之后即可随时调用。

25、 命令: t=sinsd(45)  t =     0.5000   命令: help sinsd   命令: t=sinsd(45,60)   t =     0.5000    0.7500   表明该函数对元素群运算有效。上面的语句相当于 命令: x=45,60;t=sinsd(x)   t =   &

26、#160; 0.5000    0.7500   命令: x=45,60;30,90;f=sinsd(x)   f =     0.5000    0.7500     0.2500    1.0000   将源文件中最后一行的“.”去掉,再运行以上两条命令,我们会发现什么?(不能以矩阵的方式求解) 例8.&

27、#160;在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”保存,以后就可以调用这个函数。 递归算法无疑是解决某一类问题的有效方法,但不宜滥用,因为它的运算速tic和toc用

28、来记录matlab命令执行的时间。   tic用来保存当前时间,而后使用toc来记录程序完成时间。   两者往往结合使用,用法如下:   tic   operations   toc   显示时间单位:秒度往往很慢。 命令: tic,  n= my_fibo(26)  ,toc   n =     

29、 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 throug

30、h 8         1       1       2       3       5 8 13        21

31、   Columns 9 through 16        34      55      89     144     233 377      610  

32、     987   Columns 17 through 24      1597    2584    4181    6765   10946 17711    28657     46368

33、  Columns 25 through 26     75025  121393   例9. 可变输入变量个数的函数 MATLAB提供的conv( )函数可用来求两个多项式的乘积。对于多个多项式的连乘,则不能直接使用此函数,需要用该函数嵌套使用,用起来很不方便。下面编写一个MATLAB函数,使它能直接处理任意多个多项式的乘积问题。 1. Matlab中使用varargin来实现参数可变的函数2. 只要将最后一个参数设置为varargi

34、n,就可以实现3. 在这个函数里,varargin就是一个cell数组,它包含了用户输入的参数M-函数文件: function a=convs(varargin) a=1; for i=1:length(varargin)     a=conv(a,varargini); end 形参varargin是一个特殊的字符串,它把输入变量列表转换成一个元胞数组,每一个输入变量都是这个元胞数组的一个元素。下面调用这个函数,求解 d=(x4+2x3+4x2+5)(x+2)(x2+2x+3) 命令: p=1,2,4,0,5;q=1,2;f=1,2

35、,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)&

36、#160;  ans =     1    11    56   176   376   578   678   648   527   315 90   例10  关于break、continue、return的用法。 当程序运行过程中出现return命令

温馨提示

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

评论

0/150

提交评论