MATLAB编程入门_第1页
MATLAB编程入门_第2页
MATLAB编程入门_第3页
MATLAB编程入门_第4页
MATLAB编程入门_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

1、第二章 MATLAB程序设计(1)MATLAB的输入与输出语句v输入语句 输入数值、行向量、列向量、矩阵 x=input(please input a number:) please input a number:22 x = 22 输入字符串 x=input(please input a string:) please input a string:this is a string x = this is a string MATLAB的输入与输出语句v输出语句 自由格式(disp) disp(23+454-29*4) 361 disp(11 22 33; 44 55 66; 77 88 9

2、9) 11 22 33 44 55 66 77 88 99 disp(this is a string) this is a stringMATLAB的输入与输出语句 格式化输出 (fprintf) fprintf(The area is %8.5fn, area) %注意输出格式前须有%符号, The area is 12.56637 % 输出值为8位数含5位小数 错误消息显示命令 error(this is an error) this is an errorMATLAB中的控制结构 v循环结构 循环结构允许重复执行一系列语句,需要被重复执行的语句称为循环体循环体。循环结构的执行方式为首先

3、判断是否达到循环终止条件是否达到循环终止条件,如果没有,则继续执行循环体,如果已经达到则跳出循环。 for循环 while循环MATLAB中的控制结构 v选择结构 if结构 switch结构 try/catch结构v其他流程控制 break语句 continue语句 return语句for循环vfor循环的语法for index=expression loopbodyend index是循环变量,expression是循环控制表达式,在for和end之前的执行语句为循环体loopbodyfor循环vfor循环的执行顺序 变量index读取表达式expression,其在一般情况下是一个向量,用

4、冒号表达式表示为start:increment:end,若采用默认的步长1,则表示为start:end;在这种情况下,循环变量index每次从向量expression中读取一个元素,然后程序执行循环体(loopbody),直至向量expression中所有元素读取完毕 一般而言,向量expression中有多少元素,循环体就执行多少次 特别的,如果expression是一个矩阵,则index每次读取矩阵的一列,直至所有列读取完毕,亦即循环次数为矩阵的列数for循环v利用for循环求阶乘6! 下面的循环控制表达式将会产生行向量6 5 4 3 2 1,循环变量i依次读取这些数值实现阶乘运算。 N=

5、6; S=1; for i=N:-1:1 S=S*i; end S S = 720 for循环v循环的嵌套 for循环可以嵌套使用,如果一个循环完全出现在另一个循环当中,我们称这两个循环为带嵌套的循环。下面的例子用两重for循环嵌套来计算九九乘法表并打印结果 for i=1:9 for j=1:i fprintf(%d*%d=%d ,i,j,i*j); end fprintf(n); endwhile循环 vwhile循环的语法 while为条件循环语句。while循环的循环终止条件通常是对循环条件表达式的判断,只要循环条件表达式为真,则循环体就重复执行,直到循环条件表达式为假。所以while

6、循环的次数不确定。while循环的语法是: while condition loopbody endwhile循环 v利用while求EPS(eps) EPS = 1; while (1+EPS) 1 EPS = EPS/2; end EPS = EPS*2 EPS = 2.2204e-016 while循环 v利用while求EPS(eps) eps是一个加1后而使结果以有限精度大于1的最小数值。这里我们用大写EPS是为了避免MATLAB中常量eps的值被覆盖。在本例中EPS以1开始。只要(1+EPS)1为真(非零),就一直求while循环内的命令值。由于EPS不断地被2除,EPS逐渐变小以

7、致于EPS+1不大于1。(记住,发生这种情况是因为计算机使用固定数的数值来表示数。MATLAB用16位,因此,我们只能期望EPS接近10-16。) 在这一点上,(1+EPS)1是假(零),于是while循环结束。最后,EPS与2相乘,因为最后除2使EPS太小。while循环v利用while循环求Fibonacci数列的小于100的项 Fibonacci数列指的是这样的一个数列:1、1、2、3、5、8、13、21、这个数列从第三项开始,每一项都等于前两项之和。那么我们可以通过循环的方式来实现这个数列的求解,且终止条件设为要求取数列的最后一项必须小于100,因而可以在语句段中设置一个flag,判断

