0

我的问题是: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

我在网上找到的一个解决方案不起作用,所以我希望有人能解释一下。

ps 有关切比雪夫多项式的更多信息:CSU Fullteron维基百科-切比雪夫多项式。它们非常酷/有用,并且将一些非常有趣的三角函数/属性结合在一起;值得一读。

4

3 回答 3

2

SciPy 有 Chebyshev 的实现

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

我建议查看他们的代码。

于 2011-05-04T18:47:01.737 回答
0

Chebyshev 的最佳实现是:

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

如果您针对其他实现进行测试,包括显式多项式评估和迭代计算递归关系,这实际上同样快。 自己试试。.

一般来说:

  • 显式多项式评估是最差的(对于大 n)
  • 递归评估好一点
  • 余弦评估是最好的
于 2012-05-17T23:20:27.013 回答
0

Orthopy(我的一个项目)也支持切比雪夫多项式的计算。和

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。您可以使用多个值的列表/向量,甚至可以使用符号符号。

计算当然发生在递归关系中。如果您对系数感兴趣,请查看

rc = orthopy.c1.chebyshev1.RecurrenceCoefficients("monic", symbolic=True)
于 2021-05-12T19:59:16.093 回答