求同调项系数

2024-04-19 08:44:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我想知道,比方说,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)和{}非常慢。显然有很多步骤在进行,所以这并不奇怪。但我对sympy的了解还很初级,我只是开始专门使用它,因为我需要能够找到这些系数。我可以想象,也许有一种方法可以让sympy认识到每样东西都是多项式,因此它可以更快地找到一个特定的系数,但我还没有找到这样做的例子。在

有没有其他方法可以通过sympy得到这个系数,或者我可以做些什么来加速它?在


Tags: 方法函数import编码returnif定义def
1条回答
网友
1楼 · 发布于 2024-04-19 08:44:51

我假设你只对给定的系数感兴趣,而不是整个多项式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

相关问题 更多 >