zoukankan      html  css  js  c++  java
  • 伯努利数和自然数幂和

    定义:(B(x)=sum_nfrac{B_nx^n}{n!}=frac{x}{e^x-1})

    易得递推式:(B_0=1,sum_{i=0}^ninom{n+1}{i}B_i=0)


    自然数幂和:(f(n,k)=sum_{i=1}^{n} i^k)

    定义(n)相同的自然数幂和的EGF:(F_n(x)=sum_{k} f(n,k)frac{x^k}{k!})

    [F_n(x)=sum_{k} f(n,k)frac{x^k}{k!}\ =sum_{k} frac{x^k}{k!} sum_{i=1}^n i^k\ =sum_{i=1}^n sum_k frac{(ix)^k}{k!}\ =sum_{i=1}^n e^{ix}\ =frac{e^{(n+1)x}-e^x}{e^x-1} ]

    [=B(x)e^x(e^{nx}-1)frac{1}{x}\ 令:B'(x)=B(x)e^x=x+B(x)\ (B'只是个符号和求导无关)\ F_n(x)=B'(x)(e^{nx}-1)frac{1}{x}\ f(n,k)=k!sum_{i=0}^{k}frac{n^{k+1-i}}{(k+1-i)!}frac{B'_i}{i!}\ =frac{1}{k+1}sum_{i=0}^{k}inom{k+1}{i}n^{k+1-i}B'_{i} ]

    注意这里最后用的(B'):实际上伯努利数分(B^+)(B^-),前面讲的是(B^-),这里的(B')就是(B^+),两者的区别在于(B_1=pmfrac{1}{2})

    另外,如果把自然数下标从(0)开始(即(f(n,k)=sum_{i=0}^{n} i^k)),类似地推,可以得到(f(n,k)=frac{1}{k+1}sum_{i=0}^kinom{k+1}{i}(n+1)^{k+1-i}B_i)


    总结:

    和另外几个常用的推自然数幂和的方法比较:

    1. 第二类斯特林数:
      1. 优点:容易通过组合意义考虑,即使忘记式子也容易重新推出;可以不用除法。
      2. 缺点:朴素方法需要(O(k^2))预处理斯特林数,如果(k)相同做到(O(klg k))要写复杂的多项式做法求出;式子中含有下降幂,并不直接是多项式形式,不方便扩展。
    2. 拉格朗日插值:
      1. 优点:预处理速度快。
      2. 缺点:一般是直接将(n)带入拉格朗日插值的式子中,不是直接生成多项式,若要生成多项式要多点插值(?),扩展性弱。
    3. 伯努利数:
      1. 优点:可以直接生成关于(n)的多项式形式;某种程度上统一了对于不同的(k),自然数幂和关于(n)的函数,扩展性强。
      2. 缺点:相对而言不是那么容易考场推出。
  • 相关阅读:
    Python中__new__()方法的使用和实例化
    python __str__ , __repr__区别
    python中%r和%s的区别
    面向对象进阶
    getattr(sys.modules[__name__], func_name)
    os.path.dirname(__file__)使用
    bound和unbound方法,类的绑定和非绑定是什么
    基于python中staticmethod和classmethod的区别(详解)
    python基础----特性(property)、静态方法(staticmethod)、类方法(classmethod)、__str__的用法
    python @classmethod 的使用场合
  • 原文地址:https://www.cnblogs.com/jz-597/p/14764881.html
Copyright © 2011-2022 走看看