




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章MATLAB程序设计(1)MATLAB的输入与输出语句输入语句输入数值、行向量、列向量、矩阵x=input('please
input
a
number:')please
input
a
number:22x
=
22输入字符串
x=input('please
input
a
string:')
please
input
a
string:’this
is
a
string
’x
=
this
is
a
string
MATLAB的输入与输出语句输出语句
自由格式(disp)
disp(23+454-29*4)
361disp([11
22
33;
44
55
66;
77
88
99])
11
22
3344
55
66
77
88
99disp('this
is
a
string')
this
is
a
stringMATLAB的输入与输出语句格式化输出
(fprintf)fprintf('The
area
is
%8.5f\n',
area)
%注意输出格式前须有%符号,
The
area
is
12.56637
%
输出值为8位数含5位小数错误消息显示命令
error('this
is
an
error')
this
is
an
errorMATLAB中的控制结构循环结构循环结构允许重复执行一系列语句,需要被重复执行的语句称为循环体。循环结构的执行方式为首先判断是否达到循环终止条件,如果没有,则继续执行循环体,如果已经达到则跳出循环。for循环while循环MATLAB中的控制结构选择结构if结构switch结构try/catch结构其他流程控制break语句continue语句return语句for循环for循环的语法forindex=expressionloopbodyendindex是循环变量,expression是循环控制表达式,在for和end之前的执行语句为循环体loopbodyfor循环for循环的执行顺序变量index读取表达式expression,其在一般情况下是一个向量,用冒号表达式表示为start:increment:end,若采用默认的步长1,则表示为start:end;在这种情况下,循环变量index每次从向量expression中读取一个元素,然后程序执行循环体(loopbody),直至向量expression中所有元素读取完毕一般而言,向量expression中有多少元素,循环体就执行多少次特别的,如果expression是一个矩阵,则index每次读取矩阵的一列,直至所有列读取完毕,亦即循环次数为矩阵的列数for循环利用for循环求阶乘6!下面的循环控制表达式将会产生行向量[654321],循环变量i依次读取这些数值实现阶乘运算。
>>N=6; >>S=1;>>fori=N:-1:1S=S*i;end>>SS=720
for循环循环的嵌套for循环可以嵌套使用,如果一个循环完全出现在另一个循环当中,我们称这两个循环为带嵌套的循环。下面的例子用两重for循环嵌套来计算九九乘法表并打印结果
>>fori=1:9forj=1:ifprintf('%d*%d=%d',i,j,i*j);endfprintf('\n');endwhile循环while循环的语法while为条件循环语句。while循环的循环终止条件通常是对循环条件表达式的判断,只要循环条件表达式为真,则循环体就重复执行,直到循环条件表达式为假。所以while循环的次数不确定。while循环的语法是:whileconditionloopbodyendwhile循环利用while求EPS(eps)
>>EPS=1;while(1+EPS)>1EPS=EPS/2;endEPS=EPS*2EPS=2.2204e-016while循环利用while求EPS(eps)
eps是一个加1后而使结果以有限精度大于1的最小数值。这里我们用大写EPS是为了避免MATLAB中常量eps的值被覆盖。在本例中EPS以1开始。只要(1+EPS)>1为真(非零),就一直求while循环内的命令值。由于EPS不断地被2除,EPS逐渐变小以致于EPS+1不大于1。(记住,发生这种情况是因为计算机使用固定数的数值来表示数。MATLAB用16位,因此,我们只能期望EPS接近10-16。)在这一点上,(1+EPS)>1是假(零),于是while循环结束。最后,EPS与2相乘,因为最后除2使EPS太小。while循环利用while循环求Fibonacci数列的小于100的项Fibonacci数列指的是这样的一个数列:1、1、2、3、5、8、13、21、…这个数列从第三项开始,每一项都等于前两项之和。那么我们可以通过循环的方式来实现这个数列的求解,且终止条件设为要求取数列的最后一项必须小于100,因而可以在语句段中设置一个flag,判断已经求得数列的最后两项之和是否超过100,如果没有,则循环继续,如果已经超过则循环终止,那么可以在MATLAB命令窗口输入while循环利用while循环求Fibonacci数列的小于100项
>>f(1)=1;f(2)=1; %Fibonacci数列的前两项>>i=2; %项数标志>>n=2; %循环终止判断标志变量>>while(n<100) %终止条件是循环终止判断标%志变量小于100i=i+1;f(i)=n; %Fibonacci数列项的求取方法n=f(i)+f(i-1); %循环终止判断变量已求取数%列的最后两项的和endMATLAB中的控制结构选择结构if结构switch结构try/catch结构if结构if-end结构
ifconditionstatementsend
其中当条件表达式condition的值为真(非0)时执行语句段statements,否则不执行。例如我们判断一个学生是否通过某课程是根据其到课率attendance和成绩grade来判断,可以设置if判断语句如下:>>if((attendance>=0.90)&&(grade>=60))pass=1;endif结构if-else-end结构
ifconditionstatements_1elsestatements_2end其中当条件表达式condition的值为真(非0)时执行语句段statements_1,否则则执行语句段statements_2。if结构if-else-end结构
例如我们利用rand()函数产生随机数x,而后判断其与0.5的大小并打印结果的语句段如下:
>>x=rand();ifx>0.5fprintf('xisgreaterthan0.5\n');elsefprintf('xislessthan0.5\n')endif结构if-elseif-else-end结构ifcondition_1statements_1elseifcondition_2 %这里可以有多个elseifstatements_2elsestatements_3end在这种结构控制下,当运行到程序的某一条条件表达式为真(非0)时,则执行与之相关的语句段,而后系统不再检查其他的条件表达式,系统将跳过if结构中的其他语句。if结构if-elseif-else-end结构
需要注意的是,在一个if结构中,可以有任意个elseif语句,但else语句最多有一个或者没有。
if(b^2-4*a*c)<0fprintf('Theequationhastwocomplexroots.\n');elseif(b^2-4*a*c)==0fprintf('Theequationhastwoidenticalrealroots.\n');elsefprintf('Theequationhastwodistinctrealroots.\n');endif结构if的嵌套使用if结构的使用非常灵活,需要注意的是,它必须含有一个if语句和一个end语句。中间可以有任意个elseif语句,也可以有一个else语句。这样我们可以根据实际的需要确定选择哪种结构。同时,if语句也是可以嵌套使用的,如果if结构完全是另一个if结构的一个语句块,我们就称两者为嵌套关系.if结构if的嵌套使用例如二重嵌套的一般语法格式如下:ifcondition_1statements_1ifcondition_2statements_2endend在大多数情况下,执行一个算法,即可以用多个elseif语句,也可以用if语句的嵌套。用户可以根据喜好选择相应的方式。switch结构switch结构被称为开关结构。用户可以根据一个单精度整形数,字符或逻辑表达式的值来选择执行特定的语句段。其基本语法格式为:
switch(switch_expr)casecase_expr_1,statements_1casecase_expr_1,statements_2…otherwise,statements_otherendswitch结构用法在这个控制结构中,如果switch_expr的值与case_expr_1相符,那么第一个语句段statements_1将会被执行,然后程序将会跳转到switch结构结束语句end后的第一个语句。如果switch_expr的值与case_expr_2相符,那么第二个语句段将会被执行,然后程序将会跳到switch结构结束语句end后的第一个语句。在这个结构中,otherwise语句段是可选的。如果它存在的话,当switch_expr的值与其他所有的选项都不相符时,语句段statements_other将会被执行。如果它不存在,且witch_expr的值与所有的选项都不相符时,结构中的任何一个语句段都不会被执行。switch结构多值匹配需要注意的是,如果switch_expr有很多值可以导致相同代码的执行,那么这些值可以括在同一括号内,如果这个switch表达式和括号中任何一个值相匹配,那么这个语句段将会被执行
switch(switch_expr)case{cas_1,case_2,case_3},statementscase{cas_4,...} ...otherwise,statements_otherendswitch结构例子使用switch结构设计MATLAB程序,通过输入英文星期单词,将其转换成相应的中文,例如输入“Sunday”,输出“星期日”day=input('请输入英文日期如:Sunday\n','s');switchdaycase{'Sunday','sunday'}
disp('星期日');
case{'Monday','monday'}
disp('星期一');
case{'Tuesday','tuesday'}
disp('星期二');
switch结构例子
case{'Wednesday','wednesday'}
disp('星期三');
case{'Thursday','thursday'}
disp('星期四');
case{'Friday','friday'}
disp('星期五');
case{'Saturday','saturday'}
disp('星期六');
otherwise
disp('Error');
endtry/catch结构用法try/catch结构是选择结构的一种特殊形式,用于捕捉错误。一般地,当一个MATLAB程序在运行时遇到了一个错误,这个程序就会中止执行。try/catch结构修改了这个默认行为如果一个错误发生在这个结构的try语句块中,那么程序将会执行catch语句块,程序将不会中断。它将帮助程序员控制程序中的错误,而不用使程序中断。try/catch结构的基本语法如下:
trystatements_trycatchstatements_catchendtry/catch结构当程序运行到try/catch语句段,在try语句段statements_try中的语句将会被执行。如果没有错误出现,程序将跳过catch语句段。如果错误发生在语句段statements_try,那么程序将中止执行try语句块,并立即执行catch语句段。我们可以在命令窗口中使用lasterr函数获得在try语句段中遇到错误而生成的错误信息字符串。这样我们可以根据错误信息进行相应的修改try/catch结构也可以嵌套使用。即在statements_try语句段或者在statements_catch语句段中均可使用try/catch结构try/catch结构例子对于输入一个矩阵A,对其求逆过程中可能遇到的错误进行捕捉的语句段如下:
A=input('Pleaseinputasquarematrix:');tryinv_A=inv(A)disp('successfulinverseoperation');catchdisp('Theinputisnotinvalid');endtry/catch结构例子当我们输入矩阵A=[12;34],因为A为方阵且非奇异,故可对其进行求逆,try语句段中无错误,故执行完try之后跳过catch语句段,程序结束。但是当我们输入矩阵A=[123;456],由于A非方阵,故不存在逆矩阵,try语句段出错,于是程序终止对try语句段的执行,跳转执行catch语句段,打印错误信息。其他流程控制语句break语句和continue语句break语句和continue语句用于循环中的流程控制。一般可以和if语句配合使用。break语句用于终止循环的执行,当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句的下一语句。continue语句控制跳过循环体中的某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环如果break或continue语句出现在循环嵌套的内部,那么break语句和continue语句将会在包含它的最内部的循环起作用其他流程控制语句break语句和continue语句例如:求[200,500]之间第一个能被53整除的整数,程序如下:>>fori=200:500ifrem(i,53)~=0continueendbreakend>>ii=
212
return语句当用户需要在文件中进行终止操作时,可以使用return命令,执行return命令后,进程将返回调用函数或者键盘。运用return命令可以提前结束程序的运行。return和break的区别在于return一般用于函数或者文件的结束,而break用于循环的终止M脚本文件和M函数文件为什么要用M脚本和M函数在前面章节中我们解决问题的方法都是在MATLAB的命令窗口直接输入相关的命令行或者语句段,这种方法适用于一些简单问题的解决,但是当我们遇到更为复杂的综合性问题时则需要用到程序编辑与调试的环境,在MATLAB中我们称之为M文件编辑器。利用它我们可以实现对MATLAB命令行语句段的批处理,或者对M文件进行保存和调用。M脚本文件和M函数文件为什么要用M脚本和M函数MATLAB程序大致分为两类:M脚本(M-Script)
和M函数(M-function),
它们均是普通的ASCII码构成的文件,后缀均为.m。M文件的命名规则文件名必须以字母开头,而后可以是英文、数字和下划线的组合,文件名首字符不能是数字或下划线,M文件名中不能含有空格M文件名不能与MATLAB内部函数名相同,因而建议对M文件的命名尽量不用简单的英文单词,虽然MATLAB对M文件名是大小写敏感的,但Windows的文件名是不区分大小写的,为了文件的保存方便,实现不同平台之间的通用性,建议M文件名尽量只使用小写。M文件编辑器什么是M文件编辑器M文件编辑器是MATLAB中集成编辑和调试的环境,用户可以通过MATLAB中的M文件编辑器编写用户的M文件,同时也可以使用编辑器打开和修改M文件,观察变量值、调试程序等。M文件编辑器的界面如图所示M文件编辑器启动M文件编辑器的方法在命令窗口输入edit命令可进入M文件编辑器,此时MATLAB将建立一个空文件,如果需要查看、编辑或者修改已经存在的M文件,例如文件名为test.m,则用户只需在命令窗口输入edittest或者edittest.m;单击工具栏上的M-file按钮,此时MATLAB将建立一个空文件;通过File|New菜单可以选择建立不同类型的M-file,包括空M文件、函数M文件和类M文件,当选择建立函数M文件或者类M文件时,MATLAB会自动给出相应文件类型的模版。注意每次修改程序之后都要存盘M脚本文件什么是M脚本文件M脚本文件中存储的是可用于自动重复执行的一组MATLAB命令和函数组合。建立一个M脚本文件等价于从命令窗口中顺序输入文件里的命令,程序不需要预先定义,只要依次将命令编辑在命令文件中,再将程序保存成为扩展名为.m的M脚本文件即可M脚本文件的执行第一种方式是在M文件编辑器的工具栏中点击Run按钮第二种方式类似批处理文件,执行M脚本文件时不需要输出输入参数,只需要在MATLAB命令窗口的命令行提示符>>之后键入M脚本文件的文件名即可,这样MATLAB将自动执行该M脚本文件中的各条语句,并将结果直接返回到MATLAB的工作空间。当一个M脚本文件被执行时,和直接在命令窗口中直接键入MATLAB语句所产生的结果相同。很重要的一点是,要通过这种方式运行的前提条件是该M脚本文件需要存储在MATLAB的搜索路径之中M脚本文件分享命令窗口中的工作区,用M脚本文件可以调用工作空间已有的变量或创建新的变量。运行过程中产生的变量都是全局变量,所有在脚本文件中创建的变量在脚本文件运行之后仍然存在工作区M脚本文件适用于用户所需要立即得到结果的小规模运算例子打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=13+53+33。clears=[]; %置水仙花数数组为空index=0; %置水仙花数数量标志为0
三层循环sindexfori=1:9forj=1:9fork=1:9if(i^3+j^3+k^3==100*i+10*j+k)index=index+1;%水仙花数数量标志加1s(index)=100*i+10*j+k;
endendendendM函数文件什么是M函数文件MATLAB函数是一种特殊形式的M文件,它和M脚本文件的不同之处在于M函数文件运行在独立的工作区,一般要自带参数且返回结果。MATLAB中的M函数文件由function语句引导,说明此文件是一个函数。M函数文件什么是M函数文件它通过输入参数列表接受输入数据,并将结果返回给输出参数列表。M函数文件中所创建的变量都不是全局变量,仅在函数运行时有效,函数运行完毕之后,它所定义的变量将从工作空间中删除M函数文件的基本形式
function[outarg1,...]=fname(inarg1,inarg2,...)%H1commentline%Othercommentlines...(Executablecode)...(return)M函数文件的基本形式其中,function语句标志函数的开始,一般情况下会指定函数的名称和输入输出列表。输入函数列表显示在函数名后面的括号中。输出函数列表显示在等号左边的中括号中,如果只有一个输出参数,中括号可以省略。如果函数无确定返回值,只是进行某些操作,则也可以没有输出参数M函数文件编写M函数文件求半径为r的圆的周长和面积。
function[s,l]=calculate_circle(r)%CIRCLECalculatetheareaandperimeterofacircle%[S,L]=CALCULATE_CIRCLE(R)calculatethearea%Sandtheperimeter%LofacirclewithradiusRs=pi*r^2;l=2*pi*r;
M函数文件例子
上面的函数具有一个输入参数r,代表圆的半径,两个输出参数s和l,分别代表圆的面积和周长,将上述函数命名为calculate_circle.m并存于MATLAB的搜索路径之中,然后在MATLAB的命令窗口即可进行调用
M函数文件可以无输出参数当M函数文件只是进行某些操作、打印某些信息的时候,可以不需要输出参数例如,编写M函数文件判断一个正整数是否为质数functionprimeornot(a)if~isreal(a)||round(a)~=a||a<0||length(a)~=1disp('pleaseinputanpositiveinteger!')returnendifa==1fprintf('%disnotaprimenumber\n',a);returnendfori=2:fix(sqrt(a))ifmod(a,i)==0fprintf('%disnotaprimenumber\n',a);returnendendfprintf('%disaprimenumber\n',a);M函数文件M函数文件的执行在命令窗口直接键入函数的名字就可以调用这个函数了,同时也可以在脚本文件中或者其他函数中调用。nargin代表调用函数时实际输入参数的个数,nargout代表调用函数时实际输出参数的个数M函数文件的编写规则函数名和文件名相同。例如,函数flipud存储在名为flipud.m文件中;在function语句的第一个行注释被称为H1注释行,它是对函数功能的总结,并且可以通过lookfor命令将其搜索到并显示出来,例如在命令窗口想找到有rotate关键字的函数时,输入lookforrotate,则会显示一系列函数列表,对函数的说明则正是H1注释行;从H1注释行到第一个空行或第一个可执行性语句之间的注释行可以称为帮助文本,应写明函数的使用方法,包括基本功能、调用方式和参数说明、用例等,帮助文本和H1注释行可以通过help命令显示出来或通过帮助窗口搜索到;函数应当对输入输出参数进行判断,以增强函数功能和其健壮性例子通过创建函数cart2polar把直角坐标值(x,y)转化相应的极坐标(r,θ),这个函数支持两个输入参数,x和y。如果用户仅定义一个输入参数,则函数认为直角坐标中的纵坐标为0。函数在一般情况下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 利用信息技术助力提高初中生科学素养的研究
- 抒情表达自我作文7篇范文
- ××超市捐赠管理制度
- 诗词鉴赏中的意象解读:大一语文教案
- 雨中的温情写事作文(11篇)
- 读小王子后的感悟心得作文7篇范文
- 2025年无损检测员(中级)无损检测在建筑行业的应用试卷
- 童话故事白雪公主的感悟(10篇)
- 2025年制动气室项目立项申请报告
- 艺术设计领域特别声明及证明(5篇)
- 可视对讲及门禁的课程设计
- 2024届云南省曲靖市富源六中生物高二下期末学业质量监测模拟试题含解析
- 包茎的护理查房课件
- 吉林省长春市南关区2022-2023学年五年级下学期期末考试数学试题
- 汉语阅读教程第一册第四课
- 法律与社会学习通章节答案期末考试题库2023年
- 食品营养学第三版题库及答案
- 学生实习三方协议
- 辊压机的维护与检修
- 安全生产和消防工作考核细则
- 一年级下册 《认识人民币探究性作业设计》
评论
0/150
提交评论