数值计算方法上机实习题答案Word文件下载.docx
《数值计算方法上机实习题答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《数值计算方法上机实习题答案Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
2.求方程
的近似根,要求
,并比较计算量。
(1)在[0,1]上用二分法;
程序:
a=0;
b=1.0;
whileabs(b-a)>
5*1e-4
c=(b+a)/2;
ifexp(c)+10*c-2>
b=c;
elsea=c;
end
c
结果:
c=
0.0903
(2)取初值
,并用迭代
x=0;
a=1;
whileabs(x-a)>
5*1e-4
a=x;
x=(2-exp(x))/10;
x
x=
0.0905
(3)加速迭代的结果;
b=1;
y=exp(x)+10*x-2;
z=exp(y)+10*y-2;
x=x-(y-x)^2/(z-2*y+x);
b=x;
0.0995
(4)取初值
,并用牛顿迭代法;
x=x-(exp(x)+10*x-2)/(exp(x)+10);
(5)分析绝对误差。
solve('
exp(x)+10*x-2=0'
)
3.钢水包使用次数多以后,钢包的容积增大,数据如下:
2
3
4
5
6
7
8
9
y
6.42
8.2
9.58
9.5
9.7
10
9.93
9.99
11
12
13
14
15
16
10.49
10.59
10.60
10.8
10.6
10.9
10.76
试从中找出使用次数和容积之间的关系,计算均方差。
(注:
增速减少,用何种模型)
设y=f(x)具有指数形式
(a>
0,b<
0)。
对此式两边取对数,得
记A=lna,B=b,并引入新变量z=lny,t=1/x。
引入新变量后的数据表如下
t=1/x
0.5000
0.3333
0.2500
0.2000
0.1667
0.1429
0.1250
0.1111
z=lny
1.8594
2.1041
2.2597
2.2513
2.2721
2.3026
2.2956
2.3016
0.1000
0.0909
0.0833
0.0769
0.0714
0.0667
0.0625
2.3504
2.3599
2.3609
2.3795
2.3888
2.3758
t=[0.50000.33330.25000.20000.16670.14290.12500.11110.10000.09090.08330.07690.07140.06670.0625];
z=[1.85942.10412.25972.25132.27212.30262.29562.30162.35042.35992.36092.37952.36092.38882.3758];
polyfit(t,z,1)
ans=-1.11072.4578
由此可得A=2.4578,B=-1.1107,
,b=B=-1.1107
方程即为
计算均方差编程:
x=[2:
16];
y=[6.428.29.589.59.7109.939.9910.4910.5910.6010.810.610.910.76];
f(x)=11.6791*exp(-1.1107./x);
c=0;
fori=1:
a=y(i);
b=x(i);
c=c+(a-f(b))^2;
averge=c/15
averge=
0.0594
4.设
分析下列迭代法的收敛性,并求
的近似解及相应的迭代次数。
(1)JACOBI迭代;
functiony=jacobi(a,b,x0)
D=diag(diag(a));
U=-triu(a,1);
L=-tril(a,-1);
B=D\(L+U);
f=D\b;
y=B*x0+f;
n=1;
whilenorm(y-x0)>
1e-4
x0=y;
y=B*x0+f;
n=n+1;
n
以文件名jacobi.m保存。
a=[4-10-100;
-14-10-10;
0-14-10-1;
-10-14-10;
0-10-14-1;
00-10-14];
b=[05-25-26]'
;
x0=[000000]'
jacobi(a,b,x0);
运行结果为:
y=
1.0000
2.0000
n=
28
(2)GAUSS-SEIDEL迭代;
functiony=seidel(a,b,x0)
G=(D-L)\U;
f=(D-L)\b;
y=G*x0+f;
whilenorm(y-x0)>
10^(-4)
y=G*x0+f;
n
以文件名deisel.m保存。
a=[4-10-100;
运行结果为:
(3)SOR迭代(
)。
functiony=sor(a,b,w,x0)
lw=(D-w*L)\((1-w)*D+w*U);
f=(D-w*L)\b*w;
y=lw*x0+f;
y=lw*x0+f;
以文件名sor.m保存。
c=[1.3341.950.95];
w=c(i);
sor(a,b,w,x0);
运行结果分别为:
13
241
17
5.用逆幂迭代法求
最接近于11的特征值和特征向量,准确到
function[mt,my]=maxtr(A,p,ep)
n=length(A);
B=A-p*eye(n);
v0=ones(n,1);
k=1;
v=B*v0;
whileabs(norm(v,inf)-norm(v0,inf))>
ep
%norm(v-v0)>
ep
k=k+1;
q=v;
u=v/norm(v,inf)
v=B*u;
v0=q;
end
mt=1/norm(v,inf)+p
my=u
主界面中输入:
A=[1-2-3];
maxtr(A,11,0.001)
结果为:
特征值:
mt=
11.0919
特征向量:
my=
0.3845
-1.0000
0.7306
6.用经典R-K方法求解初值问题
(1)
,
functionydot=lorenzeq(x,y)
ydot=[-2*y
(1)+y
(2)+2*sin(x);
y
(1)-2*y
(2)+2*cos(x)-2*sin(x)]
以文件民lorenzeq.m保存。
主窗口输入:
[x,y]=ode45('
lorenzeq'
[0:
10],[2;
3])
0
1
2
3
4
5
6
7
8
9
10
2.00003.0000
1.57751.2758
1.1802-0.1457
0.2406-0.8903
-0.7202-0.6170
-0.94540.2971
-0.27450.9652
0.65890.7557
0.9901-0.1449
0.4124-0.9109
-0.5440-0.8389
(2)
和精确解
比较,分析结论。
functionydot=lorenzeq1(x,y)
998*y
(1)-999*y
(2)+999*cos(x)-999*sin(x)];
以文件名lorenzeq1.m保存。
x=0:
10;
y1=2*exp(-x)+sin(x);
y2=2*exp(-x)+cos(x);
lorenzeq1'
3]);
fprintf('
xy
(1)y1y
(2)y2\n'
forj=1:
length(y)
fprintf('
%4d%.4f%.4f%.4f%.4f\n'
x(j),y(j,1),y1(j),y(j,2),y2(j))
xy
(1)y1y
(2)y2
02.00002.00003.00003.0000
11.57721.57721.27591.2761
21.18001.1800-0.1455-0.1455
30.24070.2407-0.8904-0.8904
4-0.7202-0.7202-0.6169-0.6170
5-0.9454-0.94540.29720.2971
6-0.2745-0.27450.96480.9651
70.65880.65880.75540.7557
80.99000.9900-0.1448-0.1448
90.41240.4124-0.9106-0.9109
10-0.5439-0.5439-0.8389-0.8390
结论:
R-K方法求解的结果精度较高。
7.用有限差分法求解边值问题(h=0.1):
.
h=0.1;
n=(1-(-1))/h+1;
x
(1)=-1;
x(n-1)=1;
y
(1)=1;
y(n-1)=1;
n-1
x(i)=x
(1)+(i-1)*h;
q(i)=(1+x(i)^2);
B(i)=2/(h^2)+q(i);
n-2
C(i)=-1/(h^2);
H=diag(B)+diag(C,1)+diag(C,-1);
g
(1)=0+1/(h^2);
g(n-1)=0+1/(h^2);
fori=2:
g(i)=0;
y=H\g'
0.9027
0.8235
0.7592
0.7074
0.6661
0.6338
0.6095
0.5922
0.5814
0.5767
0.5778
0.5846
0.5974
0.6163
0.6420
0.6752
0.7167
0.7680
0.8308
0.9072
8.拟合形如f(x)≈(a+bx)/(1+cx)的函数的一种快速方法是将最小二乘法用于下列问题:
f(x)(1+cx)≈(a+bx),试用这一方法拟合表4-4给出的中国人口数据。
表4-4
次序年份人口(亿)
a)19535.82
b)19646.95
c)198210.08
d)190011.34
e)200012.66
把f(x)(1+cx)≈(a+bx)变成f(x)≈a+bx-cxf(x)则近似看成基函数是1,x,-x*f(x)而数据是(xi,f(xi))的最小二乘拟合问题,程序如下:
x=[19531964198219002000]'
y=[5.826.9510.0811.3412.66]'
A=[ones(5,1)x-x.*y];
Z=A\y;
a=Z
(1)
b=Z
(2)
c=Z(3)
a=
11.5250
b=
-0.0059
-5.0979e-004