Matlab编程介绍,循环结构综述_第1页
Matlab编程介绍,循环结构综述_第2页
Matlab编程介绍,循环结构综述_第3页
Matlab编程介绍,循环结构综述_第4页
Matlab编程介绍,循环结构综述_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

Matlab软件与基础数学实验

MATLAB编程介绍与循环结构★

MATLAB中每一个命令都是一个M-文件。★

MATLAB中各种命令可以完成许多单一的任务,对于某些较为复杂的问题,仅靠现有的命令或函数来解决,往往是难以达到目的。为此,要运用MATLAB编程语言编制程序,形成M-文件。

程序是使计算机完成各项运算的命令集,运行一个编制好的程序,计算机会从第一条命令行开始,一行接一行地执行相应的命令,直到终止。

MATLAB作为一种高级语言,不但可以以命令行的方式完成操作,而且可以像大多数程序语言一样具有结构控制语句、输入输出语句和面向对MATLAB程序(又称为M-文件)有两种形式,一种是可直接运行的命令文件,另一种是可供调用的函数文件,这两种文件的扩展名相同,均为“.m”,故称为M-文件。象编程的能力。

MATLAB编程介绍

MATLAB程序编辑是在编辑窗口(MATLABEditor/Debugger)中进行,程序运行结果或错误信息显示在在命令窗口(CommandWindows)中。1、编写M-文件的步骤(1)打开程序编辑窗口:点击MATLAB命令窗口工具条上的NewFile图标,或点击命令窗口中的[File]菜单,点击选项中的New,选择M-file,就可打开MATLAB程序编辑窗口(MATLABEditor/Debugger),用户可在窗口中编写、修改程序。(2)保存编写的程序:在程序编写过程中,或程序编写完成后,点击工具条上的Save图标,或按F2键,再选择文件夹:\Matlab\Work,输入自己定义的文件名,点击[保存]保存文件,保存后文件名后自动加上“.m”后缀,即为M-文件。注意:★文件名要以字母开头中间不含空格和标点符号且不超过8个字符;不能用数字和专用变量名作为文件名,如1,11,pi,ans,eps等。★

程序通常保存在文件夹:\Matlab\Work中,此路径为MATLAB软件默认路径。★程序若要存放到其它文件夹中,则要添加该路径到MATLAB的路径设置中,否则程序不能连接执行。

点击编辑窗工具条上[File]菜单,选择SetPath..,此时打开路径设置窗口,再点击AddFoider..,选择你所使用的文件夹(若没有则要先新建),选定后该路径自动显示在列表的第一行或最后一行,再点击Save保存即可。具体操作:2、运行M-文件

运行一个已经编写好且存盘的M-文件有两种方法:

在MATLAB编辑窗口中对正在编辑的M-文件,保存后可直接点击工具条上的Debug中的Run命令运行或按F5键,即可运行当前程序,其运行结果或信息显示在命令窗口,此时,用户可以切换到命令窗口进行查看,之后可回到编辑窗对程序进行修改、重新保存再次运行。方法一:

在MATLAB命令窗口中直接输入文件名回车,即可运行相应的M-文件。其运行结果或程序运行中的错误信息等显示在命令窗口,此时,用户若要修改程序则可以切换到编辑窗口进行修改,修改后重新保存。方法二:

当对程序进行修改保存时,当前程序将覆盖原来程序,此时若要想保存为另外的文件,则要点击工具条上[File]菜单,选择Saveas..,另取文件名保存即可。注意:例1、分别建立命令文件和函数文件,将华氏温度f转换为摄氏温度c。首先建立命令文件并以文件名yy1.m存盘。clear;%清除工作空间中的变量f=input('InputFahrenheittemperature:');c=5*(f-32)/9然后在MATLAB的命令窗口中输入yy1,将会执行该命令文件,执行情况为:InputFahrenheittemperature:73c=22.7778程序1:首先建立函数文件yy2.m。functionc=yy2(f)c=5*(f-32)/9然后在MATLAB的命令窗口调用该函数文件。clear;y=input('InputFahrenheittemperature:');x=yy2(y)输出情况为:InputFahrenheittemperature:70c=21.1111x=21.1111程序2:

