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)
如图所示:
对比结果,俩个答案一致。