首页 > 解决方案 > 你如何在 numpy 中创建未知的代数变量?

问题描述

我试图在 numpy 中创建一个未知变量,以便在不使用内置函数的情况下计算特征值。例如,我想创建一个看起来像这样的矩阵

-x     1
-2  -3-x

但是进入x一个矩阵,它不会识别是什么x,我不知道如何正确定义它。到目前为止,这是我的代码,它说 x 没有定义。

x=x
A = np.array([[0,1-x],[-2,-3-x]])
B = np.array([[0,1],[-2,-3]])

print(B)

如何定义变量x以便可以将其用作代数函数?

标签: pythonnumpylinear-algebrasymbolic-math

解决方案


Numpy 不处理符号数学,但 sympy 可以。

import numpy as np
import sympy as sym

x = sym.symbols('x')
a = sym.Matrix([[0,1-x],[-2,-3-x]])
b = sym.Matrix([[0,1],[-2,-3]])

print(a.eigenvals(multiple=True))
print(b.eigenvals(multiple=True))
# If everything is numerical, you can convert it to a numpy array
b_num = np.array(b).astype(np.float64)
# According to the documentation they aren't necessarily in order
print(np.linalg.eigvals(b_num))

输出

[-x/2 - sqrt(x**2 + 14*x + 1)/2 - 3/2, -x/2 + sqrt(x**2 + 14*x + 1)/2 - 3/2]
[-2, -1]
[-1. -2.]

推荐阅读