1.求矩阵的秩
import numpy as np
A = np.mat([
[1,2,1],
[2,4,6],
[3,3,2]],int)
rank = np.linalg.matrix_rank(A)
2.求解齐次线性方程组
齐次线性方程组要么有无穷多解,要么只有零解
对于AX=0,对A做SVD分解可得
由高等代数知识得,求解齐次线性方程组就是对系数矩阵A做SVD分解后,从最后一行向上选取出的n-r行向量的线性组合
这里的r是系数矩阵A的秩
import numpy as np
def simplify(ans):
try:
q = eval(input("decimal digit"))
type(q) == type(5)
except:
q = 5
for i in ans:
Min = min([abs(c) for c in i])
ans[ans.index(i)] = [round(d/Min,q) for d in i]
return ans
def homogeneous_linequationsolve(A):
ans = []
rank = np.linalg.matrix_rank(A)
u,s,vt = np.linalg.svd(A)
A = np.array(A)
n = len(A[0])
vt = np.array(vt)[::-1]
if n-rank > 0:
for i in range(0,n-rank):
ans.append(vt[i])
else:
return("only null solution")
ans = simplify(ans)
return ans
A = np.mat([[2,1,3,7],[0,7,1,4],[0,0,1,3]])
print(homogeneous_linequationsolve(A))
print("over")
得到输出:
[[7.5, -1.0, -21.0, 7.0]]
那么:
方程的解就是
x = k1 * |7.5 -1 -21 7|
3.求解非齐次线性方程组
这个倒是很有现用的方法
为了解方程组
a = np.mat([[2, 4], [1, 3]])
b = np.mat([1, 1]).T
x = np.linalg.solve(a, b)
print(x)
4.下期吧