カラムマスターのGauss-Jordan消元法-python実装

6671 ワード

アルゴリズムリファレンスhttps://wenku.baidu.com/view/d7d169d0be23482fb4da4c96.html?from=search
ダイレクトコード
import math
import numpy as np  
from numpy import * 
import matplotlib.pyplot as plt
def Fun(n):                       #     
    a=np.random.randint(low=1, high=100, size=(n, n+1))  #      
    return a
def GJ(a):                     #  -   ,         ,
    row=a.shape[0]
    print(a)    
    for j in range(0,row):
        if j<row:
            b=FindLarge(a[j:,j])     #            ;          
        else:
            b=0
        b1=b+j                      #              
        c= np.copy(a[b1,:])  #        :   a[[b1,j], :] = a[[j,b1], :]
        a[b1,:]=a[j,:]
        a[j,:]=c
        for i in range(0, row):
            if i==j:
                continue
            a[i,:]=a[i,:]-a[j,:]*a[i,j]/a[j,j]
    return a
def FindLarge(a0):          #    
    b0=np.argmax(a0)
    return b0
a=Fun(10)
a1=GJ(a)
print(a1)