高斯消元法

高斯消元法介绍

高斯消元法主要用在解线性方程,当前实现的仅仅是有唯一解的一个算法

x1 x2 x3 val
1 2 3 5
3 4 4 7
3 4 5 6

将线性方程变成一个上三角矩阵的过程

1 2 3 3 4
0 1 2 3 4
0 0 1 2 3
0 0 0 3 3

从这个矩阵也不难看出是一个n x (n+1)类型

实现步骤

  • 实现上三角转换
    主要是进行遍历,遍历的过程主要就是让每行的参数变为0

    第一行遍历剩下的n-1行
    第二行遍历剩下的n-2行

所有行都遍历

  • 上三角转换后,计算参数
    这里可以利用 n x (n+1)这一特性

源代码

#coding=UTF-8
###高斯消元法实现#########

def Gauss(data):
    ##i是列元素j是控制循环的次数,line是存储一行元素
    i=0
    j=0
    line_size=len(data)
    while j<line_size-1:
        ###得到数据中的行
        line=data[j]
        temp=data[j][j]
        templete=[]
        for x in line:
            x=x/temp
            templete.append(x)
            data[j]=templete
        flag=j+1
        ######遍历第1行以后的行
        while flag<line_size:
            templete1=[]
            temp1=data[flag][j]
            i=0
            ####将行的每一个元素与第一行相减
            for x1 in data[flag]:
                if x1 !=0:
                    x1=x1-(temp1*templete[i])
                    templete1.append(x1)
                else:
                    templete1.append(0)
                i+=1
            data[flag]=templete1
            flag+=1
        ##第一个参数已经消去,遍历消去剩下的参数
        j+=1

    #################对得到的上三角矩阵计算参数###########
    '''
    [1,2,3,4,5
     0,2,3,4,5
     0,0,4,5,6
     0,0,0,1,3
    ]
    '''
    parameter=[]
    parameter.append(data[line_size-1][-1]/data[line_size-1][-2])
    ##parameter的下标刚好是所有参数剪切
    #####从倒数第二列开始计算参数#
    i=line_size-2
    while i >=0:
        sum=0
        parameter1=0
        #这里分别进行回带,通过paramete数组
        for j in range(i+1,line_size):
            sum+=parameter[line_size-1-j]*data[i][j]
        parameter1=(data[i][-1]-sum)/data[i][i]
        parameter.append(parameter1)
        i=i-1
    return(parameter)
#####进行消元测试#######
parameters=[
[6,15, 55,152.6],
[15, 55, 225, 585.6],
[55,225,979,2488.8]
 ]
results=Gauss(parameters)
print("x1="+str(results[-1])+"\nx2="+str(results[-2])+"\nx3="+str(results[0])+"\n")

总结

其实思想很简单,代码实现的时候有一些小技巧 关于python画图的画等有时间再进行摸索吧

参考