数值分析实验报告 jacobi迭代和seidel迭代分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析实验报告
一、 实验目的
1、了解熟悉jacobi 迭代法和seidel 迭代法的解法
2、将原理与matlab 语言结合起来,编程解决问题
3、分析实验结果
二、实验题目
设线性方程组为
⎪⎪⎪⎪⎪⎭
⎫ ⎝⎛-=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-----1102151012402170
183131204321x x x x
考察用jacobi 迭代法和seidel 迭代法求解该线性方程组的收敛情况。如果收敛,给出误差满足4)
1()(10-∞-≤-k k x x 的解。
三、实验原理
将A 作如下分解
U L D A --=
这里
⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎣⎡---=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡---=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢
⎣⎡=000000,000000,211221212211 n n n n nn a a a U a a a L a a a D Jacobi 迭代矩阵为)(1U L D B J +=-
Seidel 迭代矩阵为U L D B S 1)(--=
它们的迭代格式都可化为g Bx x k k +=+)()1(
则迭代格式对任何初值都瘦脸的充要条件是迭代矩阵谱半径n 2,1k n ,1max )(k 1,个特征值,的是矩阵其中, =<=≤≤B B k n
k λλρ
Jacobi 迭代矩阵的特征方程为0)det(=-J B I λ
Seidel 迭代矩阵的特征方程为0))(det()det(=--=-U L D B I S λλ
四、实验内容
用matlab 编写计算jacobi 迭代矩程序,建立m 文件如下:
function[M]=BJ(A)
D=diag(diag(A));
L=tril(-A)+D;
U=triu(-A)+D;
M=inv(D)*(L+U);
输入:
>> A=[20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5];
>> [M]=BJ(A)
M:
M =
0 -0.0500 0.1500 0.0500
-0.1667 0 0 -0.3889
0.0250 -0.0500 0 0.0500
-0.2000 0 0.2000 0
则jacobi 迭代矩阵为:⎪⎪⎪⎪⎪⎭
⎫ ⎝⎛-----=02.002.005.0005.0025.03889.0001667.005.015.005.00J B 用matlab 求jacobi 迭代矩阵的特征根的算法如下:
>> A=[0 -0.05 0.15 -0.05;-0.67 0 0 -0.39;0.025 -0.05 0 0.05;-0.2 0 0.2 0];[V ,D]=eig(A)
V =
-0.1892 + 0.0450i -0.1892 - 0.0450i -0.3812 -0.5005
-0.9467 -0.9467 0.8867 0.5461 -0.1528 - 0.1181i -0.1528 + 0.1181i -0.2099 -0.0466 -0.1056 + 0.1325i -0.1056 - 0.1325i 0.1561 0.6701
D =
-0.1774 + 0.0864i 0 0 0 0 -0.1774 - 0.0864i 0 0 0 0 0.2194 0 0 0 0 0.1355 则最大特征根为:0.2194 则12194.0)(<=J B ρ,所以jacobi 迭代法收敛
用matlab 编程jacobi 迭代法求根的算法:
function [n,x]=jacobi(A,b,X,nm,w)
%用雅克比迭代法求解方程组Ax=b
%输入:A 为方程组的系数矩阵,b 为方程组右端的列向量,X 为迭代初值构成的列向量,nm 为最大迭代次数,w 为误差精度
%输出:x 为求得的方程组的解构成的列向量,n 为迭代次数
n=1;
m=length(A);
D=diag(diag(A)); %令A=D-L-U,计算矩阵D
L=tril(-A)+D; %令A=D-L-U,计算矩阵L
U=triu(-A)+D; %令A=D-L-U,计算矩阵U
M=inv(D)*(L+U); %计算迭代矩阵
g=inv(D)*b; %计算迭代格式中的常数项
%下面是迭代过程
while n<=nm
x=M*X+g; %用迭代格式进行迭代
if norm(x-X,2) disp('迭代次数为');n disp('方程组的解为');x return; %上面:达到精度要求就结束程序,输出迭代次数和方程组的解 end X=x;n=n+1; end %下面:如果达到最大迭代次数仍不收敛,输出警告语句及迭代的最终结果(并不是方程组的解) disp('在最大迭代次数内不收敛!'); 输入数据: >> A=[20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5]; b=[1;2;10;-1]; X=[0;0;0;0]; >> nm=100; >> w=1e-4; >> [n,x]=jacobi1(A,b,X,nm,w) 迭代次数为