matlab做三次拉格朗日插值多项式_MATLAB的插值与拟合

一.插值

什么是插值

首先看一下 百度百科的定义

在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。

从古到今,百度百科的定义一直。。。

matlab做三次拉格朗日插值多项式_MATLAB的插值与拟合_第1张图片
欲哭无泪

这是啥意思?

简而言之就是 我现在有n个点对应的函数值 ,但是我想知道 在这个区间内的n+x个点的函数值,这就是插值

举个例子:

我们已经知道一定数量的离散的点,如下

x

接下来,我们 想把他用光滑的线连接起来,比如:

x=[0.5 1 1.5 2 2.5 3]
y=[1.75 2.45 3.81 4.8 8 8.6]
xi=0.5:0.1:3
y3=lagrange(x,y,xi)
y2=spline(x,y,xi)
y1=interp1(x,y,xi)
subplot(3,1,1)
plot(x,y,'o',xi,y1)
title('分段线性插值')
subplot(3,1,2)
plot(x,y,'o',xi,y2)
title('三次样条插值')
subplot(3,1,3)
plot(x,y,'o',xi,y3)
title('拉格朗日插值')

matlab做三次拉格朗日插值多项式_MATLAB的插值与拟合_第2张图片

这是我们所说的插值,插值有很多种类,本文暂时介绍三种。

matlab做三次拉格朗日插值多项式_MATLAB的插值与拟合_第3张图片

第一个命令interp1

1.分段线性插值(interp1)

interp1叫做分段线性插值,就是先插入一些点,再将这些点用直线连接起来。

调用格式如下:

yi=interp1(x,y,xi)

这里面,x与y是已知的点形成的矩阵,xi,yi是插入的点,在这里我们取步长为0.1

就插入了26个点然后将这26个点用直线连接起来

matlab做三次拉格朗日插值多项式_MATLAB的插值与拟合_第4张图片

matlab做三次拉格朗日插值多项式_MATLAB的插值与拟合_第5张图片

然后将这26个点用直线连接起来,就得到了

matlab做三次拉格朗日插值多项式_MATLAB的插值与拟合_第6张图片

这是就是分段线性插值(interp1)

2.三次样条插值(spline)

在工程实际中,我们对一些图形有比较高的要求,比如飞机的机翼形线,要求是二阶光滑的。

matlab做三次拉格朗日插值多项式_MATLAB的插值与拟合_第7张图片
百度百科定义

调用格式

yy=spline(x,y,xx)

继续以刚刚的x,y值为例:

x=[0.5 1 1.5 2 2.5 3]
y=[1.75 2.45 3.81 4.8 8 8.6]
plot(x,y,'o')
xi=0.5:0.1:3
yi=spline(x,y,xi)
hold on
plot(xi,yi)

matlab做三次拉格朗日插值多项式_MATLAB的插值与拟合_第8张图片
三次样条插值

3.拉格朗日插值

来看一下拉格朗日插值的定义

matlab做三次拉格朗日插值多项式_MATLAB的插值与拟合_第9张图片
图来源于网络,侵删

在进行拉格朗日插值之前,我们需要定义一个m文件,如下:

function yy=lagrange(x,y,xx)
m=length(x);
n=length(y);
if m~=n,error('向量x与y的长度必须一致')
end
s=0;
for i=1:n
    t=ones(1,length(xx))
    for j=1:n
        if j~=i
            t=t.*(xx-x(j))/(x(i)-x(j))
        end
    end
    s=s+t*y(i)
end
yy=s

再进行插值

x=[0.5 1 1.5 2 2.5 3]
y=[1.75 2.45 3.81 4.8 8 8.6]
plot(x,y,'o')
xi=0.5:0.1:3
yi=lagrange(x,y,xi)
hold on
plot(xi,yi)

matlab做三次拉格朗日插值多项式_MATLAB的插值与拟合_第10张图片
拉格朗日插值

二.拟合

如果说插值是先找点再连线,那么拟合就是根据已知点求出曲线方程,在画线。

多项式拟合(polyfit)

将已知点拟合成一个多项函数:y=

x^n+
x^(n-1)+......+
x+

调用格式

a=polyfit(x,y,n)

表示对已知点x,y进行拟合,求得n次多项式的系数向量(a)

如:x=[0.5 1 1.5 2 2.5 3]
y=[1.75 2.45 3.81 4.8 8 8.6]
a=polyfit(x,y,5)
%进行五阶多项式拟合
%a =

 %  -2.9333   24.4067  -75.7400  108.9983  -69.6317   17.3500

%故此,拟合形成的五阶多项式为
%y=-2.9333x^5+25.4067x^4-75.7400x^3+108.9983x^2-67.6317*x+17.3500

接着用polyval命令求得y的值

polyval调用格式:

y1=polyval(a,x1)

a为多项式向量

polyfit的输出是一个多项式系数的行向量。为了计算在xi数据点的多项式值。

x1=0.5:0.1:3
y1=polyval(a,x)
plot(x,y,'o',x1,y1)

matlab做三次拉格朗日插值多项式_MATLAB的插值与拟合_第11张图片

好啦,今天的讲解就到这里啦,码字不易,小伙伴们点个赞再走叭

你可能感兴趣的:(matlab做三次拉格朗日插值多项式_MATLAB的插值与拟合)