1.插值 -->求過已知有限個數據點的近似函數sql
1)拉格朗日多項式插值 -->n個插值點不一樣時肯定了一個惟一的n次多項式函數
構造n次拉格朗日插值多項式(不使用解方程n個約束來求解待定係數)優化
2)牛頓插值spa
使用差商概念來構造牛頓插值公式(計算量小,餘項與拉格朗日餘項相等),當節點之差爲常數時,使用差分來代替差商構造牛頓向前插值公式rest
3)分段線性插值 -->高次插值存在震盪缺陷,採用低次分段函數(線性函數)code
y=interp1(x0,y0,x,'method') -->method可取nearest(最近項插值)、linear(線性)、spline(逐段三次樣條插值)、cublic(保凹凸性3次插值)blog
4)Hermite插值 -->插值函數不只要求節點處與函數同值,同時要有相同一階、二階導數it
5)樣條插值 -->對插值函數的光滑性要求較高(樣條函數代替線性函數,通常採用二次、三次樣條插值)io
a.二次樣條插值函數function
兩類問題:已知函數值與邊界處導數值;已知節點導數值及邊界點函數值
b.三次樣條插值函數
三類問題:已知端點一階導(完備三次樣條插值函數);端點二階導已知;兩端點一二階導相等 -->知足n+3個約束條件
pp=csape(x0,y0,conds),y=ppval(pp,x) -->conds指定插值的邊界條件:complete,not-a-knot(非扭結條件)、second、periodic、variational(設置邊界的二階導數值爲0,0)
clc,clear x0=[0,3,5,7,9,11,12,13,14,15]; y0=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6]; x=0:0.1:15; y1=lagrange(x0,y0,x); y2=interp1(x0,y0,x); y3=interp1(x0,y0,x,'spline'); pp1=csape(x0,y0); y4=ppval(pp1,x); pp2=csape(x0,y0,'second'); y5=ppval(pp2,x); fprintf('比較一下不一樣茶之方法和邊界條件的結果:\n') fprintf('x y1 y2 y3 y4 y5\n') xianshi=[x',y1',y2',y3',y4',y5']; fprintf('%f\t%f\t%f\t%f\t%f\t%f\n',xianshi') subplot(2,2,1),plot(x0,y0,'+',x,y1),title('Lagrange') subplot(2,2,2),plot(x0,y0,'+',x,y2),title('Peicewise linear') subplot(2,2,3),plot(x0,y0,'+',x,y3),title('Spline1') subplot(2,2,4),plot(x0,y0,'+',x,y4),title('Spline2') dyx0=ppval(fnder(pp1),x0(1)) ytemp=y3(131:151); index=find(ytemp==min(ytemp)); xymin=[x(130+index),ytemp(index)] function y=lagrange(x0,y0,x); n=length(x0); m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(z-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y(i)=s; end
c.B樣條函數插值方法 -->對函數進行磨光處理(積分)構造出樣條函數做爲插值函數,既有較好的凹凸性,又有足夠的光滑性
6)二維插值:z=interp2(x0,y0,z0,x,y,'method') pp=csape({x0,y0},z0,conds,valconds),z=fnval(pp,{x,y}) 散亂節點(非有序) zi=griddata(x,y,z,xi,yi)
2.擬合 -->求近似函數,某種意義下這些點上總誤差最小
1)線性最小二乘法 -->將函數f(x)看爲一系列線性無關的函數與待定係數的乘積之和
R爲線性無關函數陣列,A爲待定係數向量,Y爲節點值向量,則A=(R'R)的逆*R'Y
a.函數的選取:做圖直觀的判斷,經常使用的有:直線、多項式、雙曲線、指數
clc,clear x=[19,25,31,38,44]'; y=[19,32.3,49,73.3,97.8]'; r=[ones(5,1),x.^2]; ab=r\y x0=19:0.1:44; y0=ab(1)+ab(2)*x0.^2; plot(x,y,'o',x0,y0,'r')
2)多項式擬合 -->採用多項式擬合給定數據
a=polyfit(x0,y0,m)輸出a爲待定係數矩陣(由高次到低次排列) y=polyval(a,x) 作散點圖選擇多項式的次數,
3.最小二乘優化問題 -->在無約束最優化問題中,目標函數由若干個函數的平方和構成,求其極小值的問題爲最小二乘優化問題
1)lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)
2)lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)
clc,clear t=[19,25,31,38,44]; c=[19,32.3,49,73.3,97.8]; x0=[0.2,0.2]; x=lsqcurvefit(@fun,x0,t,c); x(1),x(2) function f=fun(x,t); f=x(1)+x(2)*t.^2;
3)lsqnonlin(fun,x0,lb,ub,options)
4)lsqnonneg(c,d,x0,options) 求解非負的x知足最小二乘函數
4.函數逼近 -->給定一組離散數據選擇一個較簡單的f去接近這些數據成爲曲線擬合 給定一個複雜連續函數選擇一個較簡單的函數f去接近它成爲函數逼近
最小平方逼近 -->差值的平方的積分最小