MATLAB程序的基本结构

MATLAB提供了三种基本的程序结构:顺序结构、循环结构和选择结构。一个MATLAB程序就是使计算机实现某一类功能任务的命令集。用户编制程序时,需要按照解决问题的逻辑步骤和求解算法,用MATLAB的语句和函数,按照三种基本结构逐条编写,一般一行一条语句,便于调试和查找错误。其中功能处理部分是核心,主要是根据处理问题的逻辑步骤,采用循环迭加、判断推理、分步计算等来解决问题。程序一般包含三个部分:数据输入、功能处理、结果输出

程序编写完成后,需要存盘,形成永久性文件,之后可以随时对它进行调用或修改。M-文件中的输入、输出方式1、输入方式s='Anystring!';%输入字符串(1)程序中直接赋值x=2;%输入单个值a=[1,2,3;4,5,6;7,8,0];%输入矩阵(a为3阶方阵)(2)程序运行时赋值变量=input('提示符号串');格式:功能:

从键盘接收数据并赋予等号左边变量。其中

'提示符号串'是在命令窗口中的提示。

y=input('Pleaseinputy=');%提示语句输入如:x=input('x=');

当执行到此语句时,暂停程序运行,在命令窗口中光标将停留在提示符号串后闪烁,等待从键盘接收数据。用户从键盘输入数据并按回车键确认,继续程序运行。其优点是每次运行可以输入不同数据,实现人机对话。

如果在input函数调用时采用's'选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令:xm=input('What''syourname?','s');2、输出方式(1)直接输出x%变量后无分号“;”,变量直接输出disp([a]);%a可以是矩阵、数组和单个值(2)格式控制输出(fprintf命令)fprintf('x=%.3f

y=%.0f\n',a,b);%按指定格式输出格式:

其中,单引号内为格式说明符:%前为提示符,%.3f为数据格式符,通常与单引号后面的数据相对应,

f指显示一实数,.3表示显示的数小数点后3位,小数点前整数部分不限。%.0f指显示一实数其小数部分显示0位,结果只显示整数部分。\n为换行命令符,即一行显示结束后,光标自动换到下一行。a,b为要显示的变量,它们与前面的格式符相对应。例:

fprintf('x=%.5fy=%.0f\n',pi,sqrt(2));结果为:

x=3.14159y=1fprintf('x=%.5fy=%.0f\n',sqrt(2),pi);结果为:

x=1.41412y=3

x=input('Inputxplease.');y=input('Inputyplease.');z=x;x=y;y=z;disp(x);disp(y);例:输入x,y的值,并将它们的值互换后输出。a=input('a=');b=input('b=');c=input('c=');d=b*b-4*a*c;x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);例:求一元二次方程ax^2+bx+c=0的根。a=1b=2c=3x1=-1+1.4142i,x2=-1-1.4142i结果为:

若要强行中止程序的运行可使用Ctrl+C命令。3、程序的暂停暂停程序的执行可以使用pause函数,其调用格式为:pause(延迟秒数)如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。MATLAB选择结构1、单项选择判断(if-end)结构格式:

if

(condition) commands-1;endcommands-2;作用:

若条件condition成立,则执行commands-1,再顺序执行commands-2;否则,跳过commands-1,直接执行commands-2.例:求任意有限数组a=[a(1),a(2),…,a(n)]

中数值最大的元素M以及所在位置k.分析:

这是一个求n个实数中最大(最小)数的问题,可以编制一个函数文件,随时调用。首先可以假设最大数M=a(1),位置k=1;再从第二个数到最后一个数分别同M比较,取较大者为M,同时保留其位置。因此,运用循环加判断编制程序来实现。function[M,k]=yy3(a)

