[数学建模算法] (23) 插值和拟合:拉格朗日插值
最编程
2024-06-30 14:16:27
...
如果你上过研究生的数值分析课程的话,对这个算法应该不会很陌生。从这节开始,我们将逐一回顾各种插值和拟合方法以及使用Matlab来实现这些算法:
1.拉格朗日插值
1.1插值多项式
用多项式作为研究插值的工具,称为代数插值。其基本问题是:已知函数在区间上个不同点处的函数值,求一个至多 次多项式:
使其在给定点处与同值,即满足插值条件:
称为插值多项式,称为插值节点,简称节点,称为插值区间。从几何上看,次多项式插值就是过个点,作一条多项式曲线近似曲线。
次多项式(1)有个待定系数,由插值条件(2)恰好给出个方程:
记此方程组的系数矩阵为,则:
称为范德蒙特行列式。当互不相同时,此行列式值不为零。因此方程组(3)有唯一解。这表明,只要个节点互不相同,满足插值要求(2)的
插值多项式(1)是唯一的。
插值多项式与被插函数之间的差:
称为截断误差,又称为插值余项。当充分光滑时,
其中,
1.2.拉格朗日插值多项式
实际上比较方便的作法不是解方程(3)求待定系数,而是先构造一组基函数:
是次多项式,满足:
令:
上式称为次插值多项式,由方程(3)解的唯一性,个节点的 次 插值多项式存在唯一。
1.3.用Matlab作Lagrange插值
Matlab中没有现成的插值函数,必须编写一个M文件实现插值。
设个节点数据以数组输入(注意 Matlab 的数组下标从 1 开始),个插值点以数组输入,输出数组为个插值。编写一个名为lagrange.m的M文件:
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
上一篇: 多项式插值法 - 牛顿多项式插值法
下一篇: (2) 分段多项式插值法