使用 Sympy 查找系数不包括平方根 (sqrt) 作为值
Finding coefficients using Sympy doesn't include square root (sqrt) as value
在 SymPy 中,有一个有用的功能可以为给定的表达式创建系数字典。
但是,我遇到了一个恼人的错误(/功能?),平方根被认为是变量的一部分,而不是系数值的一部分。
最小示例:
from sympy import sqrt, symbols
k, t = symbols('k, t')
d = 1.5*t + 2.5*sqrt(2)*k
d.as_coefficients_dict()
这个returns:
{:1.5, sqrt(2)*:2.5}
相反,sqrt(2) 应被视为系数的一部分。因此,我希望看到结果:
{:1.5, :2.5*sqrt(2)}
注意,我使用的是最新的 SymPy 1.4 版
这是一个错误吗?或者使用该函数获取预期值的替代方法?
编辑:我修改了问题以注意我正在使用 Sympy sqrt 函数。我还尝试使用 NumPy 的 np.sqrt,它的计算正确,但给出的是完整的数值,而不是 k 系数值的漂亮整洁的 sqrt(2)。
documentation 明确指出:
Return a dictionary mapping terms to their Rational coefficient.
首先,这是预期的行为。要看到这一点,您可以注意到 sqrt 不是 的问题,而是系数无理数这一事实。如果我们采用有理系数,我们会得到您的预期行为:
>>> from sympy import sqrt, symbols
>>> k, t = symbols('k, t')
>>> d = 1.5*t + 2.5*sqrt(4)*k
>>> d.as_coefficients_dict()
{k: 5.00000000000000, t: 1.50000000000000}
解决问题的一种方法是使用给定变量显式查询每个系数:
>>> from sympy import sqrt, symbols
>>> k, t = symbols('k, t')
>>> d = 1.5*t + 2.5*sqrt(2)*k
>>> {sym : d.coeff(sym) for sym in (k, t)}
{k: 2.5*sqrt(2), t: 1.50000000000000}
在 SymPy 中,有一个有用的功能可以为给定的表达式创建系数字典。
但是,我遇到了一个恼人的错误(/功能?),平方根被认为是变量的一部分,而不是系数值的一部分。
最小示例:
from sympy import sqrt, symbols
k, t = symbols('k, t')
d = 1.5*t + 2.5*sqrt(2)*k
d.as_coefficients_dict()
这个returns:
{:1.5, sqrt(2)*:2.5}
相反,sqrt(2) 应被视为系数的一部分。因此,我希望看到结果:
{:1.5, :2.5*sqrt(2)}
注意,我使用的是最新的 SymPy 1.4 版
这是一个错误吗?或者使用该函数获取预期值的替代方法?
编辑:我修改了问题以注意我正在使用 Sympy sqrt 函数。我还尝试使用 NumPy 的 np.sqrt,它的计算正确,但给出的是完整的数值,而不是 k 系数值的漂亮整洁的 sqrt(2)。
documentation 明确指出:
Return a dictionary mapping terms to their Rational coefficient.
首先,这是预期的行为。要看到这一点,您可以注意到 sqrt 不是 的问题,而是系数无理数这一事实。如果我们采用有理系数,我们会得到您的预期行为:
>>> from sympy import sqrt, symbols
>>> k, t = symbols('k, t')
>>> d = 1.5*t + 2.5*sqrt(4)*k
>>> d.as_coefficients_dict()
{k: 5.00000000000000, t: 1.50000000000000}
解决问题的一种方法是使用给定变量显式查询每个系数:
>>> from sympy import sqrt, symbols
>>> k, t = symbols('k, t')
>>> d = 1.5*t + 2.5*sqrt(2)*k
>>> {sym : d.coeff(sym) for sym in (k, t)}
{k: 2.5*sqrt(2), t: 1.50000000000000}