牛客题解 | 使用Jacobi方法求解线性方程组

题目

题目链接

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 bij=iaijxj(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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值