实验报告五 上机综合练习.docx
《实验报告五 上机综合练习.docx》由会员分享,可在线阅读,更多相关《实验报告五 上机综合练习.docx(19页珍藏版)》请在冰豆网上搜索。
实验报告五上机综合练习
浙江大学城市学院实验报告
课程名称科学计算
实验项目名称上机综合练习
实验成绩指导老师(签名)日期2013/11/14
一.实验目的和要求
1.用Matlab软件掌握非线性方程、线性方程组的数值解法的综合练习;
2.通过实例学习用数值计算方法去分析问题、给出算法,并对算法的误差、稳定性等作出分析。
二.实验内容和原理
编程题2-1要求写出Matlab源程序(m文件),并有适当的注释语句;分析应用题2-2要求将问题的分析过程、Matlab源程序和运行结果和结果的解释、算法的分析写在实验报告上。
2-1
考虑牛顿最早讨论过的方程
,已知该方程有一实根,两个复根。
选取合适的迭代初始值,用牛顿迭代法求出方程的实根,其中迭代终止条件为前后两次迭代值差的绝对值小于
,写出牛顿迭代法的公式和计算步骤以及结果。
2-2
试用迭代格式
求极限
(取
)。
7ww4
2-3
已知矩阵
,上机编程用得到的结果证明
1)求解以
为系数矩阵线性方程组的Jacobi迭代是收敛的,而Gauss-Seidel迭代是发散的;
2)求解以
为系数矩阵线性方程组的Gauss-Seidel迭代收敛,而Jacobi迭代则是发散的。
其中线性方程组右端向量
任意选取,迭代初始向量
为零向量,迭代终止条件为
。
写出运行结果,得出上述收敛性的结论,并进行分析。
2-4
用Doolittle分解法解线性方程组
三.操作方法与实验步骤(包括实验数据记录和处理)
4.实验结果与分析
2-1
functionx=NewtonMethod(x0,epsi,Nmax)
x=x0-f(x0)/df(x0);
n=1;
while(norm(x-x0)>epsi)&&(nx0=x;
x=x0-f(x0)/df(x0);
n=n+1;
end
n
functiony=f(x)
y=x^3-2*x-5
functiony=df(x)
y=3*x^2-2
>>NewtonMethod(2,0.001,100)
y=
-1
y=
10
y=
0.0610
y=
11.2300
y=
1.8572e-004
y=
11.1616
n=
3
ans=
2.0946
2-2
function[p1,e,k,y]=function1(f,x0,x1,delta,epsi,Nmax)
xx
(1)=x1;
fork=1:
Nmax
x2=x1-feval(f,x1)*(x1-x0)/(feval(f,x1)-feval(f,x0));
e=abs(x2-x1);
rele=2*e/(abs(x2)+delta);
xx(k+1)=x2;
x0=x1;
x1=x2;
y=feval(f,x1);
if(eend
xx
end
[p1,e,k,y]=function1('f',1,3,0.01,0.000005,20)
f=
2.2361
f=
2.2361
f=
1.7321
f=
0.0000+1.9680i
f=
0.0000+1.9680i
f=
0.0000+1.9680i
f=
2.2361
f=
1.4833-1.4833i
f=
1.4833-1.4833i
f=
1.4833-1.4833i
f=
0.0000+1.9680i
f=
0.7775-1.8772i
f=
0.7775-1.8772i
f=
0.7775-1.8772i
f=
1.4833-1.4833i
f=
1.7166+1.1470i
f=
1.7166+1.1470i
f=
1.7166+1.1470i
f=
0.7775-1.8772i
f=
0.5945+1.9599i
f=
0.5945+1.9599i
f=
0.5945+1.9599i
f=
1.7166+1.1470i
f=
1.6516-1.2249i
f=
1.6516-1.2249i
f=
1.6516-1.2249i
f=
0.5945+1.9599i
f=
0.6437-1.9486i
f=
0.6437-1.9486i
f=
0.6437-1.9486i
f=
1.6516-1.2249i
f=
1.6649+1.2034i
f=
1.6649+1.2034i
f=
1.6649+1.2034i
f=
0.6437-1.9486i
f=
0.6321+1.9535i
f=
0.6321+1.9535i
f=
0.6321+1.9535i
f=
1.6649+1.2034i
f=
1.6608-1.2082i
f=
1.6608-1.2082i
f=
1.6608-1.2082i
f=
0.6321+1.9535i
f=
0.6352-1.9528i
f=
0.6352-1.9528i
f=
0.6352-1.9528i
f=
1.6608-1.2082i
f=
1.6616+1.2068i
f=
1.6616+1.2068i
f=
1.6616+1.2068i
f=
0.6352-1.9528i
f=
0.6344+1.9531i
f=
0.6344+1.9531i
f=
0.6344+1.9531i
f=
1.6616+1.2068i
f=
1.6613-1.2071i
f=
1.6613-1.2071i
f=
1.6613-1.2071i
f=
0.6344+1.9531i
f=
0.6346-1.9530i
f=
0.6346-1.9530i
f=
0.6346-1.9530i
f=
1.6613-1.2071i
f=
1.6614+1.2070i
f=
1.6614+1.2070i
f=
1.6614+1.2070i
f=
0.6346-1.9530i
f=
0.6346+1.9531i
f=
0.6346+1.9531i
f=
0.6346+1.9531i
f=
1.6614+1.2070i
f=
1.6614-1.2071i
f=
1.6614-1.2071i
f=
1.6614-1.2071i
f=
0.6346+1.9531i
f=
0.6346-1.9531i
f=
0.6346-1.9531i
f=
0.6346-1.9531i
f=
1.6614-1.2071i
f=
1.6614+1.2071i
xx=
Columns1through5
3.0000-5.8730-2.0000-4.4006i-4.9192-2.9192i-0.3689+3.9378i
Columns6through10
-5.4878+2.3305i-0.7726-4.0463i-5.3828-2.5088i-0.6763+4.0070i-5.4167+2.4696i
Columns11through15
-0.7015-4.0130i-5.4100-2.4807i-0.6955+4.0105i-5.4121+2.4782i-0.6971-4.0109i
Columns16through20
-5.4116-2.4789i-0.6967+4.0107i-5.4118+2.4788i-0.6968-4.0108i-5.4117-2.4788i
Column21
-0.6968+4.0108i
p1=
-0.6968+4.0108i
e=
8.0215
k=
20
y=
1.6614+1.2071i
2-3
(1)
>>A=[12-2;111;221]
A=
12-2
111
221
>>B=[2-11;222;-1-12]
B=
2-11
222
-1-12
>>P=[0;0;0]
P=
0
0
0
>>X=Jacobimethod(A,B,P,10,0.001)
X=
-18
15
5
>>A=[2-11;222;-1-12]
A=
2-11
222
-1-12
>>B=[12-2;111;221]
B=
12-2
111
221
>>X=Jacobimethod(A,B,P,10,0.001)
X=
0.6904
-2.0410
所以
为系数矩阵线性方程组的Jacobi迭代是收敛的,而Gauss-Seidel迭代是发散的;
(2)
>>A=[2-11;222;-1-12]
A=
2-11
222
-1-12
>>b=randn(3,1)
b=
1.1892
-0.0376
0.3273
>>X=Jacobimethod(A,b,[0;0;0],0.001,100)
x=
1.0e+004*
1.9129
2.9734
0.4262
n=
101
ans=
1.0e+004*
1.9129
2.9734
0.4262
>>X=GaussSeidelmethod(A,b,[0;0;0],0.001)
x=
0.3217
-0.4434
0.1028
n=
12
ans=
0.3217
-0.4434
0.1028
所以
为系数矩阵线性方程组的Gauss-Seidel迭代收敛,而Jacobi迭代则是发散的。
2-4
functionx=Doolittle1(A,b)
n=size(A);
L=tril(A);
fori=1:
n
L(i,i)=1;
end
U=triu(A);
fori=2:
n
L(i,1)=A(i,1)/U(1,1);
end
sum=0;
fork=2:
n
forj=k:
n
fort=1:
k-1
sum=sum+L(k,t)*U(t,j);
end
U(k,j)=A(k,j)-sum;
sum=0;
end
fori=(k+1):
n
fort=1:
k-1
sum=sum+L(i,t)*U(t,k);
end
L(i,k)=(A(i,k)-sum)/U(k,k);
sum=0;
end
end
x=inv(U)*inv(L)*b;
end
A=[21-3;25-4;673]
A=
21-3
25-4
673
>>b=[5;12;35]
b=
5
12
35
>>Doolittle1(A,b)
ans=
3.0000
2.0000
1.0000