matlab编程介绍与循环结构ppt课件.ppt

上传人:牧羊曲112 文档编号:2002395 上传时间:2022-12-30 格式:PPT 页数:33 大小:380KB
返回 下载 相关 举报
matlab编程介绍与循环结构ppt课件.ppt_第1页
第1页 / 共33页
matlab编程介绍与循环结构ppt课件.ppt_第2页
第2页 / 共33页
matlab编程介绍与循环结构ppt课件.ppt_第3页
第3页 / 共33页
matlab编程介绍与循环结构ppt课件.ppt_第4页
第4页 / 共33页
matlab编程介绍与循环结构ppt课件.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《matlab编程介绍与循环结构ppt课件.ppt》由会员分享,可在线阅读,更多相关《matlab编程介绍与循环结构ppt课件.ppt(33页珍藏版)》请在三一办公上搜索。

1、实验 matlab编程介绍与循环结构,3.1.1 建立、运行M-文件的步骤,1. 建立M-文件的步骤(1) 打开程序编辑窗口,点击matlab命令窗口工具条上的New File图标,或点击命令窗口中的File菜单,点击选项中的New,选择M-file,就可以打开打开MATLAB程序编辑窗口,用户可在窗口中输入、编辑程序。 (2) 保存程序:在程序输入过程中或程序输入完成后,点击工具条上的Save图标,或点击File菜单下的Save,在弹出的窗口中输入自己定义的文件名,点击保存保存文件。此时,程序被保存在默认路径指定的work文件夹中(初学者最好不要改变这个路径,避免添加路径步骤),保存后的文件

2、名自动加上“.m”后缀,即为M-文件。,注意:文件名是要以字母开头中间不含空格和标点符号的字符串;不能用汉字、数字和专用变量名作为文件名,如1,11,pi,ans等。程序通常保存在文件夹:MATLAB6p5work中,此路径为MATLAB的默认路径。程序若要存放到其他文件夹中,则要添加该路径到MATLAB的路径设置中,否则程序不能执行。具体操作:点击编辑窗工具条上File菜单,选择Set Path.,此时打开路径设置窗口,再点击Add Foider.,选择你所使用的文件夹(若没有,则要先新建),选定后该路径自动显示在列表的第一行或最后一行,再点击Save保存即可。,2. 运行M-文件运行M-文

3、件有两种方法:方法一:在MATLAB编辑窗口中对正在编辑的M-文件,保存后可直接点击工具条上的Debug中的Run命令(或按F5键),即可运行当前程序。其运行结果或信息显示在命令窗口,此时,用户可以切换到命令窗口进行查看,之后可回到编辑窗对程序进行修改,重新保存再次运行。方法二:在MATLAB命令窗口中直接输入文件名回车,即可运行相应的M-文件。其运行结果或程序运行中的错误信息等显示在命令窗口,此时,用户若要修改程序则可以切换到编辑窗口进行修改,修改后重新保存。注意:当对程序进行修改保存时,当前程序将覆盖原来程序。此时若想保存为另外的文件,则要点击工具条上的File菜单,选择Save as.,

4、另取文件名保存即可。,3.1.2 MATLAB程序的基本结构程序是使计算机实现某一类功能任务的命令集。MATLAB提供了三种基本的程序结构:顺序结构、循环结构和选择结构。因此,MATLAB中除了按正常顺序执行程序中的命令和函数以外,有多种控制程序流程的语句,这些语句包括for,while,if,switch,try,continue,break,return等。用户编制程序时,需要按照解决问题的逻辑步骤和求解算法,用MATLAB提供的这些语句和函数,按照三种基本结构逐条编写。一般一行一条语句,以便调试和查找错误。程序一般包含三个部分:数据输入、功能处理和结果输出。其中功能处理部分是核心,主要是

5、根据处理问题的逻辑步骤,采用循环迭代、判断推理、分步计算等来解决问题。,3.1.3 M-文件的输入、输出方式M-文件的输入、输出方式同前面所讲的命令窗中的输入、输出方式基本相同,具体如下:1. 输入方式(1) 程序中直接赋值x=2;a=1 2 3;4 5 6;7 8 0;s=Any string !,3. 程序运行时赋值格式:变量=input(提示符号串);功能: 从键盘接收数据并赋予等号左边变量。其中提示符号串是在命令窗口中的提示。如:X=input(x=);Y= input(Please input y=); %提示语句输入当执行此语句时,暂停程序运行,在命令窗口中光标将停留在提示符号串后

6、闪烁,等待从键盘接收数据。用户从键盘输入数据并按回车键确认,继续程序运行。其优点是,每次运行可以输入不同数据,实现人机对话。,2. 输出方式(1)直接输出% 变量后无分号“;”,变量直接输出disp(a); % a可以是标量、向量、矩阵(2) 格式控制输出格式:fprintf(x=%.3f y=%.0fn,a,b); %按指定格式输出;其中,单引号内为格式说明符,%前为提示符,%.3f为数据格式符,通常与单引号后面的数据项对应,f指显示一个实数,3表示显示的数小数点后3位,小数点前整数部分不限。%.0f指显示一实数其小数部分显示0位,结果只显示整数部分。n为换行符,即一行显示结束后,光标自动换

