使用 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) 來建立我們的切比雪夫係數。
透過此操作,我們定義了區間的下界和上界,以及我們需要列印的切比雪夫係數的數量。
結論
切比雪夫級數在數值分析、複數學和工程中都有應用。它們還可以用於求解微分方程、執行訊號處理以及提供數學逼近理論。它是一個很好的函式,在準確性和收斂特性方面優於其他方法。
但是,由於其多個處理階段,它在計算上可能很密集。儘管它在收斂特性方面具有優勢,但它也有一個限制,因此無法滿足快速變化的方程。由於切比雪夫級數提供全域性逼近,即它們在整個區間空間內精確地逼近函式,因此可能需要大量項來提高其精度,從而導致收斂速度變慢。