%定义函数yy3,输入变量为数组a,返回值为最大元素M及位置kn=length(a);%获取数组的长度即元素的个数nM=a(1);k=1;%将第一个元素作为最大值赋值给M,位置为1;fori=2:n%从第二个元素到最后一个元素依次进行ifa(i)>M%比较后续元素与目前最大值M的大小M=a(i);k=i;%将数值较大的元素赋值给M,同时保留位置iend%选择结构结束end%循环结构结束编写完成后以文件名yy3存盘(这里是函数命令程序)。此时,MATLAB函数库中多了个函数yy3.m,可进行调用。在命令窗中试运行如下:>>a=[1,2.2,pi,-0.8,3.2,0];%任意给定一数组>>[M,k]=yy3(a)%调用函数yy3M=3.2000k=52、多项选择判断(if-else-end)结构格式:

if(condition1) commands-1;elseif(condition2)commands-2;elsecommands-3;endcommands-4;作用:

若条件condition1成立,则执行commands-1,再转向end,顺序执行后续的命令commands-4;否则判断条件condition2是否成立,若成立,则执行commands-2,再转向end执行后续的命令;若条件condition1和条件condition2均不成立,则执行命令集commands-3,再顺序向下执行。例:编写一个函数将百分制成绩转换为优(A),良(B),中(C),差(D)四等级.分析:

按照通常的等级划分,一般90-100分为优,78-89分为良,60-77分为中,60分以下的为差,因此,可以用多项选择判断结构来实现。functionjb=dengji(fs)

%定义函数dengji,输入变量为分数fs,返回值为等级A,B,C,Diffs>=90%判断分数fs是否处在优秀级别上jb=‘A’;%定义为A级elseiffs>=78%判断分数fs是否处在良好级别上jb='B';%定义为B级elseiffs>=60%判断分数fs是否处在合格级别上jb='C';%定义为C级else%分数fs不处于以上任何级别上jb='D';%定义为D级end%选择结构结束

编写完成后以文件名dengji存盘。此时,MATLAB函数库中多了个函数dengji.m,可进行调用。在命令窗中试运行如下:>>jb=dengji(81)%调用函数dengjijb=Bx=input('请输入x的值:');ifx<=0y=(x+sqrt(pi))/exp(2);elsey=log(x+sqrt(1+x*x))/2;endY例:计算分段函数的值。3、switch语句switch语句根据表达式的取值不同,分别执行不同的语句,其语句格式为:switch表达式

case表达式1

语句组1case表达式2

语句组2……case表达式m

语句组motherwise

语句组nend

当表达式的值等于表达式1的值时,执行语句组1,当表达式的值等于表达式2的值时,执行语句组2,…,当表达式的值等于表达式m的值时,执行语句组m,当表达式的值不等于case所列的表达式的值时,执行语句组n。当任意一个分支的语句执行完后,直接执行switch语句的下一句clearn=input('inputn=');switchmod(n,5)case0fprintf('%d是5的倍数',n)otherwisefprintf('%d不是5的倍数',n)endinputn=4646不是5的倍数例:判断任意给定的整数n是否为5的倍数,并输出判断结果。price<200没有折扣200≤price<5003%折扣500≤price<10005%折扣1000≤price<25008%折扣2500≤price<500010%折扣5000≤price14%折扣例:某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示):输入所售商品的价格,求其实际销售价格。price=input('请输入商品价格');switchfix(price/100)case{0,1}%价格小于200rate=0;case{2,3,4}%价格大于等于200但小于500rate=3/100;casenum2cell(5:9)%价格大于等于500但小于1000rate=5/100;casenum2cell(10:24)%价格大于等于1000但小于2500rate=8/100;casenum2cell(25:49)%价格大于等于2500但小于5000rate=10/100;otherwise%价格大于等于5000rate=14/100;endprice=price*(1-rate)%输出商品实际销售价格MATLAB循环结构与应用

循环结构是MATLAB程序中最常用的结构之一,它是让计算机按照一定的条件多次重复执行某一命令集,从而实现诸如累加、迭代、分层计算等功能。MATLAB软件提供了两种循环结构:有限次循环for-end结构和条件循环while-end结构。1、有限次循环(for-end)结构for

n=n1:step:n2

commands-1

end

commands-2格式:其中n为循环变量(自己定义),n1为起始值,step为步长,n2为结束值;commands-1为循环体(循环模块),commands-2为后序命令。

