当前位置:首页 >> 数学 >>

实验3 matlab编程介绍与循环结构


实验3 matlab编程介绍与循环结构

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

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

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

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

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

2. 输出方式 (1)直接输出 % 变量后无分号“;”,变量直接输出 disp([a]); % a可以是标量、向量、矩阵 (2) 格式控制输出 格式:fprintf('x=%.3f y=%.0f\n',a,b); %按指定格式输出; 其中,单引号内为格式说明符,%前为提示符,%.3f为数据 格式符,通常 ? 与单引号后面的数据项对应,f指显示一个实数,3表示显示 的数小数点后3位,小数点前整数部分不限。%.0f指显示一实 数其小数部分显示0位,结果只显示整数部分。\n为换行符, 即一行显示结束后,光标自动换到下一行。a、b为要显示的 变量,它们与前面的格式符相对应。 ? ? ? ? ? ? ?

? ? ? ? ?

例如: fprintf('x=%.5f y=%.0f\n',pi,sqrt(2)); x=3.14159 y=1 fprintf('x=%.5f y=%.0f\n' ,sqrt(2), pi); x=1.41421 y=3

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

3.2.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时可省略。

? 在设计for-end循环结构时,应在循 环模块内充分利用循环变量的变化 规律,开展相关运算。另外,结构 中for与end要成对出现。

? ? ? ? ? ? ? ? ? ? ?

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

? ? ? ? ?

i=1, s=1 ……… i=98, s=9604 i=99, s=9801 i=100, s=10000

问题1: 可否用从1开始的奇数作为循环变量?
? ? ? ? ? ? ? ? ? clear;clc; %清除内存变量,清理命令窗口 n=2*100-1; %赋值给定奇数的个数 s=0; %设定存放和的变量s并赋初值0 for i=1:2:n %定义循环变量i从1到n,以1为步长,即为奇数序号 s=s+i; %先计算右端奇数并累加后再赋给左端的变量 end % 循环体结束

? fprintf('i=%.0f, s=%.0f\n',i,s) ? %逐行显示出累加求和的过程

? ? ? ? ? ? ? ? ? ?

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

? fprintf('i=%.0f, s=%.0f\n',i,s) ? %逐行显示出累加求和的过程

问题2: 不显示求和过程,只显示最后结果?
? ? ? ? ? ? ? ? ? ? clear;clc; %清除内存变量,清理命令窗口 n=100; %赋值给定奇数的个数 s=1; %设定存放和的变量s并赋初值0 for i=2:n %定义循环变量i从1到n,以1为步长,即为奇数序号 s=s+(2*i-1); %先计算右端奇数并累加后再赋给左端的变量s end fprintf('i=%.0f, s=%.0f\n',i,s) %显示出最后结果

例3-2:求正整数n的阶乘:p=1×2 × 3 × … × n = n!,并求出n=20时的结果。
? 分析:这是一个逐次乘积的过程,从1开始 存放在积p中,再乘以下一个正整数之后再 取代积p,以此类推,直到乘至第n个数,因 此,使用循环结构来实现。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

i=1, p=1 i=2, p=2 i=3, p=6 i=4, p=24 i=5, p=120 i=6, p=720 i=7, p=5040 i=8, p=40320 i=9, p=362880 i=10, p=3628800 i=11, p=39916800 i=12, p=479001600 i=13, p=6227020800 i=14, p=87178291200 i=15, p=1307674368000 i=16, p=20922789888000 i=17, p=355687428096000 i=18, p=6402373705728000 i=19, p=121645100408832000 i=20, p=2432902008176640000

只显示最后一个数的阶乘
? ? ? ? ? ?
? ? ? ?

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

fprintf('i=%.0f, p=%.0f\n',i,p) 可改为:i,p
? ? ? ? ? ? ? ? ? ? clear;clc; %清除内存变量,清理命令窗口 n=20; %赋值给定正整数 p=1; %设定存放阶乘的变量p并赋初值1 for i=1:n %定义循环变量i从1到n,以1为步长,即连续正整数 p=p*i; %先计算右端乘积后再赋给左端的变量p end %循环结构结束 i,p %fprintf('i=%.0f, p=%.0f\n',i,p) 可改为:i,p i=20, p = 2.4329e+018

利用input命令对n进行赋值,随时改变其 大小。
? ? ? ?
? ? ? ?

clear;clc; %清除内存变量,清理命令窗口 p=1; %设定存放阶乘的变量p并赋初值1 n= input('Please input n=') for i=1:n %定义循环变量i从1到n,以1为步长,即连 续正整数 p=p*i; %先计算右端乘积后再赋给左端的变量p end %循环结构结束 fprintf('i=%.0f, p=%.0f\n',i,p) %显示出i

? Please input n= ? Please input n=10 ?n=
? 10

? i=10, p=3628800

例3-3:根据麦克劳林公式可以得到 e≈1+1+1/2!+1/3!+…+1/n!,试求e的近似值。
? ? ? ? ? ?
? ? ? ? ?

