数值计算 插值与拟合
1. 拉格朗日多項式插值
了解概念
插值多項式
插值節點
范德蒙特(Vandermonde)行列式
截斷誤差、插值余項
特點
函數實現
function y=lagrange(x0,y0,x)n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;end 復制代碼設n個節點數據以數組x0,y0輸入(注意Matlat的數組下標從1開始),m個插值點以數組x 輸入,輸出數組y為m個插值。
則可用y = lagrange(x0,y0,x)調用。
2. 牛頓(Newton)插值
差商
差分
等距節點插值公式(Newton向前插值公式)
每增加一個節點,插值多項式只增加一項,因而便于遞推運算。而且 Newton 插值的計算量小于Lagrange 插值。
3. 分段線性插值
了解概念
插值多項式的振蕩
特點
將每兩個相鄰的節點用直線連起來,如此形成的一條折線就是分段線性插值函數。它是為了解決高次插值多項式的缺陷:隨著插值次數n增加,雖然誤差減小,但插值函數光滑性變壞,有時會出現很大的振蕩。
實際上用函數表作插值計算時,分段線性插值就足夠了,如數學、物理中用的特殊函數表,數理統計中用的概率分布表等。
函數實現
一維插值函數interp1:y=interp1(x0,y0,x,'method')
4. 埃爾米特(Hermite)插值
了解概念
特點
如果對插值函數,不僅要求它在節點處與函數同值,而且要求它與函數有相同的一 階、二階甚至更高階的導數值,這就是Hermite 插值問題。
這里主要討論在節點處插值函數與函數的值及一階導數值均相等的Hermite 插值。
函數實現
設n個節點的數據以數組x0(已知點的橫坐標), y0(函數值), y1(導數值)輸入(注意Matlat 的數組下標從1 開始),m 個插值點以數組x 輸入,輸出數組y 為m個插值。
5. 樣條插值
了解概念
樣條函數 關于分劃Δ的k次樣條函數 k次樣條曲線 樣條節點 內節點 邊界點 k次樣條函數空間 二次樣條函數 三次樣條函數
特點
有些問題對插值函數的光滑性有較高要求,要求曲線具有較高的光滑程度,不僅要連續,而且要有連續的曲率,這就導致了樣條插值的產生。
函數實現
y=interp1(x0,y0,x,'spline');y=spline(x0,y0,x);pp=csape(x0,y0,conds),y=ppval(pp,x)。其中 x0,y0 是已知數據點,x 是插值點,y 是插值點的函數值。對于三次樣條插值,我們提倡使用函數 csape,csape 的返回值是pp 形式,要求插值點的函數值,必須調用函數ppval。pp=csape(x0,y0):使用默認的邊界條件,即Lagrange 邊界條件。pp=csape(x0,y0,conds)中的conds 指定插值的邊界條件,其值可為:'complete' 邊界為一階導數,即默認的邊界條件'not-a-knot' 非扭結條件'periodic' 周期條件'second' 邊界為二階導數,二階導數的值[0, 0]。'variational' 設置邊界的二階導數值為[0,0]。對于一些特殊的邊界條件,可以通過 conds 的一個1×2矩陣來表示,conds 元素的取值為1,2。此時,使用命令pp=csape(x0,y0_ext,conds)其中y0_ext=[left, y0, right],這里left 表示左邊界的取值,right 表示右邊界的取值。conds(i)=j 的含義是給定端點i 的j 階導數,即conds 的第一個元素表示左邊界的條件,第二個元素表示右邊界的條件,conds=[2,1]表示左邊界是二階導數,右邊界是一階導數,對應的值由left 和right 給出。 復制代碼例題
已知函數y=(x^2+2x+3)e^(-2x),給定x的取值從0到1步長為0.1的數據點,用三次樣條函數求該函數在區間[0,1]上的積分。x0 = 0:0.1:1; y0 = (x0.^2+2*x0+3).*exp(-2*x0);pp = csape(x0,y0); %進行三次樣條插值sy = fnint(pp); %求樣條函數的積分函數,結果為pp數據結構I = ppval(sy,1)-ppval(sy,0) %求樣條函數積分的值 復制代碼6. B樣條函數插值方法
了解概念
磨光函數
等距B樣條函數
一維等距B樣條函數插值 二維等距B樣條函數插值
特點
實際中的許多問題,往往是既要求近似函數(曲線或曲面)有足夠的光滑性,又要求與實際函數有相同的凹凸性,一般插值函數和樣條函數都不具有這種性質。如果對于一個特殊函數進行磨光處理生成磨光函數(多項式),則用磨光函數構造出樣條函數作為插值函數,既有足夠的光滑性,而且也具有較好的保凹凸性,因此磨光函數在一維插值(曲線)和二維插值(曲面)問題中有著廣泛的應用。
函數實現
7. 二維插值
了解概念
插值節點為網格節點
插值節點為散亂節點
特點
函數實現
插值節點為網格節點
二次樣條插值:z=interp2(x0,y0,z0,x,y,'method')
其中 x0,y0分別為m維和n維向量,表示節點,z0為n × m維矩陣表示節點值,x,y為一維數組表示插值點x與y應是方向不同的向量,即一個是行向量,另一個是列向量,z為矩陣,它的行數為y的維數,列數為x的維數,表示得到的插值,'method'的用法同上面一維插值。
三次樣條插值:pp=csape({x0,y0},z0,conds,valconds),z=fnval(pp,{x,y})
其中 x0,y0 分別為m 維和n維向量,z0 為m × n 維矩陣,z 為矩陣,它的行數為x的維數,列數為y的維數,表示得到的插值,使用方法同一維插值。
插值節點為散亂節點
已知n個節點:(x , y , z )(i 1,2, ,n) i i i = L ,求點(x, y)處的插值z:
ZI = GRIDDATA(X,Y,Z,XI,YI)
其中X、Y、Z 均為n 維向量,指明所給數據點的橫坐標、縱坐標和豎坐標。向量XI、YI是給定的網格點的橫坐標和縱坐標,返回值ZI為網格(XI,YI)處的函數值。XI與YI應是方向不同的向量,即一個是行向量,另一個是列向量。
最小二乘法的Matlab 實現
解方程組方法 A = R \Y
x=[19 25 31 38 44]';y=[19.0 32.3 49.0 73.3 97.8]';ab=r\y 復制代碼多項式擬合方法 a=polyfit(x0,y0,m)
其中輸入參數x0,y0 為要擬合的數據,m 為擬合多項式的次數,輸出參數a 為擬合多項式y=amxm+…+a1x+a0 系數a=[ am, …, a1, a0]。
多項式在x 處的值y可用y=polyval(a,x)計算。
最小二乘優化
在Matlab 優化工具箱中,用于求解最小二乘優化問題的函數有:lsqlin、lsqcurvefit、lsqnonlin、lsqnonneg
x=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)
X=LSQCURVEFIT(FUN,X0,XDATA,YDATA,LB,UB,OPTIONS)
X=LSQNONLIN(FUN,X0,LB,UB,OPTIONS)
X = LSQNONNEG(C,d,X0,OPTIONS)
總結
以上是生活随笔為你收集整理的数值计算 插值与拟合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JQuery UI 拖拽排序
- 下一篇: grenndao 插入表数据报错