使用Sympy查找系数不包括平方根(sqrt)作为值

问题描述 投票:3回答:1

在SymPy中,有一个有用的功能来为给定的表达式创建系数字典。

但是,我遇到了一个恼人的错误(/ feature?),其中平方根被认为是变量的一部分,而不是系数值的一部分。

最小例子:

from sympy import sqrt, symbols
k, t = symbols('k, t') 
d = 1.5*t + 2.5*sqrt(2)*k 
d.as_coefficients_dict()           

返回:

{𝑡:1.5, sqrt(2)*𝑘:2.5}

相反,sqrt(2)应被视为系数的一部分。因此,我希望看到结果:

{𝑡:1.5, 𝑘:2.5*sqrt(2)}

NB,我正在使用最新的SymPy 1.4版

这是一个错误吗?或者使用该函数获取预期值的另一种方法是什么?

编辑:我修改了问题,注意我正在使用Sympy sqrt函数。我也尝试使用NumPy的np.sqrt,它正确评估,但给出了完整的数值,而不是k系数值的一个漂亮的整齐sqrt(2)。

python sympy symbolic-math sqrt
1个回答
1
投票

documentation明确指出:

返回将术语映射到其Rational系数的字典。

首先,这是预期的行为。要看到这一点,你可以注意到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}
© www.soinside.com 2019 - 2024. All rights reserved.