clear;clc; %清除内存变量,清理命令窗口 n=10; %赋值给定正整数 p=1; %设定存放阶乘的变量p并赋初值1 s=1; %设定存放累加和的变量s并赋初值1 for i=1:n %定义循环变量i从1到n,以1为步长 p=p*i; %先计算右端乘积后再赋给左端的变量p,此时 p为i的阶乘 s=s+1/p; %先计算右端阶乘倒数的累加后再赋给左端的变量s fprintf('i=%.0f, s=%.8f\n',i,s) %逐行显示出第i次e的近似值 end %循环结构结束

? ? ? ? ? ? ? ? ? ?

i=1, s=2.00000000 i=2, s=2.50000000 i=3, s=2.66666667 i=4, s=2.70833333 i=5, s=2.71666667 i=6, s=2.71805556 i=7, s=2.71825397 i=8, s=2.71827877 i=9, s=2.71828153 i=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的内容,确保在执行了一定次数之后可以 结束循环;否则,就成了“死循环”,即无限次重 复执行循环。另外,结构中while与end要成对出现。

例3-4:对于数列? n?, n ? 1,2,? ,求其前n项和 不超过1000时的n的值及和.
? ? ? ? ? ? ? ? ? ? ? ? 分析:用循环结构来实现,但每次累加前要判断大小。 clear;clc; %清除内存变量,清理命令窗口 n=0; %设定正整数并赋初值0 s=0; %设定存放累加和的变量s并赋初值0 while s<=1000 %用累加和s与1000进行比较作为循环条件 n=n+1; %改变n为连续正整数 s=s+sqrt(n); %先计算右端开方数的累加后再赋给左端的变量s fprintf('n=%.0f, s=%.4f\n',n,s) %逐行显示正整数及部分和 end %循环结构结束

? …… ? n=128, s=970.8891 ? n=129, s=982.2469 ? n=130, s=993.6487 ? n=131, s=1005.0942

问题:从结果上看,最后一行的结果并不是要求的答案, 而倒数第二行是所求问题的解。这是为什么?如何修改程 序来避免这种情况?
? ? ? ? ? ? ? ? ? clear;clc; %清除内存变量,清理命令窗口 n=0; %设定正整数并赋初值0 s=0; %设定存放累加和的变量s并赋初值0 while s<=1000 %用累加和s与1000进行比较作为循环条件 n=n+1; %改变n为连续正整数 a=s; s=s+sqrt(n); %先计算右端开方数的累加后再赋给左端的变量s end %循环结构结束

?

? ? ? ? ?
?

if s<=1000 fprintf('n=%.0f, s=%.4f\n',n,s) end if s>1000 fprintf('n=%.0f, s=%.4f\n',n-1,a) end
n=130, s=993.6487

问题:从结果上看,最后一行的结果并不是要求的答案, 而倒数第二行是所求问题的解。这是为什么?如何修改程 序来避免这种情况?
? ? ? ? ? ? ? ? ? clear;clc; %清除内存变量,清理命令窗口 n=0; %设定正整数并赋初值0 s=0; %设定存放累加和的变量s并赋初值0 while s<=1000 %用累加和s与1000进行比较作为循环条件 n=n+1; %改变n为连续正整数 a=s; s=s+sqrt(n); %先计算右端开方数的累加后再赋给左端的变量s end %循环结构结束

?

? ? ? ?
?

if s<=1000 fprintf('n=%.0f, s=%.4f\n',n,s) else fprintf('n=%.0f, s=%.4f\n',n-1,a) end
n=130, s=993.6487

例3-5:根据e≈1+1+1/2!+1/3!+…+1/n! 求e 的近似值,要求精确到。
? ? ? ? ? ? ? ? ? ? ? ? ? clear;clc; %清除内存变量,清理命令窗口 p=1; %设定存放阶乘的变量p并赋初值1 s=1; %设定存放累加和的变量s并赋初值1 r=1; %设定前后两次近似值的误差r并赋初值1 k=0; %设定构造连续正整数的变量k赋初值0又为循环次数 while r>=1.0e-8 %当近似值的精度r没达到时继续循环 k=k+1; %累计循环次数并作为下一个正整数k p=p*k; %计算k的阶乘p r=1/p; %计算前后两次近似值的误差r s=s+r; %计算e的近似值s fprintf('k=%.0f, s=%.10f\n',k,s) %逐行显示出第k次e的近似值s end %循环结构结束

? ? ? ? ? ? ? ? ? ? ? ?

k=1, s=2.0000000000 k=2, s=2.5000000000 k=3, s=2.6666666667 k=4, s=2.7083333333 k=5, s=2.7166666667 k=6, s=2.7180555556 k=7, s=2.7182539683 k=8, s=2.7182787698 k=9, s=2.7182815256 k=10, s=2.7182818011 k=11, s=2.7182818262 k=12, s=2.7182818283


