赞
踩
考虑线性方程组Ax = b时,A为可逆矩阵,当A的主对角线元素不为0时,A可写为:
A=D+L+U,D,L,U可写为:
D
=
[
a
11
0
…
0
0
a
22
…
0
…
…
…
…
0
0
…
a
n
n
]
L
=
[
0
0
…
0
a
21
0
…
0
…
…
…
…
a
n
1
a
n
2
…
0
]
U
=
[
0
a
12
…
a
1
n
0
0
…
a
2
n
…
…
…
…
0
0
…
0
]
D=\left[
故将L,U移到左边,可得:
x i = 1 a i i [ b i − ∑ j = 1 j ≠ i n a i j x j ] , i = 1 , 2 … n 即 x = B x + f , 其中 B = I − D − 1 A = − D − 1 ( L + U ) 故可以迭代 X ( k + 1 ) = B x ( k ) + f x_i=\frac{1}{a_{ii}}\left[ b_i-\sum_{j=1 \space j \neq i}^{n}{a_{ij}x_j} \right] ,\space i=1,2…n \\ 即x=Bx+f,\space 其中B=I-D^{-1}A=-D^{-1}(L+U)\\ 故可以迭代X^{(k+1)}=Bx^{(k)}+f xi=aii1 bi−j=1 j=i∑naijxj , i=1,2…n即x=Bx+f, 其中B=I−D−1A=−D−1(L+U)故可以迭代X(k+1)=Bx(k)+f
如果 lim n → + ∞ x ( n ) \lim_{n \rightarrow +\infty}{x^{(n)}} limn→+∞x(n)存在,则迭代法收敛;否则,迭代法不收敛。
1
、
1、
1、将矩阵解写为上述形式;
2
、
2、
2、给定迭代准确度(即误差)与迭代初值;
3
、
3、
3、逐次迭代.
function [x,j] = Jacobi(A,b) %% A为n×n矩阵 %% b为n维列向量 %% x为输出解 %% j为迭代次数 n = length(b); D = zeros(n,n); D = sparse(diag(diag(A))); Dinv = sparse(diag(1./diag(A))); B = Dinv*(D-A); f = Dinv*b; TOL = 1.0e-3; Max_iter = 1000; error = 1; j = 0; x0 = [0;0;0]; while error>TOL && j<Max_iter xk = B*x0+f; error = norm(xk-x0,inf); x0=xk; j=j+1; end x=xk; j; end
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。