Python:numpy + sympy 求解 Ax = 0
作者:互联网
numpy.linalg.solve 貌似不能解出 Ax = 0 的非零解
sympy 这个库是支持线性代数的一些运算的,但是好像又没那么成熟
所以出此下策,用 numpy 矩阵 + sympy 求解多元方程,下面以归一化条件为例求非零特解
import sympy
import numpy as np
A = np.array([[0.8, 0.1, 0.1],
[0.7, 0.2, 0.1],
[0.6, 0.3, 0.1]]) - np.eye(3)
dim = A.shape[0]
x = sympy.symbols([f"x{idx}" for idx in range(dim)])
# 创建未知数列表
gen_sol = sympy.solve(np.array(x) @ A, *x)
# 得到 Ax = 0 的通解
cond = sympy.Eq(sum(x), 1)
# 创建归一化条件
equals = [sympy.Eq(key, value) for key, value in gen_sol.items()] + [cond]
# 以通解创建方程组, 附加条件
part_sol = sympy.solve(equals, x)
# 得到特定条件下的特解
assert part_sol, "Ax = 0 在该条件下无解"
result = np.array([part_sol[key] for key in x])
print(result)
标签:Python,sol,0.1,key,Ax,np,sympy,numpy 来源: https://blog.csdn.net/qq_55745968/article/details/123094985