插值與擬合

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去接近它成爲函數逼近

  最小平方逼近  -->差值的平方的積分最小

相關文章
相關標籤/搜索