高斯向前插值


高斯向前插值是一種數值方法,它允許我們使用一系列等距資料點來確定函式在特定範圍內的某個點的值。這種多項式插值方法使用牛頓差商公式來計算多項式的係數。這種方法特別適用於估計給定範圍內多個等距位置的值。在本文中,我們將研究Python實現方法。

安裝

要使用高斯向前插值方法,由於我們將執行復雜的數學計算,因此可以透過以下命令安裝**numpy**庫。

pip install numpy

演算法

  • 讓我們首先輸入函式**f(x)**、x值的範圍**[a,b]**、等距資料點的數量n以及我們想要逼近函式值x0的點。我們需要首先確定資料點之間的間距h,我們可以使用公式**h = (b-a)/(n-1)**來實現。

  • 接下來,我們需要建立一個數組D,它將儲存f(x)在等距點處的差商。為此,我們可以將D[i,0]賦值為**f(a + (i-1)h)**,其中I的範圍為1到n,這將幫助我們計算D的主要部分。對於D的其餘部分,我們可以使用公式**D[i,j] = (D[i,j-1] - D[i-1,j-1])/(jh)**,其中i的範圍為**j+1到n**,而j的範圍為**1到n-1**。

  • 一旦f(x)在等距點處的差商填充了我們的陣列D,就可以確定插值多項式的係數。

  • 最後,我們可以使用公式**P(x0) = c[1] + (x0 - a)c[2] + (x0 - a)(x0 - a - h)c[3]/2 +**...來計算插值多項式在x0 (x0)處的值。這可以透過將**c[j]設定為D[j,j] (其中j的範圍為1到n)**來實現。

示例

使用區間[0,1]中5個等距資料點逼近x = 0.2處的函式sin(x) −

import numpy as np

# Define the function
def f(x):
   return np.sin(x)

# Set up the inputs
a = 0
b = 1
n = 5
x0 = 0.2

# Calculate the spacing
h = (b - a)/(n - 1)

# Calculate the divided differences
D = np.zeros((n,n))
for i in range(n):
   D[i,0] = f(a + i*h)
for j in range(1,n):
   for i in range(j,n):
      D[i,j] = (D[i,j-1] - D[i-1,j-1])/(j*h)

# Calculate the coefficients
c = np.zeros(n)
for j in range(n):
   c[j] = D[j,j]

# Evaluate the interpolating polynomial
P = c[0]
for j in range(1,n):
   prod = 1
   for k in range(j):
      prod = (x0 - a - k*h)
   P += prod*c[j]/np.math.factorial(j)

print("Approximation of sin(0.2): ", P)

輸出

Approximation of sin(0.2):  0.20824045983077355 
  • 函式**f(x)**被定義為計算**sin(x)**。

  • a、b、n和x0被初始化為輸入值。

  • 間距**h**計算為**(b - a)/(n - 1)**。

  • 差商D透過用等距點處的函式值填充第一列,然後使用公式**(D[i,j-1] - D[i-1,j-1])/(j*h)**填充其餘列來計算。

  • 係數**c**透過取差商矩陣的對角線來計算。

  • 使用係數c和輸入值x0計算插值多項式。prod變數用於計算**(x0 - a - k*h)**在所需k值上的乘積。最後,使用此乘積和係數更新P變數。

  • 這段程式碼的輸出是**sin(0.2)**的近似值。可以修改實現以適應不同的輸入值和函式。

2. 使用區間[1,2]中4個等距資料點逼近x = 1.5處的函式e^(x/2) −

import numpy as np

# Define the function
def f(x):
   return np.exp(x/2)

# Set up the inputs
a = 1   # Lower limit
b = 2   # Upper limit
n = 4   # data pts count
x0 = 1.5   # Interpolation point

# Calculate the spacing
h = (b - a)/(n - 1)

# Calculate the divided differences
D = np.zeros((n,n))   # Initialize divided differences matrix
for i in range(n):
   D[i,0] = f(a + i*h)
for j in range(1,n):
   for i in range(j,n):
      D[i,j] = (D[i,j-1] - D[i-1,j-1])/(j*h)

# Calculate the coefficients
c = np.zeros(n)
for j in range(n):
   c[j] = D[j,j]

# Evaluate the interpolating polynomial
P = c[0]
for j in range(1,n):
   prod = 1
   for k in range(j):
      prod = prod * (x0 - a - k*h)
   P += prod*c[j]/np.math.factorial(j)

# Print the result
print("Approximation of e^(1.5/2): ", P)

輸出

Approximation of e^(1.5/2):  2.1073059306325783

應用

高斯向前插值法可用於金融、材料科學、工程和計算機圖形等各個領域。例如,它可以用來擬合金融資料,如股票價格,以預測未來的值。在物理學中,它可以用來估計物理量在特定時間或位置的值。在工程學中,它可以用來根據少量資料來估計複雜系統(如飛機)的行為。在視覺化中,它可以用來在影像中對畫素的顏色或強度進行插值,從而在相鄰畫素之間形成平滑的過渡。

結論

本文介紹了數值高斯向前插值法,該方法使用一系列等距資料點對函式進行插值。我們對該方法進行了詳細的討論,並提供了幾個Python實現示例。還介紹了高斯向前插值法在各個領域的應用。總的來說,高斯向前插值法可以應用於許多現實世界的場景,是逼近函式的寶貴工具。

更新於:2023年8月22日

1000+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.