在工程和数学应用中,经常有这样一类数据处理问题,在平面上给定一组离散点列,要求一条曲线,把这些点按次序连接起来,称为插值。
曲线拟合是已知一组离散数据,选择一个较简单的函数(如多项式),在一定准则(如最小二乘准则)下,最接近这些数据。
如果已知一个较为复杂的连续函数y(x),x∈[a,b],要求选择一个较简单的函数 ,在一定准则下最接近 y(x ),就是所谓函数逼近。
插值:求过已知有限个数据点的近似函数。
拟合:已知有限个数据点,求近似函数,不要求过已知数据点,只要求在某种意义
下它在这些点上的总偏差最小。
插值和拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二
者的数学方法上是完全不同的。而面对一个实际问题,究竟应该用插值还是拟合,有时
容易确定,有时则并不明显。
阅读https://blog.csdn.net/f2157120/article/details/80371214
低次采用拉格朗日插值法,连续性好;
高次为了避免拉格朗日插值法的龙格现象,采用三次插值法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rQ2Cn6Ir-1577093365011)(http://treblez.me/wp-content/uploads/2019/12/捕获-2.png)]
Lagrange.m
function y0=Lagrange(x,y,x0)
n=length(x);
l=ones(1,n);
for k 1:n
for j=1:n
if j~=k
l(k)=l(k)*(x0-x(j))/(x(k)-x(j));
end
end
end
y0=sum(y.*l)
end
例:
%定义一组离散的数据点
clear;clc; close all
x=[0 1 3 6 7 9 10];
y=[0 12.9 88.3 30.5 10.7 25.6 76.5];
k=1
for x0=0:0.1:10
y0=Lagrange(x,y,x0);
k=k+1;
end
%绘制拉格朗日插值曲线
x0=0:0.1:10;
plot(x0,y0)
hold on
scatter(x,y,'ro')
%显示原始的离散数据点
x=0:10;
y=[2.51 3.30 4.04 4.70 5.22 5.54 5.78 5.40 5.57 5.70 5.80]
xx=linspace(min(x),max(x),200) %在x上下界之间取200个插值节点
pp=csape(x,y,'comlete',[0.8,0.2]);
%分段三次样条插值,边界条件为左右端点的一阶导数为0.8和0.2
yy=ppval(pp,xx)
% ppval函数: 给出三次样条插值pp在x处对应的函数值。
plot(x,y,'ko',xx,yy,'k')
了解并会选择函数rk(x)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mZUAW58q-1577093365014)(http://treblez.me/wp-content/uploads/2019/12/捕获-3.png)]
x0=1990:7;
y0=[70 122 144 152 174 196 202];
plot(x0,y0,'*')
%根据图像选定y=ax+b作为拟合曲线
a=plotfit(x0,y0,1)
y97=polyval(a,1997)
y98=polyval(a,1998)
目标函数由若干个函数的平方和构成,把极小化这类函数的问题称为最小二乘优化问题。
推荐扩展阅读:司守奎 《数学建模算法与应用》 第五章,插值与拟合