使用 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 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告