迭代多项式乘法 - Python中的Chebyshev多项式

时间:2011-05-04 18:21:59

标签: python iteration polynomial-math

我的问题是:Python中迭代多项式乘法的最佳方法是什么?

我认为一个有趣的项目是在Python中编写一个函数来生成给定度数的切比雪夫多项式的每个项的系数和指数。生成这样一个多项式的递归函数(由T n (x)表示)是:

With:

T 0 (x)= 1

and

T 1 (x)= x:

T n (x)= 2xT n-1 (x) - T n-2 (x)

到目前为止我所拥有的并不是很有用,但是我很难绕过如何实现这一目标。我想要发生的是以下几点:

>> chebyshev(4)
[[8,4], [8,2], [1,0]]

此列表代表第4度的切比雪夫多项式:     T 4 (x)= 8x 4 - 8x 2 + 1

import sys
def chebyshev(n, a=[1,0], b=[1,1]):
    z = [2,1]
    result = []
    if n == 0:
        return a
    if n == 1:
        return b
    print >> sys.stderr, ([z[0]*b[0], 
                           z[1]+b[1]],
                          a) # This displays the proper result for n = 2
    return result

我在网上发现的one solution没有用,所以我希望有人能说清楚。

P.S。有关切比雪夫多项式的更多信息:CSU FullteronWikipedia - Chebyshev polynomials。它们非常酷/有用,并且将一些非常有趣的trig函数/属性联系在一起;值得一读。

3 个答案:

答案 0 :(得分:2)

SciPy有Chebyshev的实施

http://www.scipy.org/doc/api_docs/SciPy.special.orthogonal.html

我建议查看他们的代码。

答案 1 :(得分:1)

Chebyshev的最佳实施是:

// Computes T_n(x), with -1 <= x <= 1
real T( int n, real x )
{
  return cos( n*acos(x) ) ;
}

如果你对其他实现进行测试,包括显式多项式求值和iteratively computing the recurrence relation,这实际上同样快。 Try it yourself.

一般而言:

  • 显式多项式评估是最差的(对于大n)
  • 递归评估稍好一些
  • 余弦评估是最好的

答案 2 :(得分:0)

orthopy(我的一个项目)也支持 Chebyshev 多项式的计算。随着

import orthopy

# from sympy.abc import x
x = 0.5

normalization = "normal"   # or "classical", "monic"
evaluator = orthopy.c1.chebyshev1.Eval(x, normalization)
for _ in range(10):
    print(next(evaluator))
0.5641895835477564
0.39894228040143276
-0.39894228040143265
...

x = 0.5 处,您会得到次数增加的多项式的值。您可以使用包含多个值的列表/向量,甚至是 sympy 符号。

计算当然是有递推关系的。如果您对系数感兴趣,请查看

rc = orthopy.c1.chebyshev1.RecurrenceCoefficients("monic", symbolic=True)