数值分析实验报告 jacobi迭代和seidel迭代分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

迭代次数为

相关文档
最新文档