8、已经求得数列的最后两项之和是否超过100,如果没有,则循环继续,如果已经超过则循环终止,那么可以在MATLAB命令窗口输入while循环v 利用while循环求Fibonacci数列的小于100项 f(1)=1;f(2)=1;%Fibonacci数列的前数列的前两项两项 i=2;%项数标志项数标志 n=2;%循环终止判断标志变量循环终止判断标志变量 while (n if (attendance = 0.90) & (grade = 60) pass = 1; endif结构vif-else-end结构 if condition statements_1 else statements

9、_2 end 其中当条件表达式condition的值为真(非0)时执行语句段statements_1,否则则执行语句段statements_2。if结构vif-else-end结构 例如我们利用rand()函数产生随机数x,而后判断其与0.5的大小并打印结果的语句段如下: x=rand(); if x0.5 fprintf(x is greater than 0.5n); else fprintf(x is less than 0.5n) endif结构v if-elseif-else-end结构 if condition_1 statements_1 elseif condition_2%这

10、里可以有多个这里可以有多个else if statements_2 else statements_3 end 在这种结构控制下,当运行到程序的某一条条件表达式为真(非0)时,则执行与之相关的语句段,而后系统不再检查其他的条件表达式,系统将跳过if结构中的其他语句。if结构v if-elseif-else-end结构 需要注意的是,在一个if 结构中,可以有任意个elseif 语句,但else语句最多有一个或者没有。 if (b2 - 4*a*c) for i=200:500 if rem(i,53)=0 continue end break end i i = 212 vreturn语句 当

11、用户需要在文件中进行终止操作时,可以使用return命令,执行return命令后,进程将返回调用函数或者键盘。运用return命令可以提前结束程序的运行。return和break的区别在于return一般用于函数或者文件的结束,而break用于循环的终止M脚本文件和M函数文件 v为什么要用M脚本和M函数 在前面章节中我们解决问题的方法都是在MATLAB的命令窗口直接输入相关的命令行或者语句段,这种方法适用于一些简单问题的解决,但是当我们遇到更为复杂的综合性问题时则需要用到程序编辑与调试的环境,在MATLAB中我们称之为M文件编辑器。利用它我们可以实现对MATLAB命令行语句段的批处理,或者对M

12、文件进行保存和调用。M脚本文件和M函数文件 v为什么要用M脚本和M函数 MATLAB 程序大致分为两类:M 脚本脚本 (M-Script) 和 M 函数函数 (M-function), 它们均是普通的 ASCII 码构成的文件,后缀均为.m。vM文件的命名规则 文件名必须以字母开头,而后可以是英文、数字和下划线的组合,文件名首字符不能是数字或下划线,M文件名中不能含有空格 M文件名不能与MATLAB内部函数名相同,因而建议对M文件的命名尽量不用简单的英文单词, 虽然MATLAB对M文件名是大小写敏感的,但Windows的文件名是不区分大小写的,为了文件的保存方便,实现不同平台之间的通用性,建议

13、M文件名尽量只使用小写。M文件编辑器 v 什么是M文件编辑器 M文件编辑器是MATLAB中集成编辑和调试的环境,用户可以通过MATLAB中的M文件编辑器编写用户的M文件,同时也可以使用编辑器打开和修改M文件,观察变量值、调试程序等。M文件编辑器的界面如图所示M文件编辑器v 启动M文件编辑器的方法 在命令窗口输入edit命令可进入M文件编辑器,此时MATLAB将建立一个空文件,如果需要查看、编辑或者修改已经存在的M文件,例如文件名为test.m,则用户只需在命令窗口输入edit test或者edit test.m; 单击工具栏上的M-file按钮,此时MATLAB将建立一个空文件; 通过File

14、|New菜单可以选择建立不同类型的M-file,包括空M文件、函数M文件和类M文件,当选择建立函数M文件或者类M文件时,MATLAB会自动给出相应文件类型的模版。 注意每次修改程序之后都要存盘M脚本文件 v什么是M脚本文件 M脚本文件中存储的是可用于自动重复执行的一组MATLAB命令和函数组合。建立一个M脚本文件等价于从命令窗口中顺序输入文件里的命令,程序不需要预先定义,只要依次将命令编辑在命令文件中,再将程序保存成为扩展名为.m的M脚本文件即可vM脚本文件的执行 第一种方式是在M文件编辑器的工具栏中点击Run按钮 第二种方式类似批处理文件,执行M脚本文件时不需要输出输入参数,只需要在MATL

15、AB命令窗口的命令行提示符 之后键入M脚本文件的文件名即可,这样MATLAB将自动执行该M脚本文件中的各条语句,并将结果直接返回到MATLAB 的工作空间。当一个M脚本文件被执行时,和直接在命令窗口中直接键入MATLAB 语句所产生的结果相同。很重要的一点是,要通过这种方式运行的前提条件是该该M脚本文件需要存储在脚本文件需要存储在MATLAB的搜索路径的搜索路径之中之中 M脚本文件分享命令窗口中的工作区,用M脚本文件可以调用工作空间已有的变量或创建新的变量。运行过程中产生的变量都是全局变量,所有在脚本文件中创建的变量在脚本文件运行之后仍然存在工作区 M脚本文件适用于用户所需要立即得到结果的小规

16、模运算 v例子 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=135333。 clear s=;%置水仙花数数组为空置水仙花数数组为空 index=0;%置水仙花数数量标志为置水仙花数数量标志为0 三层循环三层循环 s indexfor i=1:9 for j=1:9 for k=1:9 if (i3+j3+k3=100*i+10*j+k) index=index+1;%水仙花数数量标志加水仙花数数量标志加1 s(index)=100*i+10*j+k; end end endendM函数文件 v什么是M函数

17、文件 MATLAB函数是一种特殊形式的M文件,它和M脚本文件的不同之处在于M函数文件运行在独立的工作区,一般要自带参数且返回结果。MATLAB中的M函数文件由function语句引导,说明此文件是一个函数。M函数文件 v什么是M函数文件 它通过输入参数列表接受输入数据,并将结果返回给输出参数列表。M函数文件中所创建的变量都不是全局变量,仅在函数运行时有效,函数运行完毕之后,它所定义的变量将从工作空间中删除vM函数文件的基本形式 function outarg1, . = fname(inarg1, inarg2, .) %H1 comment line %Other comment lines

18、 . (Executable code) . (return)vM函数文件的基本形式 其中,function语句标志函数的开始,一般情况下会指定函数的名称和输入输出列表。输入函数列表显示在函数名后面的括号中。输出函数列表显示在等号左边的中括号中,如果只有一个输出参数,中括号可以省略。如果函数无确定返回值,只是进行某些操作,则也可以没有输出参数 M函数文件v 编写M函数文件求半径为r的圆的周长和面积。 function s,l=calculate_circle(r) %CIRCLE Calculate the area and perimeter of a circle % S,L=CALCUL

19、ATE_CIRCLE(R) calculate the area %S and the perimeter % L of a circle with radius R s=pi*r2; l=2*pi*r; M函数文件v例子 上面的函数具有一个输入参数r,代表圆的半径,两个输出参数s和l,分别代表圆的面积和周长,将上述函数命名为calculate_circle.m并存于MATLAB的搜索路径之中,然后在MATLAB的命令窗口即可进行调用 vM函数文件可以无输出参数 当M函数文件只是进行某些操作、打印某些信息的时候,可以不需要输出参数例如,编写M函数文件判断一个正整数是否为质数 function

20、primeornot(a)if isreal(a) | round(a)=a | a0 | length(a)=1 disp(please input an positive integer!) returnendif a=1 fprintf(%d is not a prime numbern,a); returnendfor i=2:fix(sqrt(a) if mod(a,i) =0 fprintf(%d is not a prime numbern,a); return endendfprintf(%d is a prime numbern,a);M函数文件vM函数文件的执行 在命令窗口

21、直接键入函数的名字就可以调用这个函数了,同时也可以在脚本文件中或者其他函数中调用。 nargin代表调用函数时实际输入参数的个数,nargout代表调用函数时实际输出参数的个数vM函数文件的编写规则 函数名和文件名相同。例如,函数flipud存储在名为flipud.m文件中; 在function语句的第一个行注释被称为H1注释行, 它是对函数功能的总结,并且可以通过lookfor命令将其搜索到并显示出来,例如在命令窗口想找到有rotate关键字的函数时,输入lookfor rotate,则会显示一系列函数列表,对函数的说明则正是H1注释行; 从H1注释行到第一个空行或第一个可执行性语句之间的注

22、释行可以称为帮助文本,应写明函数的使用方法,包括基本功能、调用方式和参数说明、用例等,帮助文本和H1注释行可以通过help命令显示出来或通过帮助窗口搜索到; 函数应当对输入输出参数进行判断,以增强函数功能和其健壮性v例子 通过创建函数cart2polar把直角坐标值(x,y)转化相应的极坐标(r,),这个函数支持两个输入参数,x和y。如果用户仅定义一个输入参数,则函数认为直角坐标中的纵坐标为0。函数在一般情况下输出量为模长与幅角(单位为度),如果用户仅定义一个输出参数,函数只返回极坐标中的模长function r, theta = cart2polar(x, y)%CART2POLAR Tra

23、nsform Cartesian to polar coordinates.% R,THETA = CART2POLAR(X,Y) transforms corresponding elements of % data stored in Cartesian coordinates X,Y to polar coordinates % (angle THETA and radius R). The arrays X and Y must be the same % size (or either can be scalar). TH is returned in radians. % If the y argument is missing, set it to 0.if nargin 2 y = 0;end% Calculate the radius magnituder = sqrt(x .2 + y .2);% If the second output argument is present,calculate% angle in de

温馨提示

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

评论

0/150

提交评论