• 插值与拟合


    1.插值  -->求过已知有限个数据点的近似函数

      1)拉格朗日多项式插值    -->n个插值点不同时确定了一个唯一的n次多项式

        构造n次拉格朗日插值多项式(不使用解方程n个约束来求解待定系数)

      2)牛顿插值

        使用差商概念来构造牛顿插值公式(计算量小,余项与拉格朗日余项相等),当节点之差为常数时,使用差分来代替差商构造牛顿向前插值公式

      3)分段线性插值    -->高次插值存在震荡缺陷,采用低次分段函数(线性函数)

        y=interp1(x0,y0,x,'method')  -->method可取nearest(最近项插值)、linear(线性)、spline(逐段三次样条插值)、cublic(保凹凸性3次插值)

      4)Hermite插值    -->插值函数不仅要求节点处与函数同值,同时要有相同一阶、二阶导数

      5)样条插值    -->对插值函数的光滑性要求较高(样条函数代替线性函数,一般采用二次、三次样条插值)

        a.二次样条插值函数

          两类问题:已知函数值与边界处导数值;已知节点导数值及边界点函数值

        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('比较一下不同茶之方法和边界条件的结果:
    ')
    fprintf('x     y1     y2     y3      y4      y5
    ')
    xianshi=[x',y1',y2',y3',y4',y5'];
    fprintf('%f	%f	%f	%f	%f	%f
    ',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=ry
    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去接近它成为函数逼近

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

  • 相关阅读:
    sql分页查询
    vi编辑器使用
    Linux命令:
    ubuntu中mysql忘记密码如何修改
    关于MySQL中自增的理解和设置
    MySQL中是索引
    MySQL中的分页操作结合python
    MySQL的分组和排序
    MySQL多表连接操作
    .NET Core App部署Linux
  • 原文地址:https://www.cnblogs.com/bigger-class/p/6876036.html
Copyright © 2020-2023  润新知