相关文章:
实验3MATLAB编程介绍与循环结构.pptx_图文.ppt
实验3MATLAB编程介绍与循环结构.pptx - 实验3 MATLAB编程介绍 与循环结构 授课人:尚晶 MATLAB 编程介绍 MATLAB 循环结构 与应用 MATLAB 选择...
实验3 matlab编程介绍与循环结构_图文.ppt
实验3 matlab编程介绍与循环结构 - 实验3 matlab编程介绍与循环结构 3.1.1 建立、运行M-文件的步骤 ? 1....
Matlab编程介绍,循环结构.ppt
Matlab软件与基础数学实验 MATLAB编程介绍与循环结构 ...(a为3阶
Matlab编程介绍,循环结构汇总_图文.ppt
Matlab编程介绍,循环结构汇总 - Matlab软件与基础数学实验 MATLAB编程介绍与循环结构 ★ MATLAB中各种命令可以完成许多单一的任务,对于 某些较为复杂的问题,仅靠现有...
Matlab编程介绍,循环结构剖析_图文.ppt
Matlab编程介绍,循环结构剖析 - Matlab软件与基础数学实验 MATLAB编程介绍与循环结构 ★ MATLAB中各种命令可以完成许多单一的任务,对于 某些较为复杂的问题,仅靠现有...
Matlab编程介绍,循环结构精讲_图文.ppt
Matlab编程介绍,循环结构精讲 - Matlab软件与基础数学实验 MATLAB编程介绍与循环结构 ★ MATLAB中各种命令可以完成许多单一的任务,对于 某些较为复杂的问题,仅靠现...
实验三 MATLAB程序设计.doc
系实验报告实验题目:MATLAB 程序设计(实验三)班级: 电技 1301B ; 学号姓名: 蔡文豪 (1332110128) ; 日期: 2015.09.28 要求分别用循环结构和向量运算(使用 sum...
实验三 MATLAB编程入门实验(必做).doc
数学实验报告 日期:2012 年 班级 实验 名称 10 级数应师范班 姓名 MATLAB 编程入门实验 学号 月日 实验目的: 1.掌握 MATLAB 编程入门技巧,重点掌握循环结构和...
MATLAB实验三(2)程序设计.doc
实验三(2) 、MATLAB 程序设计 一、 实验目的 1、 2、 掌握建立和执行 M 文件的方法 掌握利用 for 语句和 while 语句实现选择结构的方法 二、 实验内容步骤...
数学实验MATLAB3_图文.ppt
数学实验MATLAB3 - MATLAB语言编程介绍 1. MATLAB程序的基本结构 程序就是使计算机实现某一类功能任务的命 令集。程序一般包含:数据输入、功能处理结 果输出。...
实验3:MATLAB编程基础.doc
实验3:MATLAB编程基础 - 实验三 【实验目的】 MATLAB 编程基础 1、学习和掌握 M 文件的创建与使用; 2、学习和掌握 MATLAB 软件程序的控制结构与语句; 3、学习...
matlab实验三.doc
matlab实验三_数学_自然科学_专业资料。实验3 MATLAB语言的程序设计学生姓名 实验...3、while循环也可以嵌套、其结构如下: while逻辑表达式1 循环体语句1 while逻辑...
实验三Matlab程序设计基本方法.doc
方法 3、函数文件的编写和设计 4、了解和熟悉跨空间变量传递和赋值 实验内容:练习A 1、熟悉MATLAB程序编辑与设计环境 2、用for循环语句实现求1~100的。 ...
Matlab实验三答案.doc
Matlab实验三答案_数学_自然科学_专业资料。实验三 MATLAB语言的程序设计一、实验...变量传递和赋值 二、实验基本知识: 1、程序流程控制语句 for循环结构语法:for ...
matlab实验4_循环结构程序设计_参考解答.pdf
matlab实验4_循环结构程序设计_参考解答 - 高教社刘卫国《MATLAB 程序设计与应用》 (第二版)实验参考解答 实验四:循环结构程序设计 实验四 教材 P364 一、实验...
实验三 MATLAB程序设计.doc
125692 实验三一、实验目的 MATLAB 程序设计 1、掌握建立和执行 M 文件的方法...2、掌握选择结构、多分支选择结构程序的编程方法。 3、掌握多种循环结构程序的...
实验3 Matlab程序设计1实验报告.doc
实验3 Matlab程序设计1实验报告 - Tutorial3 实验名称:Matlab 程序设计 1 实验目的: 1、 掌握建立和执行脚本和函数文件的方法; 2、 掌握实现选择结构的方法; 3...
Matlab程序设计实验3.doc
Matlab程序设计实验3_理学_高等教育_教育专区。中南大学 MATLAB 实验 报告三 ...解:程序及结果为: 循环结构求解程序结果: n=9; for x=0:n y=sin(x/...
MATLAB实验四_循环结构程序设计.doc
MATLAB实验四_循环结构程序设计 - 实验循环结构程序设计 1.根据 π 2 6 = 1 2 1 2 3 + 1 2 + 1 2 +…+ 1 n 2 , x=...
《Matlab编程实验》实验报告_学号_姓名.doc
Matlab 编程实验一实验内容: Matlab 运算基础 选择结构与循环结构程序设计、函数...Matlab 编程实验三实验内容: 线性代数中的数值计算问题 符号计算 数值微积分与...