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

下载本文档

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

文档简介

1、Matlab软件与基础数学实验软件与基础数学实验 MATLAB编程介绍与循环结构编程介绍与循环结构 MATLAB中每一个命令都是一个命令都是一个M-文件。文件。 MATLAB中各种命令可以完成许多单一的任务,对于命令可以完成许多单一的任务,对于某些较为复杂的问题,仅靠现有的命令或函数来解决,往某些较为复杂的问题,仅靠现有的命令或函数来解决,往往是难以达到目的往是难以达到目的 。为此,要运用。为此,要运用MATLAB编程语言编编程语言编制程序,形成制程序,形成M-文件。文件。 程序是使计算机完成各项运算的命令集,运行一个编程序是使计算机完成各项运算的命令集,运行一个编制好的程序,计算机会从第一条

2、命令行开始,一行接一行制好的程序,计算机会从第一条命令行开始,一行接一行地执行相应的命令,直到终止。地执行相应的命令,直到终止。 MATLAB作为一种高级语言,不但可以以命令行的方式完成操作,而且可以像大多数程序语言一样具有结构控制语句、输入输出语句和面向对 MATLAB程序(又称为M-文件)有两种形式,一种是可直接运行的命令文件,另一种是可供调用的函数文件,这两种文件的扩展名相同,均为“.m”,故称为M-文件。象编程的能力。 MATLAB编程介绍编程介绍 MATLAB程序编辑是在编辑窗口(MATLAB Editor/Debugger)中进行,程序运行结果或错误信息显示在在命令窗口(Comma

3、nd Windows)中。1 1 、编写、编写M-M-文件的步骤文件的步骤(1)打开程序编辑窗口: 点击MATLAB命令窗口工具条上的New File图标,或点击命令窗口中的File菜单菜单,点击选项中的New,选择M-file, 就可打开MATLAB程序编辑窗口(MATLAB Editor/Debugger),用户可在窗口中编写、修改程序。(2)保存编写的程序:在程序编写过程中,或程序编写完成后,点击工具条上的Save图标,或按F2键,再选择文件夹:MatlabWork,输入自己定义的文件名,点击保存保存文件,保存后文件名后自动加上“.m”后缀,即为M-文件。注意:注意: 文件名要以字母开头

4、中间不含空格和标点符号且不超过文件名要以字母开头中间不含空格和标点符号且不超过8个字符个字符;不能用数字和专用变量名作为文件名,如1,11,pi,ans,eps等。 程序通常保存在文件夹:MatlabWork中,此路径为MATLAB软件默认路径。 程序若要存放到其它文件夹中,则要添加该路径到MATLAB的路径设置中,否则程序不能连接执行。 点击编辑窗工具条上点击编辑窗工具条上FileFile菜单,选择菜单,选择Set Path.Set Path.,此时打开路径设置窗口,再点击此时打开路径设置窗口,再点击Add Foider.Add Foider.,选择你,选择你所使用的文件夹(若没有则要先新建

5、),选定后该路径所使用的文件夹(若没有则要先新建),选定后该路径自动显示在列表的第一行或最后一行,再点击自动显示在列表的第一行或最后一行,再点击Save Save 保存保存即可。即可。具体操作:具体操作:2 2、 运行运行M-M-文件文件 运行一个已经编写好且存盘的M-文件有两种方法: 在MATLAB编辑窗口中对正在编辑的M-文件,保存后可直接点击工具条上的Debug中的Run命令运行或按F5键键,即可运行当前程序,其运行结果或信息显示在命令窗口,此时,用户可以切换到命令窗口进行查看,之后可回到编辑窗对程序进行修改、重新保存再次运行。方法一:方法一: 在MATLAB命令窗口中直接输入文件名回车

