import numpy as np
def fgauss(A, b):
n = A.shape[0]
zengguan = np.hstack((A, b.T))
ra = np.linalg.matrix_rank(A)
rz = np.linalg.matrix_rank(zengguan)
temp1 = rz - ra
if temp1 > 0:
print("无一般意义下的解,系数矩阵与增广矩阵的秩不同")
return
if ra == rz:
if ra == n:
x = np.mat(np.zeros(zengguan.shape[0], dtype=float))
for p in range(0, n):
for k in range(p+1, n):
m = zengguan[k, p]/zengguan[p, p]
zengguan[k, p:n+1] = zengguan[k, p:n+1] - m * zengguan[p, p:n+1]
b1 = zengguan[0:n, n]
a1 = zengguan[0:n, 0:n]
x[0, n-1] = b1[n-1]/a1[n-1, n-1]
for i in range(n - 2, -1, -1):
try:
x[0, i] = (b1[i] - np.sum(np.multiply(a1[i, i+1:n], x[0, i+1:n]))) / (a1[i, i])
except:
print("错误")
print(x)
return x
if __name__ == "__main__":
A1 = np.mat([[1,3],
[1,3],
[1,1],
[1,1]], dtype=float)
b2 = np.mat([4, 3, 3, 0])
a = A1.T*A1
b = A1.T*b2.T
x = fgauss(a, b.T)
Resuélvelo x1 = 0.5, x2 = 1