使用 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) 来创建我们的切比雪夫系数。
通过此操作,我们定义了区间的下界和上界,以及我们需要打印的切比雪夫系数的数量。
结论
切比雪夫级数在数值分析、复数学和工程中都有应用。它们还可以用于求解微分方程、执行信号处理以及提供数学逼近理论。它是一个很好的函数,在准确性和收敛特性方面优于其他方法。
但是,由于其多个处理阶段,它在计算上可能很密集。尽管它在收敛特性方面具有优势,但它也有一个限制,因此无法满足快速变化的方程。由于切比雪夫级数提供全局逼近,即它们在整个区间空间内精确地逼近函数,因此可能需要大量项来提高其精度,从而导致收敛速度变慢。