6、,即可运行相应的M-文件。其运行结果或程序运行中的错误信息等显示在命令窗口,此时,用户若要修改程序则可以切换到编辑窗口进行修改,修改后重新保存。方法二:方法二: 当对程序进行修改保存时,当前程序将覆盖原来程序,此时若要想保存为另外的文件,则要点击工具条上File菜单菜单,选择Save as.,另取文件名保存即可。注意注意:例例1、 分别建立命令文件和函数文件,将华氏温度分别建立命令文件和函数文件,将华氏温度f转换转换为摄氏温度为摄氏温度c。首先建立命令文件并以文件名首先建立命令文件并以文件名yy1.m存盘。存盘。clear; %清除工作空间中的变量清除工作空间中的变量f=input(Input

7、 Fahrenheit temperature:);c=5*(f-32)/9然后在然后在MATLAB的命令窗口中输入的命令窗口中输入yy1,将会执行,将会执行该命令文件,执行情况为:该命令文件,执行情况为:Input Fahrenheit temperature:73c = 22.7778程序程序1:首先建立函数文件首先建立函数文件yy2.m。function c=yy2(f)c=5*(f-32)/9然后在然后在MATLAB的命令窗口调用该函数文件。的命令窗口调用该函数文件。clear;y=input(Input Fahrenheit temperature:);x=yy2(y)输出情况为:输

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

9、分:程序一般包含三个部分:数据输入、功能处理、结果输出数据输入、功能处理、结果输出 程序编写完成后,需要存盘,形成永久性文件,程序编写完成后,需要存盘,形成永久性文件,之后可以随时对它进行调用或修改之后可以随时对它进行调用或修改。 M-文件中的输入、输出方式文件中的输入、输出方式1、 输入方式输入方式s=Any string!; %输入字符串(1)程序中直接赋值)程序中直接赋值x=2; %输入单个值a=1,2,3;4,5,6;7,8,0; %输入矩阵(a为3阶方阵)(2)程序运行时赋值)程序运行时赋值变量 = input( 提示符号串 );格式格式:功能:功能: 从键盘接收数据并赋予等号左边变

10、量。其中 提示符号串 是在命令窗口中的提示。 y=input(Please input y=); %提示语句输入如:如:x=input( x=); 当执行到此语句时,暂停程序运行,在命令窗口中光标将停留在提示符号串后闪烁,等待从键盘接收数据。用户从键盘输入数据并按回车键确认,继续程序运行。其优点是每次运行可以输入不同数据,实现人机对话。 如果在input函数调用时采用s选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令:xm=input(Whats your name?,s);2、 输出方式输出方式(1)直接输出)直接输出 x %变量后无分号“;”,变量直接输出disp(a)

