【问题标题】:Getting n'th order coefficient from series expansion in Sympy在 Sympy 中从级数展开中获取 n 阶系数
【发布时间】:2021-02-10 03:04:02
【问题描述】:

我有一个使用 numpy 的 poly1d 定义的多项式:

import numpy as np

p = np.poly1d([-1.37970733e+07,  8.02055768e+07, -1.98442743e+08,  2.70981281e+08,
       -2.20611918e+08,  1.07019785e+08, -2.85873914e+07,  3.24251782e+06])

然后,我对我称为radMax = 0.80868373 的点对该多项式进行级数展开。以下是我如何进行系列扩展:

from sympy import series, Symbol, Poly
x = Symbol('x')
polyExpand = p(x).series(x,radMax,3)/(p(radMax)/0.0523772)

这给了我想要的展开,我想要二阶项的系数。如果你运行上面的代码,你会看到这个系数是“0.2843162879664”。我想提取这个系数。

【问题讨论】:

    标签: python sympy taylor-series


    【解决方案1】:

    如果您想按项处理系数:

    from sympy import sympify
    print(polyExpand.as_coefficients_dict()[sympify(f"(x - {radMax}) ** 2")])
    

    如果您想通过索引获取系数:

    coeffs = list(polyExpand.as_coefficients_dict().values())
    print(coeffs[2]) # order n = 2
    

    这些将正确输出-0.284316287966400。你忘了减号。

    【讨论】:

    • 是否可以将系数作为列表或数组而不是作为字典来获取?理想情况下以某种有序的方式。虽然您的方法仅使用我上面给出的代码对我有用,但我正在生成几个不同的多项式 p 并且我似乎遇到了 radMax 的精度与展开中使用的精度不同的问题。例如,我得到radMax = 0.8086880013254281,而字典中的键是(x - 0.808688001325428)**2。请注意,前者有一个额外的数字。
    • @Zach 已将其添加到答案中。
    猜你喜欢
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多