循环变量n从n1开始,执行commands-1,遇到end时n自动增加step步长,同时与n2比较,当n不超过n2时重复执行commands-1;当n超过n2时转向执行commands-2。当步长为1时,格式中step可以省略,即为forn=n1:n2格式。在设计for-end循环结构时,应在循环模块内充分利用循环变量的变化规律,开展相关的运算。另外,结构中for与end要成对出现。作用:例:求n(n=100)个奇数的和:s=1+3+5+…+(2n-1).

这是一个逐个累加求和的过程,从1开始存放在和s中,再累加下一个奇数之后再取代和s,依次类推,直到累加到第n个奇数。因此,使用循环结构来实现。分析:clear;clc;n=100;%赋值给定奇数的个数

s=0;%设定存放和的变量s并赋初值0fori=1:n%定义循环变量i从1到n,以1为步长,即为奇数序号s=s+(2*i-1);%先计算右端累加后再赋给左端的变量sfprintf('i=%.0f,s=%.0f\n',i,s)%逐行显示出累加求和的过程end%循环结构结束

是否可以(1)直接用从1开始的奇数作为循环变量?(2)不需要显示求和过程,只显示最后结果?如果可以,请修改上述程序并运行。问题:n=input('inputn:=');f(1)=1;f(2)=1;fork=3:nf(k)=f(k-1)+f(k-2);endf(n)例:求裴波拉奇数列的第n项(n>2)n:=10,f(10)=55n:=44,f(44)=701408733例:求正整数n的阶乘:p=1×2×3×…×n=n!,并求出n=20时的结果。分析:

这是一个逐次乘积的过程,从1开始存放在积p中,再乘以下一个正整数之后再取代积p,依次类推,直到乘至第n个数。因此,使用循环结构来实现。

clear;clc;n=20;%赋值给定正整数

p=1;%设定存放阶乘的变量p并赋初值1

fori=1:n%定义循环变量i从1到n,以1为步长,即连续正整数

p=p*i;%先计算右端乘积后再赋给左端的变量pfprintf('i=%.0f,p=%.0f\n',i,p)%逐行显示出i!end%循环结构结束问题:

是否可以考虑利用input命令对n进行赋值,随时改变其大小。如果可以,请修改上述程序并运行。例:根据麦克劳林公式可以得到e≈1+1+1/2!+1/3!+…+1/n!,试求e的近似值。分析:

这个问题可以分解为,从1开始的正整数阶乘的倒数和的累加运算,累加结果存放在初始值为1的变量中。因此,对上例进行修改来实现。

clear;clc;n=10;%赋值给定正整数p=1;%设定存放阶乘的变量p并赋初值1s=1;%设定存放累加和的变量s并赋初值1fori=1:n%定义循环变量i从1到n,以1为步长,即连续正整数p=p*i;%先计算右端乘积后再赋给左端的变量ps=s+1/p;%先计算右端阶乘倒数的累加后再赋给左端的变量sfprintf('i=%.0f,s=%.8f\n',i,s)%逐行显示出e的近似值end%循环结构结束问题:

如何有效地控制e的近似值的精度,或者说如何修改程序使其根据近似值的精度要求自动控制循环次数?2、条件循环(while-end)结构格式:

while(conditions) commands-1;

endcommands-2;

当条件conditions为真时,执行commands-1,当遇到end时,自动检测条件;当条件conditions不满足时,转向执行commands-2。在设计while-end循环结构时,应在循环模块内有修改conditions的部分,确保在执行了一定次数之后可以结束循环;否则,就成了“死循环”,即无限次重复执行循环。另外,结构中while与end要成对出现。作用:例:对于数列,求其前n项和不超过1000时的n的值及和.分析:这个问题就是求不等式从1开始的连续正整数开方的累加。因此,运用循环结构来实现,的整数解,而和s为但每次累加前要判断大小。clear;clc;n=0;%设定正整数并赋初值0s=0;%设定存放累加和的变量s并赋初值0whiles<=1000%用累加和s与1000进行比较作为循环条件n=n+1;%改变n为连续正整数s=s+sqrt(n);%先计算右端开方数的累加后再赋给左端的变量sfprintf('n=%.0f,s=%.4f\n',n,s)%逐行显示正整数及部分和end%循环结构结束问题:

