版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四讲MATLAB程序设计输入数值:x=input('pleaseinputanumber:')pleaseinputanumber:22x=22输入字符串:x=input('pleaseinputastring:','s')pleaseinputastring:thisisastringx=thisisastring输出显示命令自由格式(disp)disp(23+454-29*4)361disp([112233;445566;778899])112233445566778899disp('thisisastring')thisisastring格式化输出(fprintf)。
fprintf('Theareais%8.5f\n',area)%注意输出格式前须有%符号,%跳行符号须有\符号Theareais12.56637%输出值为8位数含5位小数
MATLAB中的控制结构循环结构循环结构允许重复执行一系列语句,需要被重复执行的语句称为循环体。循环结构的执行方式为首先判断是否达到循环终止条件,如果没有,则继续执行循环体,如果已经达到则跳出循环。for循环while循环选择结构if结构switch结构try/catch结构其他流程控制break语句continue语句return语句for循环for循环的语法forindex=expressionloopbodyendindex是循环变量,expression是循环控制表达式,在for和end之间的执行语句为循环体loopbodyfor循环的执行顺序变量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:1
S=S*i;
end>>S循环的嵌套
for循环可以嵌套使用,如果一个循环完全出现在另一个循环当中,我们称这两个循环为带嵌套的循环。下面的例子用两重for循环嵌套来计算九九乘法表并打印结果
fori=1:9
forj=1:i
fprintf('%d*%d=%d',i,j,i*j);
end
fprintf('\n');end
For循环应注意的问题1.For循环不能用For循环内重新赋值循环变量n来终止。
forn=1:10 x(n)=sin(n*pi/10); n=10; end2.
语句1:10是一个标准的MATLAB数组创建语句。在For循环内接受任何有效的MATLAB数组。data=[39456;716-15]forn=datax=n(1)-n(2)end3.For循环可按需要嵌套。forn=1:5form=5:-1:1A(n,m)=n^2+m^2;enddisp(n)end
4.
当有一个等效的数组方法来解给定的问题时,应避免用For循环。例如,forn=1:10x(n)=sin(n*pi/10);end
上面的循环可以被写成n=1:10;x=sin(n*pi/10)两种方法得出同样的结果,而后者执行更快,更直观,要求较少的输入。
5.
为了得到最大的速度,在For循环(While循环)被执行之前,应预先分配数组。x=zeros(1,10);%preallocatedmemoryforxforn=1:10x(n)=sin(n*pi/10);end现在,只有x(n)的值需要改变。while循环while循环的语法while为条件循环语句。while循环的循环终止条件通常是对循环条件表达式的判断,只要循环条件表达式为真,则循环体就重复执行,直到循环条件表达式为假。所以while循环的次数不确定。
whileconditionloopbodyend利用while求EPS(eps)
>>EPS=1;while(1+EPS)>1
EPS=EPS/2;endEPS=EPS*2EPS=2.2204e-016
while循环利用while循环求Fibonacci数列的小于100的前n项
>>f(1)=1;f(2)=1; %Fibonacci数列的前两项
>>i=2; %项数标志
>>flag=0;
%循环终止判断标志变量
>>while(flag<100) %终止条件
i=i+1;
f(i)=f(i-1)+f(i-2);%Fibonacci数列项
flag=f(i)+f(i-1); %循环终止条件
endif结构if-end结构
ifconditionstatementsend
其中当条件表达式condition的值为真(非0)时执行语句段statements,否则不执行。
>>if((attendance>=0.90)
&&(grade>=60))
pass=1;endif结构if-else-end结构
ifconditionstatements_1elsestatements_2end其中当条件表达式condition的值为真(非0)时执行语句段statements_1,否则则执行语句段statements_2。
x=rand();ifx>0.5fprintf('xisgreaterthan0.5\n');elsefprintf('xislessthan0.5\n')endif结构if-elseif-else-end结构
ifcondition_1statements_1elseifcondition_2statements_2
...elsestatements_3end
if结构if的嵌套使用if结构的使用非常灵活,需要注意的是,它必须含有一个if语句和一个end语句。中间可以有任意个elseif语句,也可以有一个else语句。这样我们可以根据实际的需要确定选择哪种结构。同时,if语句也是可以嵌套使用的,如果if结构完全是另一个if结构的一个语句块,我们就称两者为嵌套关系,例如二重嵌套的一般语法格式如下:
ifcondition_1statements_1ifcondition_2statements_2endend在大多数情况下,执行一个算法,即可以用多个elseif语句,也可以用if语句的嵌套。用户可以根据喜好选择相应的方式。switch结构用法switch结构被称为开关结构。用户可以根据一个单精度整形数,字符或逻辑表达式的值来选择执行特定的语句段。其基本语法格式为:在这个控制结构中,如果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)casecase_expr_1,statements_1casecase_expr_1,statements_2…otherwise,statements_otherendswitch结构多值匹配如果switch_expr有很多值可以导致相同代码的执行,那么这些值可以括在同一括号内,如果这个switch表达式和括号中任何一个值相匹配,那么这个语句段将会被执行.
switch(switch_expr)case{case_expr_1,case_expr_2,
case_expr_3},statementsotherwise,statements_otherendday=input('请输入英文日期如:Sunday\n','s');switchdaycase{'Sunday','sunday'}
disp('星期日');
case{'Monday','monday'}
disp('星期一');
case{'Tuesday','tuesday'}
disp('星期二');
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_catchend当程序运行到try/catch语句段,在try语句段statements_try中的语句将会被执行。如果没有错误出现,程序将跳过catch语句段。如果错误发生在语句段statements_try,那么程序将中止执行try语句块,并立即执行catch语句段。在catch语句段中,可以使用lasterr函数获得在try语句段中遇到错误而生成的错误信息字符串。这样我们可以根据错误信息进行相应的修改try/catch结构也可以嵌套使用。即在tatements_try语句段或者在statements_catch语句段中均可使用try/catch结构A=input('Pleaseinputa
squarematrix:');
tryinv_A=inv(A)
disp('successfulinvers
operation');
catch
disp('Theinputisnot
invalid');
end其他流程控制语句break语句和continue语句break语句和continue语句用于循环中的流程控制。一般可以和if语句配合使用。break语句用于终止循环的执行,当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句的下一语句。continue语句控制跳过循环体中的某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环如果break或continue语句出现在循环嵌套的内部,那么break语句和continue语句将会在包含它的最内部的循环起作用
>>fori=200:500ifrem(i,53)~=0continueendbreakend>>ireturn语句当用户需要在文件中进行终止操作时,可以使用return命令,执行return命令后,进程将返回调用函数或者键盘。运用return命令可以提前结束程序的运行。return和break的区别在于return一般用于函数或者文件的结束,而break用于循环的终止单击快捷键按钮,或依次单击菜单File→New→M-File,打开如下脚本编辑窗口
脚本编辑窗口
M代码的编写与调试一、编辑m文件
二、脚本文件
所谓的脚本文件,就是将一些MATLAB命令简单的堆砌 在一起保存成的M文件。
三、函数文件
函数文件就是按照一定格式编写的,可由用户指定输入和 输出进行调用的M文件。 函数文件由function语句引导,其格式为:
function[out1,out2,…]=funname(in1,in2,…)
注释说明部分(%号引导的行)
函数体
其中out1,out2,…为输出参数列表,in1,in2,…为输入参 数列表,funname为函数名。
注意:函数输出参数列表中提到的变量要在函数体中予以赋值,函数名与变量名的命名规则相同,另外函数名最好与文件名相同,并且自编函数不要与内部函数重名,否则极易引起错误。
【例】利用函数文件求解例3.1-4。
function[n,y]=sumlm(m)
%求n和y,使得1^2+2^2+...+n^2<=m
y=0; i=0; whiley<=m i=i+1; y=y+i^2; end n=i-1; y=y-i^2;
四、匿名函数(在命令窗口或脚本文件中编辑)
1.定义格式 匿名函数由@符引导建立,其定义格式为:
f=@(arg1,arg2,...)[expr]
2.调用格式 匿名函数的调用格式为:
y=f(arg1,arg2,...)
【例】建立匿名函数,
匿名函数程序如下:
f2=@(x,y)sin(x).*cos(y); y=f2(pi/8,pi/9)
y= 0.3596
子函数与嵌套函数
1.子函数
通常在一个MATLAB主函数的内部会调用一些其他的
MATLAB函数,我们把被调用的函数称为该主函数的子 函数,子函数可以是MATLAB自带的内部函数,也可以 是自编的外部函数;可以是以Function打头的函数,也可 以是内联函数和匿名函数。
2.嵌套函数
把一个或多个子函数放到同一个主函数的函数体内部而构 成的函数称为嵌套函数。像循环的嵌套一样,嵌套函数可 以是一层嵌套,也可以是多层嵌套,其一般形式如下。单层嵌套
%一嵌一
functionx=A(p1,p2) … functiony=B(p3) … end … end%一嵌多functionx=A(p1,p2)… functiony=B(p3) … end functionz=C(p4) … end…end函数的递归调用【例】生成斐波那契数列的第n项。
functiony=fibonacci(n)
%生成斐波那契数列的第n项
if(n<0)|(round(n)~=n) warning('输入参数应为非负整数'); y=[]; return; elseifn<2 y=n; else y=fibonacci(n-2)+fibonacci(n-1); endMATLAB程序设计谢中华,MATLAB应用培训.2013/10/22七、M代码的调试(debug)1.语法错误和运行结果错误将可能出错的语句后面的分号“;”去掉,让其返回结果。如果是一个函数文件,可以将function所在的行注释掉,使其变为脚本文件,以便在命令窗口察看运行结果。利用clear或clearall命令清除以前的运算结果,以免程序运行受以前结果的影响。在程序的适当位置添加keyboard指令,增加程序的交互性。程序运行到keyboard指令时会出现暂停,命令窗口的命令提示符“>>”前会多出一个字母K,此时用户可以很方便的查看和修改中间变量的取值。在“K>>”的后面输入return指令,按回车键即可结束查看,继续向下执行原程序。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=13+53+33。
clears=[]; %置水仙花数数组为空
index=0; %置水仙花数数量标志为0fori=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;%存储找到的水仙花数
endendendendsindexM函数文件什么是M函数文件MATLAB函数是一种特殊形式的M文件,它和M脚本文件的不同之处在于M函数文件运行在独立的工作区,一般要自带参数且返回结果。MATLAB中的M函数文件由function语句引导,说明此文件是一个函数,它通过输入参数列表接受输入数据,并将结果返回给输出参数列表。M函数文件中所创建的变量都不是全局变量,仅在函数运行时有效,函数运行完毕之后,它所定义的变量将从工作空间中删除M函数文件的基本形式
function[outarg1,outarg2,...]=
fname(inarg1,inarg2,...)%H1commentline%Othercommentlines
...
(Executablecode)
...(return)
其中,function语句标志函数的开始,一般情况下会指定函数的名称和输入输出列表。输入函数列表显示在函数名后面的括号中。输出函数列表显示在等号左边的中括号中,如果只有一个输出参数,中括号可以省略。如果函数无确定返回值,只是进行某些操作,则也可以没有输出参数
编写M函数文件求半径为r的圆的周长和面积。
function[s,l]=calculate_circle(r)
%CIRCLECalculatetheareaandperimeterofacircle%[S,L]=CALCULATE_CIRCLE(R)calculatetheareaSandtheperimeter%LofacirclewithradiusRs=pi*r^2;l=2*pi*r;函数命名为calculate_circle.m并存于MATLAB的搜索路径之中,然后在MATLAB的命令窗口即可进行调用
M函数文件可以无输出参数当M函数文件只是进行某些操作、打印某些信息的时候,可以不需要输出参数functionprimeornot(a)if~isreal(a)||round(a)~=a||a<0||length(a)~=1disp('pleaseinputanpositiveinteger!')returnendifa==1fprintf('%disnotaprimenumber\n',a);returnendflag=0;fori=1:fix(sqrt(a))ifmod(a,i)==0flag=flag+1;ifflag>1fprintf('%disnotaprimenumber\n',a);return
endendendfprintf('%disaprimenumber\n',a);M函数文件M函数文件的执行在命令窗口直接键入函数的名字就可以调用这个函数了,同时也可以在脚本文件中或者其他函数中调用。调用一个函数时,第一个实参的值用在第一个形参的位置,而且其余的形参和实参都一一对应。nargin代表调用函数时实际输入参数的个数,nargout代表调用函数时实际输出参数的个数M函数文件的编写规则函数名和文件名相同。例如,函数flipud存储在名为flipud.m文件中;在function语句的第一个行注释被称为H1注释行,它是对函数功能的总结,并且可以通过lookfor命令将其搜索到并显示出来,例如在命令窗口想找到有rotate关键字的函数时,输入lookforrotate,则会显示一系列函数列表,对函数的说明则正是H1注释行;从H1注释行到第一个空行或第一个可执行性语句之间的注释行可以称为帮助文本,应写明函数的使用方法,包括基本功能、调用方式和参数说明、用例等,帮助文本和H1注释行可以通过help命令显示出来或通过帮助窗口搜索到;函数应当对输入输出参数进行判断,以增强函数功能和其健壮性M函数文件例子通过创建函数cart2polar把直角坐标值(x,y)转化相应的极坐标(r,θ),这个函数支持两个输入参数,x和y。如果用户仅定义一个输入参数,则函数认为直角坐标中的纵坐标为0。函数在一般情况下输出量为模长与幅角(单位为度),如果用户仅定义一个输出参数,函数只返回极坐标中的模长function[r,theta]=cart2polar(x,y)%CART2POLARTransformCartesiantopolarcoordinates.%[R,THETA]=CART2POLAR(X,Y)transformscorrespondingelementsof%datastoredinCartesiancoordinatesX,Ytopolarcoordinates%(angleTHETAandradiusR).ThearraysXandYmustbethesame%size(oreithercanbescalar).THisreturnedinradians.
%Iftheyargumentismissing,setitto0.ifnargin<2y=0;end%Calculatetheradiusmagnituder=sqrt(x.^2+y.^2);%Ifthesecondoutputargumentispresent,calculate%angleindegreesifnargout==2theta=atan2(y,x)*180/pi;endMATLAB程序的调试调试M函数文件的简单方法去掉文件中所选择的行的分号,以便中间结果显示在命令窗口中。分析文件中的关键变量,在文件中加入显示这些变量的语句把keyboard命令放在文件中所选择的地方,给键盘暂时控制权。这样,可以查询函数空间并按需要改变其值在M文件开始,在function语句前加上%,将函数M文件改变为脚本M文件。当MATLAB执行该脚本M文件时,该空间就是MATLAB工作空间。这样,当发生错误时可以询问复杂问题的调试当M文件较为复杂,递归调用或者多次嵌套(即调用其它M文件函数,被调用M文件函数又调用其它M文件函数,等等)时,更好的方法是利用编辑调试工具,在M文件运行之前在文件内设置断点,然后运行程序,当程序运行到断点之后,调试按钮
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 加工课课件教学课件
- 幼师课件用电教学课件
- 2024年国际旅游开发与合作合同
- 2024年广州市二手房交易合同(标准版)
- 2024年度智能制造设备采购合同
- 2024年度物业公司居民关系协调服务合同
- 2024年大数据中心合作运营合同
- 2024年工程质量检验与确认合同
- 鱼罐头课件教学课件
- 2024年库房租赁与健身器材存放合同
- 香菇种植示范基地项目可行性策划实施方案
- 混凝土硫酸盐侵蚀基本机理研究
- 《机械设计基础A》机械电子 教学大纲
- 水工岩石分级及围岩分类
- 基因扩增实验室常用仪器使用课件
- 斜井敷设电缆措施
- 施工机械设备租赁实施方案
- 牙膏产品知识课件
- 液化气站人员劳动合同范本
- 第一章 教育政策学概述
- 常见土源性寄生虫演示文稿
评论
0/150
提交评论