複製鏈接
請複製以下鏈接發送給好友

多項式插值

鎖定
插值法又稱“內插法”,是利用函數f (x)在某區間中已知的若干點的函數值,作出適當的特定函數,在區間的其他點上用這特定函數的值作為函數f (x)的近似值,這種方法稱為插值法。如果這特定函數是多項式,就稱它為多項式插值。常用的幾種多項式插值法有:直接法、拉格朗日插值法和牛頓插值法。
中文名
多項式插值
外文名
polynomial interopolation
類    型
插值技術
方    法
直接法;拉格朗日法;牛頓法
用    來
曲線擬合、迴歸
應用領域
人工智能

多項式插值定義

給定n+1個點
(稱為插值點),所謂多項式插值就是找到一個多項式(稱為插值多項式
使得它滿足條件
其中,i=0,1,...,n。也就是説,多項式y=P(x)的圖像要經過給定的n+1個點。
在實際應用中,這些插值點可能來自某次實驗測量所得的數據,也可能來自某個複雜函數
的值。通過計算插值多項式,我們可以找到這些實驗數據間的規律,或者使用簡單的多項式函數
來近似複雜的函數
[1] 

多項式插值唯一性和誤差

定理一:
給定n+1個點
,若
兩兩不同,則存在唯一一個次數不超過n的多項式
,使得
成立。
證明:利用範德蒙德矩陣和代數學基本定理即得。
的值來自某個函數
,且f(x)具有n+1階連續導數時,下面的定理可以用來計算多項式插值的(截斷)誤差。
定理二:
給定n+1個點
,其中
,進一步假設函數f(x)具有n+1階連續導數,則插值多項式P(x)的誤差R(x)為
其中,

多項式插值計算方法

給定n+1個點, 計算插值多項式的主要方法有:直接法、拉格朗日多項式插值和牛頓多項式插值。下面我們分別介紹這三種方法。
(注意,根據定理一,這三種方法得到的插值多項式在理論上説應該是一致的,而且誤差也相同。)
直接法
根據定理一,假設插值多項式為
由插值條件
,我們得到關於係數
,
,…,
,
線性方程組
圖示 圖示
通過求解這個線性方程組,即得到插值多項式。
優點:直接,性質一目瞭然。
缺點:待求解的線性方程組的係數矩陣為範德蒙德(Vandermonde)矩陣,它是一個病態矩陣,這使得在實際求解方程組時將產生很大的誤差。
拉格朗日多項式插值
拉格朗日(Lagrange)多項式插值的原理是:先構造一組拉格朗日基函數
,這些基函數為次數不超過n的多項式,且具有性質
然後將這些基函數做線性組合,得到拉格朗日插值多項式
容易驗證,多項式L(x)滿足插值條件
拉格朗日基函數
的構造如下:
由基函數的性質,當
時,
,即
的零點,可以假設
其中,K為待定係數。再由
,得到
從而得到
因此,基函數
,則
還可以表示為
下面的定理説明
稱為基函數的原因:
定理三:
為全體次數不超過n的多項式構成的集合,則
是線性空間
的一組基。
Matlab 實現
function [y,Lb] = LagrangeInterpolation(X,Y,x)
% 拉格朗日多項式插值函數
% 注意:插值點的個數為n,差值多項式的次數為n-1
%
% 輸入參數
% X,Y: 插值點座標
% x: 求值點
%
% 輸出參數
% y: 拉格朗日插值多項式在x點的值
% Lb: 拉格朗日基函數在x點的值
if length(X) ~= length(Y)    error('X和Y的長度不相等');
    endn = length(X);
    %獲取插值點的個數
    %初始化
    y = 0;    Lb = ones(1,n);
    for i = 1:n    
       for j = 1:n %計算拉格朗日基函數在x點的值            if j ~= i               Lb(i) = Lb(i) * (x-X(j))/(X(i)-X(j));        
            end       end       y = y + Lb(i)*Y(i); 
       %計算拉格朗日插值多項式的值
     end
end
均差與牛頓多項式插值
牛頓多項式插值是基於均差的計算。首先定義均差如下:
函數f(x)關於點的一階均差(或差商)為
一階均差反映了函數在區間的平均變化率
用遞歸的方式,我們定義二階均差為
同理,k階均差為
特別地,0階均差定義為
根據均差的定義,構造均差表如下:
圖示 圖示
如果將x也看作一個點,由均差的定義可以得到
圖示 圖示
其中,
稱為牛頓插值多項式。
為插值餘項
定理一定理二得到均差和導數的關係如下:
其中,
Matlab實現
function [y,Nt]=NewtonInterpolation(X,Y,x)
% 牛頓多項式插值函數
% 注意:插值點的個數為n,差值多項式的次數為n-1
%
% 輸入參數
% X,Y: 插值點座標
% x: 求值點
%
% 輸出參數% y:牛頓差值多項式在x點的值
% Nt:均差表
if length(X) ~= length(Y)    error('X和Y的長度不相等');
    endn = length(X);     Nt = zeros(n); 
    %初始化均差表,按列存放各階均差
    Nt(1,1) = Y(1); 
    %0階均差
    for i = 2:n 
    %按行計算均差表       Nt(i,1) = Y(i); %0階均差       for j = 2:i           Nt(i,j) = (Nt(i,j-1)-Nt(i-1,j-1))/(X(i)-X(i-j+1));    
       end
    end
    %計算牛頓插值多項式在x點上的值w = 1;    y = Nt(1,1) * w;
    for i = 2 : n        w = w * (x - X(i-1));        y = y + Nt(i,i) * w;
    end
 end

多項式插值比較

拉格朗日多項式插值的計算量大於牛頓多項式插值的計算量。
特別地,當新增一個插值點時,拉格朗日插值需要重新計算全部的基函數,而牛頓插值只需計算均差表中新的一行的值即可。
參考資料
  • 1.    陳錕, 田曉梅. 用Matlab進行插值法比較教學研究[J]. 電氣電子教學學報, 2012, 34(2):98-100.