高斯消元python源码介绍

原理:Ax=b, A:n×n, x:n×1,b:n×1
Aij:Aij-lamda×Akj,j=k,k+1,…n,其中k 是约化次数,如n行的矩阵需要约化n-1次
bi:bi-lamda
×bk,其中lamda=Aik/Akk,Akk是主对角线元素,Aij 是被约化元素
约化后的进行回代就可解算出x
代码如下:

import numpy as np
a=[[1,2,3],[2,3,4],[7,5,6]]
b=[[12,3,4]]
def gaussEliminate(a,b):
    a=np.array(a)
    b=np.array(b).reshape(-1,1)
    n=len(a)
    if a.shape[0]>=a.shape[1]:
        print("the numbers of equation is bettter than unknown parameters")
        for k in range(0,n-1):#
            for i in range(k+1,n):
                if a[i,k] != 0:
                    lam = a[i,k]/a[k,k]
                    a[i,k:n] = a[i,k:n] - lam*a[k,k:n]
                    b[i]=b[i]-lam*b[k]
        x=np.zeros((a.shape[1],1))
        for i in range(n-1,-1,-1):
            x[i]=(b[i]-np.dot(a[i,i+1:n],x[i+1:n]))/a[i,i]
        print(x)
    else:
        print("the number of equations are less")
gaussEliminate(a,b)
输出结果:
[[  6.33333333]
 [-51.66666667]
 [ 36.33333333]]
验证:x=inv(a)*b
[[  6.33333333],
[-51.66666667],
[ 36.33333333]]

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值