7、到下一行。a、b为要显示的变量,它们与前面的格式符相对应。,例如:fprintf(x=%.5f y=%.0fn,pi,sqrt(2);x=3.14159 y=1fprintf(x=%.5f y=%.0fn ,sqrt(2), pi);x=1.41421 y=3,3.2 MATLAB循环结构与应用,循环结构是MATLAB程序中最常见的结构之一,它是让计算机按照一定的条件多次重复执行某一命令集,从而实现诸如累加、迭代、分层计算等功能。MATLAB软件提供了两种循环结构:有限次循环for-end结构和条件循环while-end结构。,3.2.1 有限次循环(for-end)结构,格式: for n

8、= n1: step: n2 commands-1 endcommands-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时可省略。,在设计for-end循环结构时,应在循环模块内充分利用循环变量的变化规律,开展相关运算。另外,结构中for与end要成对出现。,例3-1:求n(n=100)

9、个奇数的和:s=1+3+5+(2n-1).clear;clc; %清除内存变量,清理命令窗口n=100; %赋值给定奇数的个数s=0; %设定存放和的变量s并赋初值0for i=1:n %定义循环变量i从1到n,以1为步长,即为奇数序号s=s+(2*i-1); %先计算右端奇数并累加后再赋给左端的变量sfprintf(i=%.0f, s=%.0fn,i,s) %逐行显示出累加求和的过程end % 循环体结束,i=1, s=1i=98, s=9604i=99, s=9801i=100, s=10000,问题1:可否用从1开始的奇数作为循环变量?,clear;clc; %清除内存变量,清理命令窗口

10、n=2*100-1; %赋值给定奇数的个数s=0; %设定存放和的变量s并赋初值0for i=1:2:n %定义循环变量i从1到n,以1为步长,即为奇数序号s=s+i; %先计算右端奇数并累加后再赋给左端的变量 end % 循环体结束fprintf(i=%.0f, s=%.0fn,i,s) %逐行显示出累加求和的过程,clear;clc; %清除内存变量,清理命令窗口m= input(请输入第m个奇数)n=2*m-1; %赋值给定奇数的个数s=0; %设定存放和的变量s并赋初值0for i=1:2:n %定义循环变量i从1到n,以1为步长,即为奇数序号s=s+i; %先计算右端奇数并累加后再赋

11、给左端的变量 end % 循环体结束fprintf(i=%.0f, s=%.0fn,i,s) %逐行显示出累加求和的过程,问题2:不显示求和过程,只显示最后结果?,clear;clc; %清除内存变量,清理命令窗口n=100; %赋值给定奇数的个数s=1; %设定存放和的变量s并赋初值0for i=2:n %定义循环变量i从1到n,以1为步长,即为奇数序号s=s+(2*i-1); %先计算右端奇数并累加后再赋给左端的变量send fprintf(i=%.0f, s=%.0fn,i,s) %显示出最后结果,例3-2:求正整数n的阶乘:p=12 3 n = n!,并求出n=20时的结果。,分析:这

12、是一个逐次乘积的过程,从1开始存放在积p中,再乘以下一个正整数之后再取代积p,以此类推,直到乘至第n个数,因此,使用循环结构来实现。,i=1, p=1i=2, p=2i=3, p=6i=4, p=24i=5, p=120i=6, p=720i=7, p=5040i=8, p=40320i=9, p=362880i=10, p=3628800i=11, p=39916800i=12, p=479001600i=13, p=6227020800i=14, p=87178291200i=15, p=1307674368000i=16, p=20922789888000i=17, p=35568742

13、8096000i=18, p=6402373705728000i=19, p=121645100408832000i=20, p=2432902008176640000,只显示最后一个数的阶乘,clear;clc; %清除内存变量,清理命令窗口n=20; %赋值给定正整数p=1; %设定存放阶乘的变量p并赋初值1for i=1:n %定义循环变量i从1到n,以1为步长,即连续正整数p=p*i; %先计算右端乘积后再赋给左端的变量pend %循环结构结束fprintf(i=%.0f, p=%.0fn,i,p) %显示出i和p (注意该行要不要“;”都会输出)i=20, p=24329020081

14、76640000,fprintf(i=%.0f, p=%.0fn,i,p) 可改为:i,p,clear;clc; %清除内存变量,清理命令窗口n=20; %赋值给定正整数p=1; %设定存放阶乘的变量p并赋初值1for i=1:n %定义循环变量i从1到n,以1为步长,即连续正整数p=p*i; %先计算右端乘积后再赋给左端的变量pend %循环结构结束i,p%fprintf(i=%.0f, p=%.0fn,i,p) 可改为:i,pi=20, p = 2.4329e+018,利用input命令对n进行赋值,随时改变其大小。,clear;clc; %清除内存变量,清理命令窗口p=1; %设定存放阶

15、乘的变量p并赋初值1n= input(Please input n=)for i=1:n %定义循环变量i从1到n,以1为步长,即连续正整数p=p*i; %先计算右端乘积后再赋给左端的变量pend %循环结构结束fprintf(i=%.0f, p=%.0fn,i,p) %显示出i,Please input n=Please input n=10n = 10i=10, p=3628800,例3-3:根据麦克劳林公式可以得到e1+1+1/2!+1/3!+1/n!,试求e的近似值。,clear;clc; %清除内存变量,清理命令窗口n=10; %赋值给定正整数p=1; %设定存放阶乘的变量p并赋初值

16、1s=1; %设定存放累加和的变量s并赋初值1for i=1:n %定义循环变量i从1到n,以1为步长p=p*i; %先计算右端乘积后再赋给左端的变量p,此时p为i的阶乘s=s+1/p; %先计算右端阶乘倒数的累加后再赋给左端的变量sfprintf(i=%.0f, s=%.8fn,i,s) %逐行显示出第i次e的近似值 end %循环结构结束,i=1, s=2.00000000i=2, s=2.50000000i=3, s=2.66666667i=4, s=2.70833333i=5, s=2.71666667i=6, s=2.71805556i=7, s=2.71825397i=8, s=2

17、.71827877i=9, s=2.71828153i=10, s=2.71828180,问题:如何有效控制e的近似值的精度,或者说如何修改程序使其根据近似值的精度要求自动控制循环次数?,3.2.2 条件循环(while-end)结构,格式:while(conditions) Commands-1; End Commands-2;作用:当条件conditions成立即条件为真时,执行commands-1,当遇到end时,自动检测条件;当条件conditions不满足时,转向执行commands-2。在设计while-end循环结构时,应在循环模块内有改变conditions的内容,确保在执行了

18、一定次数之后可以结束循环;否则,就成了“死循环”,即无限次重复执行循环。另外,结构中while与end要成对出现。,例3-4:对于数列 ,求其前n项和不超过1000时的n的值及和.,分析:用循环结构来实现,但每次累加前要判断大小。clear;clc; %清除内存变量,清理命令窗口n=0; %设定正整数并赋初值0s=0; %设定存放累加和的变量s并赋初值0while s=1000 %用累加和s与1000进行比较作为循环条件n=n+1; %改变n为连续正整数s=s+sqrt(n); %先计算右端开方数的累加后再赋给左端的变量sfprintf(n=%.0f, s=%.4fn,n,s) %逐行显示正整

19、数及部分和end %循环结构结束,n=128, s=970.8891n=129, s=982.2469n=130, s=993.6487n=131, s=1005.0942,问题:从结果上看,最后一行的结果并不是要求的答案,而倒数第二行是所求问题的解。这是为什么?如何修改程序来避免这种情况?,clear;clc; %清除内存变量,清理命令窗口n=0; %设定正整数并赋初值0s=0; %设定存放累加和的变量s并赋初值0while s1000fprintf(n=%.0f, s=%.4fn,n-1,a) end n=130, s=993.6487,问题:从结果上看,最后一行的结果并不是要求的答案,而

20、倒数第二行是所求问题的解。这是为什么?如何修改程序来避免这种情况?,clear;clc; %清除内存变量,清理命令窗口n=0; %设定正整数并赋初值0s=0; %设定存放累加和的变量s并赋初值0while s=1000 %用累加和s与1000进行比较作为循环条件n=n+1; %改变n为连续正整数a=s;s=s+sqrt(n); %先计算右端开方数的累加后再赋给左端的变量send %循环结构结束 if s=1000fprintf(n=%.0f, s=%.4fn,n,s) elsefprintf(n=%.0f, s=%.4fn,n-1,a) end n=130, s=993.6487,例3-5:根

21、据e1+1+1/2!+1/3!+1/n! 求e的近似值,要求精确到。,clear;clc; %清除内存变量,清理命令窗口p=1; %设定存放阶乘的变量p并赋初值1s=1; %设定存放累加和的变量s并赋初值1r=1; %设定前后两次近似值的误差r并赋初值1k=0; %设定构造连续正整数的变量k赋初值0又为循环次数while r=1.0e-8 %当近似值的精度r没达到时继续循环k=k+1; %累计循环次数并作为下一个正整数kp=p*k; %计算k的阶乘pr=1/p; %计算前后两次近似值的误差rs=s+r; %计算e的近似值sfprintf(k=%.0f, s=%.10fn,k,s) %逐行显示出第k次e的近似值send %循环结构结束,k=1, s=2.0000000000k=2, s=2.5000000000k=3, s=2.6666666667k=4, s=2.7083333333k=5, s=2.7166666667k=6, s=2.7180555556k=7, s=2.7182539683k=8, s=2.7182787698k=9, s=2.7182815256k=10, s=2.7182818011k=11, s=2.7182818262k=12, s=2.7182818283,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号