matlab 求拟合直线的斜率_常见的插值和拟合方法

一、插值和拟合的区别

首先插值和拟合都是根据某个未知函数(或已知但难于求解的函数)的几个已知数据点求出变化规律和特征相似的近似曲线的过程。但是插值法要求的是近似的曲线需要完全经过数据点,而拟合则是得到最接近的结果,强调最小方差的概念。插值和拟合的区别如下图所示[1](其中左边为插值,右边为拟合):

7e70059dc802568c2eef4fc15609c224.png

二、常见插值法

1.基本概念

设函数

有n个已知数据点
,若存在一简单函数
,使
成立。则
插值函数,点
为插值节点, 求
的方法称为插值法。

2.拉格朗日插值

Lagrange插值多项式的公式如下:

基函数:

插值多项式:

插值余项:

时,截断误差界是:

其中:

matlab代码:

function y=Lagrange(x0,y0,x)
%输入:x0:节点变量数据
%      y0:节点函数值
%      x:插值数据
%输出:y:插值函数值
    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

例1:设

,并给出如下节点数据

x0=[0.4,0.5,0.7,0.8]

y0=[-0.916291,-0.693147,-0.356675,-0.223144]

估计x=0.6的值

带入Lagrange()函数,得到

,实际值:

3.Newton插值

上面介绍的拉格朗日插值多项式,当插值节点增减时,计算要全部进行,很不方便,所以提出一种Newton插值。

(1)差商和差分的性质

一阶差商(均差):

二阶差商(均差):一阶差商的差商

阶差商(均差):

(2)Newton插值多项式

(3)误差

(4)差商与导数的关系

matlab代码如下:

function [YY,y]=newton_chazhi(X,Y,x,M)
%输入为:X-插值点的x轴向量
%Y-插值点的y轴向量
%需要求解的x变量
%M为多项式次数
%输出YY为差分表
%y是x对应的因变量
m=length(X);
YY=zeros(m);
YY(:,1)=Y;
%求查分表
for i=2:m
    for j=i:m
        YY(j,i)=(YY(j,i-1)-YY(j-1,i-1))/(X(j)-X(j-i+1));
    end
end
y=Y(1);
%计算newton插值公式
for i=1:M
    xl=1;
   for j=1:i
       xl=xl*(x-X(j));
   end
   y=y+xl*YY(i+1,i+1);
end
end


function [YY,y]=main()
X=[0.40,0.55,0.65,0.80,0.90,1.05];
Y=[0.41075,0.57815,0.69675,0.88811,1.02652,1.25382];
x=0.596;
M=4;
[YY,y]=newton_chazhi(X,Y,x,M);
end

4.三次Hermite插值

其中:

,余项表达式:

用Hermite进行插值时需要有确定的三个数据点以及中间点的一阶导数。

例:给定

求三次样条插值多项式
,及余项表达式。

matlab代码:

function y=hermiter_chazhi(X,Y,x1,x)
%求差分表
m=length(X);
YY=zeros(m);
YY(:,1)=Y;
for i=2:m
    for j=i:m
        YY(j,i)=(YY(j,i-1)-YY(j-1,i-1))/(X(j)-X(j-i+1));
    end
end
%求A
A=x1-YY(2,2)-(X(2)-X(1))*YY(3,3);

%求插值
y=Y(1)+YY(2,2).*(x-X(1))+YY(3,3).*(x-X(1)).*(x-X(2))+A.*(x-X(1)).*(x-X(2)).*(x-X(3));
end

function y=main_her()
x=[1/4:0.01:9/4];
f=x.^(3/2);
X=[1/4,1,9/4];
Y=[1/8,1,27/8];
x1=3/2;
y=hermiter_chazhi(X,Y,x1,x);

plot(x,y,"r")
grid on
hold on 
plot(x,f,"b")
scatter(X,Y)
legend("插值曲线","实际曲线")
end

ba68ee2651727116f7f9a3ced4e683ca.png

5.三次样条插值

三次样条插值参考下面的博客:

HappyWang:轨迹生成--三次样条插值​zhuanlan.zhihu.com
13772f835a7fceec2024ef7934446664.png

三、常见的拟合方法

HappyWang:回归预测(1)--线性回归和多项式拟合​zhuanlan.zhihu.com
f7d180431c34960d72a41c57aeef0efa.png

参考

  1. ^https://www.zhihu.com/question/24276013

版权声明:本文为weixin_27419879原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。