基于Jupyter notebooks 使用python关于高斯消元法、列主元素法求解下面方程组

python关于高斯消元法、列主元素法求解下面方程组


在这里插入图片描述

一、python关于高斯消元法

import numpy as np

def Gauss(A,b):
    n=len(b)
    for i in range(n-1):
        if A[i,i]!=0:
            for j in range(i+1,n):
                m=-A[j,i]/A[i,i]
                A[j,i:n]=A[j,i:n]+m*A[i,i:n]
                b[j]=b[j]+m*b[i]
    for k in range(n-1,-1,-1):
        b[k]=(b[k]-sum(A[k,(k+1):n]*b[(k+1):n]))/A[k,k]
    print(b)
A=np.array([[3,-1,2],[-1,2,-2],[2,-2,4]],dtype=np.float)
b=np.array([7,-1,0],dtype=np.float)
x=Gauss(A,b)

如图:
在这里插入图片描述

一、python关于列主元素法

import numpy as np

A=np.array([[3,-1,2],[-1,2,-2],[2,-2,4]],dtype=float)
b=np.array([7,-1,0],dtype=float)

def Main_Gauss(A,b):
    n=len(b)
    for k in range(n):
        A_max=0
        for i in range(k,n):
            if abs(A[i,k])>A_max:
                A_max=abs(A[i,k])
                r=i
        if A_max<1e-6:
            print('系数矩阵奇异,无法求解方程!')
            break
        if r>k:
            for j in range(k,n):
                s=A[k,j]
                A[k,j]=A[r,j]
                A[r,j]=s
            t=b[k]
            b[k]=b[r]
            b[r]=t        
        for j in range(k+1,n):
            A[k,j]=A[k,j]/A[k,k]
        b[k]=b[k]/A[k,k]
        for i in range(n):
            if i!=k:
                for j in range(k+1,n):
                    A[i,j]=A[i,j]-A[i,k]*A[k,j]
                b[i]=b[i]-A[i,k]*b[k]
    print('x=',b)
Main_Gauss(A,b)

如图所示:
在这里插入图片描述
对比结果,俩个答案一致。

发布了16 篇原创文章 · 获赞 39 · 访问量 424

猜你喜欢

转载自blog.csdn.net/qq_42585108/article/details/105088435