(三)插值与拟合

本文介绍了插值方法,包括一维插值的拉格朗日和牛顿方法,以及多项式拟合。通过实例展示了如何使用 MATLAB 进行插值运算,并探讨了二维插值的基本函数及其在不同插值方式下的应用。此外,还提到了插值在数据估算和函数逼近中的重要性。
摘要由CSDN通过智能技术生成

 

目录

(一)插值方法

(1)一维插值

(2)用待定系数法确定插值多项式

(3)拉格朗日插值方法 

拉格朗日插值函数编写

(4)Newton插值方法等

二、插值和拟合函数

(1)多项式拟合

(2)图形窗口拟合

 (3)指定函数拟合

(4)一维插值及应用

基本函数

 (5)二维插值及其应用


(一)插值方法

(1)一维插值

  已知未知函数f(x)在n+1个互不相同的观测点x0,x1.......xn处的函数值,寻求一个近似函数\phi(x)

使其通过所有数据点。

  对于任意非观测点\breve{x},要估计该点的函数值,就可以用\phi(x)估计。

(2)用待定系数法确定插值多项式

  鉴于插值条件,有n+1个约束方程。代入插值多项式P(x)中,得行列式。

记系数矩阵为A,则

det(A)=\begin{vmatrix} x^{n}_{0} & ... & x_{0} &1 \\ x^{n}_{1} &... & x_{1} & 1\\ ...&... &... &1 \\ x^{n}_{n} & ... & x_{n} & 1 \end{vmatrix}=\prod_{i=1}^{n}\prod _{j=0}^{i-1}(x_{i}-x_{j})

如数据xi=[1,2,3,4,5,6]   yi=[16,18,21,17,15,12]

clc,clear
x0=[1:6]';
y0=[16,18,21,17,15,12]';
A=vander(x0),p=A\y0    %求vandermonde行列式
x=[1.5,2.6];
th=polyval(p,x)


A =

           1           1           1           1           1           1
          32          16           8           4           2           1
         243          81          27           9           3           1
        1024         256          64          16           4           1
        3125         625         125          25           5           1
        7776        1296         216          36           6           1


p =

   -0.2417
    4.3333
  -28.9583
   87.6667
 -115.8000
   69.0000


th =

   14.9180   20.8846

(3)拉格朗日插值方法 

  暂不介绍原理

拉格朗日插值函数编写

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
end

clc,clear
x0=[1:6]';
y0=[16,18,21,17,15,12]';
x=[1.5,2.6];
yh=lagrange(x0,y0,x)

(4)Newton插值方法等

二、插值和拟合函数

(1)多项式拟合

polyfit(X,Y,N) %多项式拟合,返回降幂排列的多项式系数
polyvval(P,xi)  %计算多项式的值



x=[1 2 3 4 5 6 7 8 9];
y=[9 7 6 3 -1 2 5 7 20];
P=polyfit(x,y,3);
xi=0:2:10;
yi=polyval(P,xi);
plot(xi,yi,x,y,'r*');

(2)图形窗口拟合

 (3)指定函数拟合

如已知对应的函数形式为f(t)=acos(kt)e^{wt}

编写如下M文件

syms t
x=[0; 0.4;1.2;2;2.8;3.6;4.4;5.2;6;7.2;8;9.2;10.4;11.6;12.4;13.6;14.4;15];
y=[1;0.85;0.29;-0.27;-0.53;-0.4;-0.12;0.1;0.28;0.15;-0.03;-0.15;-0.071;0.059;0.08;0.032;-0.015;-0.02];
%此处数据必须是列向量的形式
f=fittype('a*cos(k*t)*exp(w*t)','independent','t','coefficients',{'a','k','w'});
cfun=fit(x,y,f)    %显示拟合函数
xi=0:1:20;
yi=cfun(xi);
plot(x,y,'r*',xi,yi,'b-')



cfun = 

     General model:
     cfun(t) = a*cos(k*t)*exp(w*t)
     Coefficients (with 95% confidence bounds):
       a =      0.9994  (0.9731, 1.026)
       k =       0.994  (0.9849, 1.003)
       w =     -0.2107  (-0.2222, -0.1993)

(4)一维插值及应用

基本函数

1.

F=griddedInterpolant(x,v,method,extrapolation)
%计算对应的函数值的使用格式为vq=F(xq1,xq2...)
%method 包括'nearest','linear','spline','cubic'

%n维插值的调用格式为
F=griddedInterpolant(x1,x2,...xn,v,method,extrapolation)
%计算函数值 vq=F(xq1,xq2,,,xqn)

2.

%三次样条插值函数csape
pp=csape(x0,y0,conds,valconds)  %conds指定插值的边界条件
%可以是'complete','not_a_knot'


%求插值点函数值 调用fnval

y=fvnal(pp1,x)

length(x0)
length(y0)
x=0:0.1:15; y1=lagrange(x0,y0,x);
y2=interp1(x0,y0,x);
y3=interp1(x0,y0,x,'spline');
pp4=csape(x0,y0); y4=fnval(pp4,x);
yx5=griddedInterpolant(x0,y0,'spline'); 
y5=yx5(x); 
[y1',y2',y3',y4',y5']
subplot(1,3,1),plot(x,y1),title('拉格朗日插值')
subplot(1,3,2),plot(x,y2),title('分段线性插值')
subplot(1,3,3),plot(x,y3),title('三次样条插值')
dx=diff(x);dy=diff(y3);
dy_dx=dy./dx;
dy_dx0=dy_dx(1)
ytemp=y3(131:151);ymin=min(ytemp);
index=find(y3==ymin);
xmin=x(index);[xmin,ymin]

 (5)二维插值及其应用

基本函数

z=interp2(x0,y0,z0,x,y,'method')
%x0,y0表示m维和n维向量,表示节点。z0为n*m矩阵,表示节点值。x,y为一维数组,表示插值点;x,y应是
%不同方向的向量,z为矩阵,行数为y的维数,列数2为x的维数,表示插值得到的值。

pp=csape({x0,y0},z0,conds,valconds),z=fnval(pp,{x,y})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值