gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:01:04 29 4
gpt4 key购买 nike

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

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

最小示例:

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)}

注意,我使用的是最新的 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}

关于python - 使用 Sympy 查找系数不包括平方根 (sqrt) 作为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55687181/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com