当前位置:
文档之家› 实验4_循环结构程序设计_参考解答
实验4_循环结构程序设计_参考解答
实验四:循环结构程序设计
clear all; close all; clc; y=0; n=1; while y<3 y=y+1/(2*n-1); n=n+1; end n=n-1; y=y-1/(2*n-1) n=n-1
运行结果: y= 2.9944 n= 56 3. 考虑以下迭代公式:
xn +1 =
a b + xn
其中 a 、 b 为正的常数。 (1) 编写程序求迭代的结果,迭代的终止条件为 xn +1 − xn ≤ 10−5 ,迭代初值 x0 = 1.0 ,迭 代次数不超过 500 次。
−b ± b 2 + 4a , 当 (a, b) 的值取 (1,1) 、 (8,3) 、 2 (10, 0.1) 时,分别对迭代结果和准确值进行比较。 答: (1) 程序设计: clear all; close all; clc; a=2; b=3; x0=1.0; x1=0; n=1; y=abs(x1-x0); while n<=500 & y>10^(-5) x1=a/(b+x0); y=abs(x1-x0); x0=x1; n=n+1; end x1
n =1 ⎧ f1 = 1, ⎪ f = 0, n=2 ⎪ 4. 已知 ⎨ 2 ,求 f1 ~ f100 中: n=3 ⎪ f3 = 1, ⎪ ⎩ f n = f n −1 − 2 f n − 2 + f n −3 , n > 3 (1) 最大值、最小值、各数之和。 (2) 正数、零、负数的个数。 答:程序设计: clear all; close all; clc; f1=1; f2=0; f3=1; f=[f1,f2,f3]; for n=4:100 f4=f3-2*f2+f1; f=[f f4]; f1=f2; f2=f3; f3=f4; end
MATLAB 语言
4
WangChengyou © 山东大学威海分校
高教社刘卫国《MATLAB 程序设计与应用》 (第二版)实验参考解答
实验四:循环结构程序设计
maxvalue=max(f); minvalue=min(f); sumvalue=sum(f); disp(['最大值是:', num2str(maxvalue)]) disp(['最小值是:', num2str(minvalue)]) disp(['各数和是:', num2str(sumvalue)]) positivenum=length(find(f>0)); negtivenum=length(find(f<0)); zeronum=length(find(f==0)); disp(['正数的个数:', num2str(positivenum)]) disp(['负数的个数:', num2str(negtivenum)]) disp(['零的个数:', num2str(zeronum)])
(2) 如果迭代过程收敛于 r, 那么 r 的准确值是
运行结果: x1 = 0.5616
MATLAB 语言
2
WangChengyou © 山东大学威海分校
高教社刘卫国《MATLAB 程序设计与应用》 (第二版)实验参考解答
实验四:循环结构程序设计
(2) 程序设计: (i) 当(a,b)的取值为(1,1)时 clear all; close all; clc; a=1; b=1; x0=1.0; x1=0; n=1; y=abs(x1-x0); while n<=500 & y>10^(-5) x1=a/(b+x0); y=abs(x1-x0); x0=x1; n=n+1; end x1 r1=(-b+sqrt(b^2+4*a))/2 r2=(-b-sqrt(b^2+4*a))/2 运行结果: x1 = 0.6180 r1 = 0.6180 r2 = -1.6180 (ii) 当(a,b)的取值为(8,3)时 clear all; close all; clc; a=8; b=3; x0=1; x1=0; n=1; y=abs(x1-x0); while n<=500 & y>10^(-5) x1=a/(b+x0); y=abs(x1-x0); x0=x1; n=n+1; end x1 r1=(-b+sqrt(b^2+4*a))/2 r2=(-b-sqrt(b^2+4*a))/2 运行结果: x1 = 1.7016 r1 = 1.7016
运行结果: 最大值是:4.377633e+011 最小值是:-8.994121e+011 各数和是:-7.427456e+011 正数的个数:49 负数的个数:49 零的个数:2 5. 若两个连续自然数的乘积减 1 是素数,则称这两个连续自然数是亲密数对,该素数 是亲密素数。例如, 2 × 3 − 1 = 5 ,由于 5 是素数,所以 2 和 3 是亲密数对,5 是亲密素 数。求[2,50]区间内: (1) 亲密数对的对数。 (2) 与上述亲密数对对应的所有亲密素数之和。 答:程序设计: clear all; close all; clc; prime=[]; for n=2:49 x=n*(n+1)-1; signx=0; for k=2:sqrt(x) if (mod(x,k)==0) signx=1; end end if signx==0 prime=[prime; n n+1]; end end num=size(prime); psum=sum(prime(:,1).*prime(:,2)-1); disp(['亲密数对的对数:', num2str(num(1))])
1 1 1 ,求: 2. 根据 y = 1 + + + " + 3 5 2n − 1 (1) y < 3 时的最大 n 值。 (2) 与(1)的 n 值对应的 y 值。 答:程序设计:
MATLAB 语言
1
WangChengyou © 山东大学威海分校
高教社刘卫国《MATLAB 程序设计与应用》 (第二版)实验参考解答
3
MATLAB 语言
WangChengyou © 山东大设计与应用》 (第二版)实验参考解答
实验四:循环结构程序设计
r2 = -4.7016
(iii) 当(a,b)的取值为(10,0.1)时 clear all; close all; clc; a=10; b=0.1; x0=1; x1=0; n=1; y=abs(x1-x0); while n<=500 & y>10^(-5) x1=a/(b+x0); y=abs(x1-x0); x0=x1; n=n+1; end x1 r1=(-b+sqrt(b^2+4*a))/2 r2=(-b-sqrt(b^2+4*a))/2 运行结果: x1 = 3.1127 r1 = 3.1127 r2 = -3.2127
高教社刘卫国《MATLAB 程序设计与应用》 (第二版)实验参考解答
实验四:循环结构程序设计
实验四
教材 P364 一、实验目的
循环结构程序设计
1. 掌握利用 for 语句实现循环结构的方法。 2. 掌握利用 while 语句实现循环结构的方法。 3. 熟悉利用向量运算来代替循环操作的方法。 二、实验内容 π2 1 1 1 1 1. 根据 = 2 + 2 + 2 + " + 2 ,求 π 的近似值。当 n 分别取 100、1000、10000 时, 6 1 2 3 n 结果是多少? 要求:分别用循环结构和向量运算(使用 sum 函数)来实现。 答:程序设计: (1) 循环结构 clear all; close all; clc; for n=[100,1000,10000] sum=0; for x=1:n sum=sum+1/(x.^2); end value=sqrt(6*sum) end (2) 向量运算 clear all; close all; clc; for n=[100,1000,10000] x=1:n; value=sqrt(6*sum(1./x./x)) end 运行结果: value = 3.1321 value = 3.1406 value = 3.1415
MATLAB 语言
5
WangChengyou © 山东大学威海分校
高教社刘卫国《MATLAB 程序设计与应用》 (第二版)实验参考解答
实验四:循环结构程序设计
disp(['亲密素数之和:', num2str(psum)])
%或者
clear all; close all; clc; psum=0; num=0; for i=2:49 b=i*(i+1)-1; m=fix(sqrt(b)); for j=2:m if rem(b,j)==0 break end end if j==m num=num+1; psum=psum+b; end end disp(['亲密数对的对数:', num2str(num)]) disp(['亲密素数之和:', num2str(psum)])
运行结果: 亲密数对的对数:28 亲密素数之和:21066
MATLAB 语言
6
WangChengyou © 山东大学威海分校