高斯消去法(python实现)

高斯消去法

在这里插入图片描述
已知: A ϕ = b A\phi=b Aϕ=b

向前消去:

第i行的系数减去第一行的系数乘以 a i 1 a 11 \frac{a_{i1}}{a_{11}} a11ai1,消去第i行的 ϕ 1 \phi_1 ϕ1,重复操作,将A处理为一个上三角矩阵。伪代码如下:

for k = 1 to N-1
{
		for i = k + 1 to N  //从第二行开始计算
    {
      ratio = a_ik/a_kk
      {
        for j = k to N   // 从第k列开始
          	a_ij = a_ij - ratio * a_kj
      }
      b_i = b_i - ratio * b_k
    }
}

在这里插入图片描述

向后回带

消去完毕后的矩阵方程可以通过回带的方式求解 ϕ i \phi_i ϕi,如第N个方程只有一个未知量 ϕ N \phi_N ϕN,可以直接计算得到:
ϕ N = b N N − 1 a N N N − 1 \phi_N=\frac{b_N^{N-1}}{a_{NN}^{N-1}} ϕN=aNNN1bNN1
ϕ N − 1 \phi_{N-1} ϕN1可以通过 ϕ N \phi_N ϕN的值计算得到:
ϕ N − 1 = b N − 1 N − 2 − a ( N − 1 ) N N − 2 ϕ N a ( N − 1 ) ( N − 1 ) N − 2 \phi_{N-1}=\frac{b_{N-1}^{N-2}-a_{(N-1)N}^{N-2}\phi_N}{a_{(N-1)(N-1)}^{N-2}} ϕN1=a(N1)(N1)N2bN1N2a(N1)NN2ϕN
以此类推:
ϕ i = b i i − 1 − ∑ j = i + 1 N a i j i − 1 ϕ j a i i i − 1 \phi_i = \frac{b_i^{i-1}-\sum_{j=i+1}^Na_{ij}^{i-1}\phi_j}{a_{ii}^{i-1}} ϕi=aiii1bii1j=i+1Naiji1ϕj
伪代码如下:

phi_N = b_N / a_NN
for i = N-1 to 1
{
		term = 0
		for j = i+1 to N
		{
				term = term + a_ij * phi_j
		}
		phi_i = (b_i - term) / a_ii
}

最终的python实现:

import numpy as np
if __name__ == '__main__':
    A = [[2, -1, 3, 2],
         [3, -3, 3, 2],
         [3, -1, -1, 2],
         [3, -1, 3, -1]]
    B = [6, 5, 3, 4]
    A = np.array(A).astype(float)
    B = np.array(B).astype(float)

    for k in range(A.shape[0]-1): # 0-n-1行
        for i in range(k+1, A.shape[0]): # k+1 - n 行
            ratio = A[i][k] / A[k][k]
            for j in range(k, A.shape[1]): # k - n 列
                A[i][j] = A[i][j] - ratio * A[k][j]
            B[i] = B[i] - ratio * B[k]
    print(A)
    print(B.size)
    n = B.size-1
    phi = np.zeros(B.size)
    phi[n] = B[n] / A[n][n]
    for i in range(n-1, -1, -1):
        term = 0
        for j in range(i+1, n+1): # i+1 - B.size
            term = term + A[i][j] * phi[j]
        phi[i] = (B[i]-term) / A[i][i]
    print(phi) # [1 1 1 1]
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值