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)
上一篇:机器学习实战_k近邻算法识别手写数字


下一篇:数析三剑客 numpy pandas matplotlib 基础操作