使用 Python 中的 NumPy 根据给定的复根生成切比雪夫级数


切比雪夫级数是指一系列切比雪夫多项式的多项式级数。切比雪夫多项式是在特定区间内定义的多项式,其本质上是正交的。它具有权重函数 $\mathrm{(1-x^{2})^{(-½)}}$。该多项式以俄罗斯数学家帕夫努蒂·切比雪夫命名。

正交性是定义两个多项式的一种特定类型的关系。如果两个多项式之间的关系满足某些条件,则这两个多项式在本质上是正交的。例如,如果两个函数在某个区间上的积分等于 0,则可以认为这两个函数是正交的。

切比雪夫多项式定义为 \mathTn(x)。它们按如下所示递归定义

$\mathrm{T_{0}(x)=1}$

$\mathrm{T_{1}(x)=x}$

$\mathrm{T_{2}(x)=2x*T_{(n-1)}(x)-T_{(n-2)}(x)}$

这表明切比雪夫级数中的第 n 个多项式可以通过前两个多项式值(n-1)和(n-2)的帮助来计算。通过这种关系,我们可以递归地计算任意阶数的切比雪夫级数。

每个多项式都具有度数“n”,这使得这些多项式在工程的不同领域具有有用的特性。

在 Python 中生成切比雪夫级数所需的库是 numpy 和 Scipy

pip install numpy
pip install scipy

使用 NumPy,我们可以创建数组、查找余弦值并生成 pi 的值,所有这些都将用于生成切比雪夫系数。

算法

  • 导入必要的库。

  • 定义一个函数,将切比雪夫级数打印到您首选的数字。

  • 从区间 [-1,1] 创建一个节点数组。

  • 将节点转换为它们各自的区间。

  • 计算转换后的节点乘以复数 (eix) 的指数值。

  • 使用逆离散余弦变换 (IDCT) 计算系数。

  • 定义两个区间和项数。

  • 调用函数并打印系数。

示例

import numpy as np
from scipy.fftpack import idct

def chebyshev_series_complex(f, a, b, num_terms):
   # Create an array of Chebyshev nodes in the interval [-1, 1]
   nodes = np.cos(np.pi * (2 * np.arange(num_terms) + 1) / (2 * num_terms))

   # Transform the nodes to the desired interval [a, b]
   transformed_nodes = (b - a) / 2 * nodes + (a + b) / 2

   # Compute the function values at the transformed nodes
   function_values = f(transformed_nodes)

   # Compute the Chebyshev coefficients using the inverse discrete cosine transform (IDCT)
   chebyshev_coeffs = idct(function_values, type=1) / (num_terms - 1)

   return chebyshev_coeffs

# Example usage:
def complex_function(x):
   return np.exp(1j * x)  # e^(ix)

a = 0.0  # Lower bound of the interval
b = 2 * np.pi  # Upper bound of the interval
num_terms = 10  # Number of terms in the series

coefficients = chebyshev_series_complex(complex_function, a, b, num_terms)
print(coefficients)

输出

[ 4.54037708e-01-2.22044605e-16j  1.36850408e-17-6.76050971e-01j
  9.89722821e-01+2.57510063e-16j -4.31753398e-17+6.38292206e-01j
 -2.26373147e-01-7.70988212e-17j  1.48029737e-16-3.09382988e-02j
  1.00382982e-02+9.86864911e-17j -9.86864911e-17+2.14956728e-02j
 -1.15473450e-03-9.86864911e-17j  9.86864911e-17+1.70656312e-02j]

我们首先通过查找以下等式的余弦值来创建一个切比雪夫节点数组

(2*(num_term+1))/(2*num_term)

然后我们将这些节点转换为它们各自的区间 [a,b],该区间将由用户给出,方法是找到区间之间的差值,然后将它们减半,并将它们乘以节点值:(b-a)/2*nodes。我们将它们添加到区间减半的总和 (a+b)/2 中。整个等式为

(b-a)/2*nodes+(a+b)/2

在用户定义的函数中,f 用作占位符函数,您可以在其中根据自己的喜好自定义多项式方程。在这里,我们计算了前面找到的转换节点 eix 的复指数值。您可以添加任何多项式函数。

计算函数值后,我们执行 SciPy 库中提供的逆离散余弦变换 (IDCT) 来创建我们的切比雪夫系数。

通过此操作,我们定义了区间的下界和上界,以及我们需要打印的切比雪夫系数的数量。

结论

切比雪夫级数在数值分析、复数学和工程中都有应用。它们还可以用于求解微分方程、执行信号处理以及提供数学逼近理论。它是一个很好的函数,在准确性和收敛特性方面优于其他方法。

但是,由于其多个处理阶段,它在计算上可能很密集。尽管它在收敛特性方面具有优势,但它也有一个限制,因此无法满足快速变化的方程。由于切比雪夫级数提供全局逼近,即它们在整个区间空间内精确地逼近函数,因此可能需要大量项来提高其精度,从而导致收敛速度变慢。

更新于: 2023年8月10日

111 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告