Python:numpy + sympy 求解 Ax = 0

2022/2/23 20:24:01

本文主要是介绍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:numpy + sympy 求解 Ax = 0的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程