从结果上可以看到,最后一行的结果并不是我们所要求解的答案,而倒数第二行则是所求问题的解。这是为什么?如何修改程序来避免这种情况?例:小猴吃桃问题

有一天小猴摘下了若干个桃子,当即吃掉了一半,又多吃了一个.第二天接着吃了剩下的一半,又多吃了一个以后每天都是吃掉尚存的桃子的一半零一个.到第十天早上,小猴准备吃桃子时,看到只剩下1

个桃子了.问小猴第一天共摘下了多少个桃子?

解:设第k天的桃子数为pk,(k=1,···,10)则规律为k=10;p(k)=1;whilek>=2k=k-1;p(k)=2*(p(k+1)+1);endp(1)Pk-1=2(pk+1)ans=1534例:根据e≈1+1+1/2!+1/3!+…+1/n!求e的近似值,要求精确到小数点后8位。分析:这里不能给定n的大小,但注意到第n次近似值和第n-1次近似值的差:。现要精确到小数点后8位,则只需要因此,可以以此为条件运用条件循环来实现。

,注意:在MATLAB中用科学记数法1.0e-8来表示。clear;clc; p=1;%设定存放阶乘的变量p并赋初值1s=1;%设定存放累加和的变量s并赋初值1r=1;%设定前后两次近似值的误差r并赋初值1k=0;%设定构造连续正整数的变量k赋初值0又为循环次数whiler>=1.0e-8%根据近似值的精度r大小来定义条件循环k=k+1;%转换下一个正整数,或开始统计循环次数p=p*k;%计算k的阶乘pr=1/p;%计算前后两次近似值的误差rs=s+r;%计算e的近似值sfprintf('k=%.0f,s=%.8f\n',k,s)%逐行显示出e的近似值end%循环结构结束MATLAB程序流程控制

在编写程序过程中,根据问题求解的要求,往往需要在一定条件下跳出当前循环,或终止程序运行,或暂停程序运行等,这也就是在编制程序过程中对程序流程进行控制。MATLAB软件提供了相应流程控制语句:break、return和pause等。1、break语句break语句导致包含break

指令的最内层while或for循环的终止。通常是根据循环内部另设的某种条件是否满足来决定是否跳出循环,因此,常和if判断一起使用。在很多情况下,这样做是十分必要的。格式:

while

(conditions-1)

……if

(conditions-2)break;end……

endcommands;作用:

当执行到if模块且条件conditions-2为真时,执行break语句,程序则跳出当前while循环,直接执行循环结构外的commands.a=3;b=6;fori=1:3b=b+1;ifi>2break%当if条件满足时不再执行循环

enda=a+2end分析下列程序,说明运行结果及原因运行结果:a=5a=72、return语句

return语句导致程序终止运行,其结果对普通程序是提前结束运行,对于函数命令程序则是结束该函数程序,并返回到调用函数处。该语句通常和if判断一起使用。格式:

if

(conditions)return;end作用:

当执行到if模块且条件conditions为真时,执行return语句,程序则被终止,提前结束程序的运行。3、pause语句

pause

语句使程序运行暂停,等待用户按任意键继续。Pause

语句在程序调试或查看中间结果时经常使用,它有两种用法:★

直接使用:pause

作用:程序执行此语句时,暂停执行程序,等待用户从键盘按任意键继续运行。★使用按时间暂停形式:pause(n)

(其中n为暂停时间秒数)作用:程序执行此语句时,暂停n秒后继续执行程序,这里n为正的小数或整数,代表暂停时间。它通常可以用来放慢程序运行展示内部过程,可实现动画效果。例:Fibonacci

数组中第一个大于10000的元素。分析:

这是一个按递推公式所生成的序列,每个元素为其前两个元素之和,数列增加很快。因此,通过循环结构来逐步生成数列的元素,并同时和10000比较,超过时终止循环。n=100;%给定一

温馨提示

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

评论

0/150

提交评论