python - 在sympy中获取项系数

标签 python sympy

我需要在一个相当长的、令人讨厌的展开中找到一个项的系数。我有一个多项式,比如说 f(x) = (x+x^2)/2 然后是一个递归定义的函数:g_k(x,y) = y*f( g_{k-1}(x,y))g_0(x,y)=yx

我想知道 g_10(x,y) 中 x^2y^4 的系数

我把它编码为

import sympy
x, y = sympy.symbols('x y')

def f(x):
      return (x+x**2)/2
def g(x,y,k):
     if k==0:
          return y*x
     else:
          return y*f(g(x,y,k-1))

fxn = g(x,y,2)     
fxn.expand().coeff(x**2).coeff(y**4)
> 1/4

到目前为止一切顺利。

但现在我想找到 k = 10 的系数。现在 fxn = g(x,y,10) 然后 fxn.expand() 非常慢的。显然有很多步骤正在进行,所以这并不奇怪。但是我对 sympy 的了解是基本的——我只是专门开始使用它,因为我需要能够找到这些系数。我可以想象可能有一种方法可以让 sympy 认识到一切都是多项式,因此它可以更快地找到一个特定的系数,但我还没有找到这样做的例子。

有没有通过 sympy 获得这个系数的另一种方法,或者我可以做些什么来加快它的速度?

最佳答案

我假设您只对给定的系数感兴趣,而不对整个多项式 g(x,y,10) 感兴趣。因此,您可以重新定义函数 g 以去除递归的每一步中的高阶。这将显着加快您的计算速度。

def g(x,y,k):
    if k==0:
        return y*x
    else:
        temp = y*f(g(x,y,k-1)) + sympy.O(y**5) + sympy.O(x**3)
        return temp.expand().removeO()

工作原理如下:首先,顺序为 O(y**5), O(x**3)(及更高)的所有内容都将被分组,然后被丢弃。请记住,您丢失了很多信息!

也可以在这里查看:Sympy: Drop higher order terms in polynomial

关于python - 在sympy中获取项系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45552843/

相关文章:

python - CKAN - 自定义数据字段

python - 值错误 :Setting an array element with a sequence using numpy

Python:如何将混合大小写批量重命名为带下划线的小写

python - 具有变量的矩阵的 Sympy 特征值

python - 使用 Pandas 创建 NumPy 数组

python - 在尝试使用 GSettings 模式之前,如何确定它是否存在?

python - 如何在 SymPy 中表示复杂平面区域?

python - 求解三次多项式系统(找到贝塞尔曲线的交点)

python - 有没有办法在 SymPy 中处理常量函数参数?

python - 在Python中求切比雪夫多项式的根