matlab实验4_循环结构程序设计_参考解答
时间:2025-07-05
时间:2025-07-05
实验四 循环结构程序设计
教材P364
一、实验目的
1. 掌握利用for语句实现循环结构的方法。
2. 掌握利用while语句实现循环结构的方法。
3. 熟悉利用向量运算来代替循环操作的方法。
二、实验内容
π211111. 根据=2+2+2+"+2,求π的近似值。当n分别取100、1000、10000时,6123n
结果是多少?
要求:分别用循环结构和向量运算(使用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
111,求: 2. 根据y=1+++"+352n 1
(1) y<3时的最大n值。
(2) 与(1)的n值对应的y值。
答:程序设计:
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
验证:
clear all; close all; clc;
n=56;
i=1:n;
f=1./(2*i-1);
y=sum(f)
运行结果:
y =
2.9944
3. 考虑以下迭代公式:
xn+1=a b+xn
其中a、b为正的常数。
(1) 编写程序求迭代的结果,迭代的终止条件为xn+1 xn≤10 5,迭代初值x0=1.0,迭代次数不超过500次。
b±(2) 如果迭代过程收敛于r,那么r
的准确值是,当(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
运行结果:
x1 =
0.5616
(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
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
f1=1, n=1 f=0, n=2 24. 已知 ,求f1~f100中:
f3=1, n=3
fn=fn 1 2fn 2+fn 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
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)])
运行结果:
最大值是: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))])
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(['亲密素数之和 …… 此处隐藏:1216字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:一年级下册体育教案
下一篇:第二章 MATLAB的数值计算