11、; % a可以是矩阵、数组和单个值(2)格式控制输出()格式控制输出(fprintf命令)命令)fprintf(x=%.3f y=%.0fn , a,b); %按指定格式输出格式格式: 其中,单引号内为格式说明符:%前为提示符,%.3f为数据格式符,通常与单引号后面的数据相对应, f指显示一实数,.3表示显示的数小数点后3位,小数点前整数部分不限。 %.0f指显示一实数其小数部分显示0位,结果只显示整数部分。n为换行命令符,即一行显示结束后,光标自动换到下一行。a,b为要显示的变量,它们与前面的格式符相对应。例例: fprintf(x=%.5f y=%.0fn, pi, sqrt(2);结果为

12、:结果为: x=3.14159 y=1fprintf(x=%.5f y=%.0fn, sqrt(2) ,pi);结果为:结果为: x=1.41412 y=3 x=input(Input x please.); y=input(Input y please.); 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=,nu

13、m2str(x(2);例:例:求一元二次方程求一元二次方程ax2 +bx+c=0的根。的根。a=1b=2c=3x1=-1+1.4142i,x2=-1-1.4142i结果为:结果为: 若要强行中止程序的运行可使用若要强行中止程序的运行可使用Ctrl+C命令。命令。3、程序的暂停、程序的暂停暂停程序的执行可以使用暂停程序的执行可以使用pause函数,其调用格式为函数,其调用格式为:pause(延迟秒数延迟秒数)如果省略延迟时间,直接使用如果省略延迟时间,直接使用pause,则将暂停程序,则将暂停程序,直到用户按任一键后程序继续执行。直到用户按任一键后程序继续执行。MATLAB选择结构选择结构1、单

14、项选择判断(if-end)结构格式格式: if (condition) commands-1; end commands-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,同时保留其位置。因此,运用循环加判

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

16、: 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; else commands-3;end commands-4;作用作用 : 若条件condition1成立,则执行commands-1,再转向end,顺序执行后续的命令commands-4;否则判断条件condition2是否成立,若成立,则执行command

17、s-2,再转向end执行后续的命令;若条件condition1和条件condition2均不成立,则执行命令集commands-3,再顺序向下执行。例:例:编写一个函数将百分制成绩转换为优(A),良(B),中(C),差(D)四等级.分析:分析: 按照通常的等级划分,一般90-100分为优,78-89分为良,60-77分为中,60分以下的为差,因此,可以用多项选择判断结构来实现。function jb=dengji(fs) %定义函数dengji,输入变量为分数fs,返回值为等级A,B,C,Dif fs=90 %判断分数fs是否处在优秀级别上jb= A ; %定义为A级elseif fs=78

18、%判断分数fs是否处在良好级别上jb= B ; %定义为B级elseif fs=60 %判断分数fs是否处在合格级别上jb= C ; %定义为C级else %分数fs不处于以上任何级别上jb= D ; %定义为D级end %选择结构结束 编写完成后以文件名dengji存盘。此时,MATLAB函数库中多了个函数dengji.m,可进行调用。在命令窗中试运行如下: jb=dengji(81) %调用函数dengji jb = B x=input(请输入请输入x的值的值:);if x=0 y= (x+sqrt(pi)/exp(2);else y=log(x+sqrt(1+x*x)/2;endY例:例

19、: 计算分段函数的值。计算分段函数的值。3、switch语句语句 switch语句根据表达式的取值不同,分别执行不同的语句根据表达式的取值不同,分别执行不同的语句,其语句格式为:语句,其语句格式为:switch 表达式表达式 case 表达式表达式1 语句组语句组1 case 表达式表达式2 语句组语句组2 case 表达式表达式m 语句组语句组m otherwise 语句组语句组n end 当表达式的值等于表达式当表达式的值等于表达式1的值时,执行语句组的值时,执行语句组1,当表达,当表达式的值等于表达式式的值等于表达式2的值时,执的值时,执行语句组行语句组2,当表达式的值,当表达式的值等于

20、表达式等于表达式m的值时,执行语句的值时,执行语句组组m,当表达式的值不等于,当表达式的值不等于case所列的表达式的值时,执行语句所列的表达式的值时,执行语句组组n。当任意一个分支的语句执。当任意一个分支的语句执行完后,直接执行行完后,直接执行switch语句的语句的下一句下一句clearn=input(input n=);switch mod(n,5)case 0 fprintf(%d 是是5的倍数的倍数,n)otherwise fprintf(%d 不是不是5的倍数的倍数,n)endinput n=4646 不是5的倍数例:例: 判断任意给定的整数判断任意给定的整数n是否为是否为5的倍数

21、,并输出判断结果。的倍数,并输出判断结果。price200 没有折扣没有折扣200price500 3%折扣折扣500price1000 5%折扣折扣1000price2500 8%折扣折扣2500price 2)n:=10, f(10)=55n:=44, f(44)=701408733例例:求正整数n的阶乘:p=12 3 n = n!,并求出n=20时的结果。分析:分析: 这是一个逐次乘积的过程,从1开始存放在积p中,再乘以下一个正整数之后再取代积p,依次类推,直到乘至第n个数。因此,使用循环结构来实现。 clear;clc;n=20; %赋值给定正整数 p=1; %设定存放阶乘的变量p并赋

22、初值1 for i=1:n %定义循环变量i从1到n,以1为步长,即连续正整数 p=p*i; %先计算右端乘积后再赋给左端的变量p fprintf(i=%.0f, p=%.0fn,i,p) %逐行显示出i! end %循环结构结束问题:问题: 是否可以考虑利用input命令对n进行赋值,随时改变其大小。如果可以,请修改上述程序并运行。 例:根据麦克劳林公式可以得到e1+1+1/2!+1/3!+1/n!,试求e的近似值。分析分析: 这个问题可以分解为,从1开始的正整数阶乘的倒数和的累加运算,累加结果存放在初始值为1的变量中。因此,对上例进行修改来实现。 clear;clc;n=10; %赋值给定

23、正整数p=1; %设定存放阶乘的变量p并赋初值1s=1; %设定存放累加和的变量s并赋初值1for i=1:n %定义循环变量i从1到n,以1为步长,即连续正整数p=p*i; %先计算右端乘积后再赋给左端的变量ps=s+1/p; %先计算右端阶乘倒数的累加后再赋给左端的变量sfprintf(i=%.0f, s=%.8fn,i,s) %逐行显示出e的近似值end %循环结构结束问题:问题: 如何有效地控制e的近似值的精度,或者说如何修改程序使其根据近似值的精度要求自动控制循环次数?2 2、 条件循环(条件循环(while-endwhile-end)结构)结构格式:格式: while (condi

24、tions) commands-1; endcommands-2; 当条件 conditions为真时,执行commands-1,当遇到end时,自动检测条件;当条件 conditions不满足时,转向执行commands-2。在设计while-end循环结构时,应在循环模块内有修改conditions的部分,确保在执行了一定次数之后可以结束循环;否则,就成了“死循环”,即无限次重复执行循环。另外,结构中while与end要成对出现。作用:作用:例:对于数列, 2 , 1,nn,求其前n项和不超过1000时的n的值及和.分析分析: 这个问题就是求不等式100021ns从1开始的连续正整数开方的

25、累加。因此,运用循环结构来实现,的整数解,而和s为但每次累加前要判断大小。clear;clc;n=0; %设定正整数并赋初值0s=0; %设定存放累加和的变量s并赋初值0while s=2 k=k-1; p(k)=2*(p(k+1)+1);endp(1)1211 kkppPk-1 =2(pk +1)ans = 1534例:例:根据e1+1+1/2!+1/3!+1/n! 求e的近似值,要求精确到小数点后8位。分析分析: !/11neenn8110!/ 1neenn这里不能给定n的大小,但注意到第n次近似值和第n-1次近似值的差:。现要精确到小数点后8位,则只需要因此,可以以此为条件运用条件循环来

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

27、%循环结构结束MATLAB程序流程控制程序流程控制 在编写程序过程中,根据问题求解的要求,往往需要在一定条件下跳出当前循环,或终止程序运行,或暂停程序运行等,这也就是在编制程序过程中对程序流程进行控制。MATLAB软件提供了相应流程控制语句:break、return和pause等。1、 break语句语句 break 语句导致包含break 指令的最内层while或for循环的终止。通常是根据循环内部另设的某种条件是否满足来决定是否跳出循环,因此,常和if判断一起使用。在很多情况下,这样做是十分必要的。 格式:格式: while (conditions-1) if (conditions-2)

28、break;end endcommands;作用作用: 当执行到ifif模块且条件 conditions-2conditions-2为真时,执行breakbreak语句,程序则跳出当前whilewhile循环,直接执行循环结构外的commandscommands.a=3;b=6;for i=1:3 b=b+1; if i2 break %当当if条件满足时不再执行循环条件满足时不再执行循环 end a=a+2end分析下列程序,说明运行结果及原因分析下列程序,说明运行结果及原因运行结果运行结果:a=5a=72 、 return语句 return 语句导致程序终止运行,其结果对普通程序是提前结束

29、运行,对于函数命令程序则是结束该函数程序,并返回到调用函数处。该语句通常和if判断一起使用。格式:格式: if (conditions)return;end作用:作用: 当执行到if模块且条件 conditions为真时,执行return语句,程序则被终止,提前结束程序的运行。3 、 pause语句 pause 语句使程序运行暂停,等待用户按任意键继续。Pause 语句在程序调试或查看中间结果时经常使用,它有两种用法: 直接使用:pause 作用作用:程序执行此语句时,暂停执行程序,等待用户从键盘按任意键继续运行。使用按时间暂停形式:pause(n) (其中n为暂停时间秒数)作用:作用:程序执

30、行此语句时,暂停n秒后继续执行程序,这里n为正的小数或整数,代表暂停时间。它通常可以用来放慢程序运行展示内部过程,可实现动画效果。例:例:Fibonacci 数组中第一个大于10000的元素。分析:分析: 这是一个按递推公式所生成的序列,每个元素为其前两个元素之和,数列增加很快。因此,通过循环结构来逐步生成数列的元素,并同时和10000比较,超过时终止循环。 n=100; %给定一个较大的n作为数列的位置a=1,1; %设定数列的初始值for i=3:n %从第3个元素开始循环递推生成后续元素p=a(i-1)+a(i-2); %前两个元素之和生成后续元素pa=a,p; %将刚产生的元素p放置到数组a的最后,拼接成新的数组if p10000 %判断将刚产生的元素p是否超过10000break; %跳出所在的for循环

温馨提示

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

评论

0/150

提交评论