matlab多项式的拟合与插值例题_MATLAB的插值与拟合

本文介绍了MATLAB中的三种插值方法:分段线性插值(interp1)、三次样条插值(spline)和拉格朗日插值。还探讨了多项式拟合(polyfit),用于根据已知点求出曲线方程。通过实例展示了如何使用这些函数进行插值和拟合操作。
摘要由CSDN通过智能技术生成

一.插值

什么是插值

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

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

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

0cfa1890cd993e777a7f679e1cc23478.png
欲哭无泪

这是啥意思?

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

举个例子:

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

 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')

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

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('拉格朗日插值')

9f6755b492584f0b828e4eed7b84c8ab.png

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

f4eaa5802a43f2e56c1d04f5acf41c75.png

第一个命令interp1

1.分段线性插值(interp1)

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

调用格式如下:

yi=interp1(x,y,xi)

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

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

3a119efbceefbd297a334a90f2e70c4e.png

c6c9a9b516918daa698f05b069247c13.png

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

d3a3f5e43798dc9d9cb20f97c4648aca.png

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

2.三次样条插值(spline)

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

c237cff49954e6dbeedf756bde083ba6.png
百度百科定义

调用格式

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)

88c7388b53ed642049f20a62b0a7dae6.png
三次样条插值

3.拉格朗日插值

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

bdfa295ca73fa966357817e181bf138c.png
图来源于网络,侵删

在进行拉格朗日插值之前,我们需要定义一个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)

bad9fca9f97e8aef207fcc506fb5a02f.png
拉格朗日插值

二.拟合

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

多项式拟合(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)

91850661b0b458bc721ec4411a456bfa.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值