一、雅可比迭代法
? ? ? ?對(duì)于線性方程組AX=b,我們首先將系數(shù)矩陣A分解為對(duì)角矩陣D、下三角矩陣L和上三角矩陣U:
1.1雅可比迭代法的matlab代碼
? 在這里,我們求解下面的帶狀方程(以下程序均是以求解該帶狀方程為例):
.............
?
?
function X0=jacobi(A,b,X0,delta,max1)
%輸入 -A代表線性方程組AX=b的系數(shù)矩陣
% -b代表線性方程組AX=b右側(cè)的數(shù)值
% -X0代表線性方程組AX=b進(jìn)行高斯-賽德?tīng)柕ㄇ蠼獾牡踔?% -delta代表余項(xiàng)AX(k)-B的范數(shù)允許誤差
% -max1代表迭代的次數(shù)
%輸出 -X0代表通過(guò)雅可比迭代法求解線性方程組AX=b的解
[N,N]=size(A);
L=-tril(A,-1);
U=-triu(A,1);
D=A+L+U;
B=inv(D)*(L+U)
f=inv(D)*b;
for k=1:max1
X0=B*X0+f;
err=abs(norm(A(:,:)*X0(:)-b(:),2))
if err<delta
break
end
end
?1.2雅可比迭代法的python代碼
import numpy as np
def jacobi(A,b,X0,max1):
'''A代表線性方程組AX=b的系數(shù)矩陣
b代表線性方程組AX=b右邊的部分
X0代表高斯—賽德?tīng)柕某跏贾? max1代表迭代的次數(shù)'''
n = np.shape(A)[0]
L = -np.tril(A, -1)
U = -np.triu(A, 1)
D = A + L + U
B = np.dot(np.linalg.inv(D),L+U)
f = np.dot(np.linalg.inv(D),b)
for i in range(max1):
X0 = np.dot(B, X0) + f
return X0
n=50
#線性方程組AX=b右邊的部分
b=np.zeros((n,1))
for i in range(n):
b[i]=5
#線性方程組AX=b的系數(shù)矩陣
A=np.zeros((n,n))
for i in range(n):
A[i,i]=12
if i>=0 and i<=48:
A[i,i+1]=-2
if i>=0 and i<=47:
A[i,i+2]=1
if i>=1:
A[i,i-1]=-2
if i>=2:
A[i,i-2]=1
#迭代的初始值
X0=np.zeros((n,1))
for i in range(n):
X0[i]=0
#進(jìn)行迭代的次數(shù)
max1=50
#進(jìn)行高斯—賽德?tīng)柕蠼饩€性方程組AX=b的解
X=jacobi(A,b,X0,max1)
#輸出由高斯—賽德?tīng)柕蟮玫木€性方程組的解
print(X)
二、高斯—賽德?tīng)柕?/h2>
? ? ? 高斯—賽德?tīng)柕ㄊ窃傺趴杀鹊ǖ幕A(chǔ)上,在計(jì)算時(shí)盡可能地用最新的
來(lái)替換?。同樣對(duì)于線性方程組 AX=b,我們首先將系數(shù)矩陣A分解為對(duì)角矩陣D、下三角矩陣L和上三角矩陣U:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-824015.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-824015.html
?2.1高斯—賽德?tīng)柕ǖ膍atlab代碼
function X0=Gauss_Saidel(A,b,X0,max1)
%輸入 -A代表線性方程組AX=b的系數(shù)矩陣
% -b代表線性方程組AX=b右側(cè)的數(shù)值
% -X0代表線性方程組AX=b進(jìn)行高斯-賽德?tīng)柕ㄇ蠼獾牡踔?% -max1代表迭代的次數(shù)
%輸出 -X0代表通過(guò)高斯-賽德?tīng)柕ㄇ蠼饩€性方程組AX=b的解
[N,N]=size(A);
L=-tril(A,-1);
U=-triu(A,1);
D=A+L+U;
B=inv(D-L)*U;
f=inv(D-L)*b;
for k=1:max1
X0=B*X0+f
end
2.2高斯—賽德?tīng)柕ǖ膒ython代碼
import numpy as np
def Gauss_Saidel(A,b,X0,max1):
'''A代表線性方程組AX=b的系數(shù)矩陣
b代表線性方程組AX=b右邊的部分
X0代表高斯—賽德?tīng)柕某跏贾? max1代表迭代的次數(shù)'''
n=np.shape(A)[0]
L=-np.tril(A,-1)
U=-np.triu(A,1)
D=A+L+U
B=np.dot(np.linalg.inv(D-L),U)
f=np.dot(np.linalg.inv(D-L),b)
for i in range(max1):
X0=np.dot(B,X0)+f
return X0
n=50
#線性方程組AX=b右邊的部分
b=np.zeros((n,1))
for i in range(n):
b[i]=5
#線性方程組AX=b的系數(shù)矩陣
A=np.zeros((n,n))
for i in range(n):
A[i,i]=12
if i>=0 and i<=48:
A[i,i+1]=-2
if i>=0 and i<=47:
A[i,i+2]=1
if i>=1:
A[i,i-1]=-2
if i>=2:
A[i,i-2]=1
#迭代的初始值
X0=np.zeros((n,1))
for i in range(n):
X0[i]=0
#進(jìn)行迭代的次數(shù)
max1=50
#進(jìn)行高斯—賽德?tīng)柕蠼饩€性方程組AX=b的解
X=Gauss_Saidel(A,b,X0,max1)
#輸出由高斯—賽德?tīng)柕蟮玫木€性方程組的解
print(X)
到了這里,關(guān)于雅可比迭代和高斯—賽德?tīng)柕ǖ奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!