题目
Jacobi方法是一种迭代求解线性方程组的方法。对于线性方程组 Ax = b,其迭代步骤如下:
1. 将矩阵A分解
- 将矩阵A分解为对角矩阵D和非对角矩阵N:A = D + N
- 其中D为对角矩阵,N为非对角矩阵
2. 迭代公式
对于每个方程i,在第k+1次迭代时:
x
i
(
k
+
1
)
=
1
a
i
i
(
b
i
−
∑
j
≠
i
a
i
j
x
j
(
k
)
)
x_i^{(k+1)} = \frac{1}{a_{ii}}\left(b_i - \sum_{j\neq i} a_{ij}x_j^{(k)}\right)
xi(k+1)=aii1
bi−j=i∑aijxj(k)
其中:
- a i i a_{ii} aii 是矩阵A的第i个对角元素
- b i b_i bi 是向量b的第i个元素
- a i j a_{ij} aij 是矩阵A的第i行第j列元素
- x j ( k ) x_j^{(k)} xj(k) 是第k次迭代时x的第j个分量
标准代码如下
def solve_jacobi(A, b, n) :
d_a = np.diag(A)
nda = A - np.diag(d_a)
x = np.zeros(len(b))
x_hold = np.zeros(len(b))
for _ in range(n):# 迭代
for i in range(len(A)): # 更新
x_hold[i] = (1/d_a[i]) * (b[i] - sum(nda[i]*x))
x = x_hold.copy()
return np.round(x,4).tolist()

被折叠的 条评论
为什么被折叠?



