数值分析-重心拉格朗日插值笔记

重心拉格朗日插值

拉格朗日插值的改进版表达式如下:

(1)利用上式来对常数1插值,点击下方阅读原文查看

以上即为重心拉格朗日插值的表达式,可以看到(3)式的分母与分子非常接近。而对于插权值(重心权),   由其计算公式 可以发现其仅与节点的分布间距有关,而对于一些特殊情况分布的节点,我们可以事前求出其重心权的值

现以一个小栗子来记录重心拉格朗日插值的计算方法,主要是拟合函数在区间的分布,matlab版计算代码如下:

n = 20; % 样本插值点的个数
fun = inline('abs(x)+.5*x-x.^2'); % 真实解答
x= cos(pi*(0:n)'/n) ;  % 生成插值样本点
f = fun(x);
c = [1/2; ones(n-1,1); 1/2].*(-1).^((0:n)'); % c为重心权的具体取值 这里根据第二类 Chebyshev points进行计算
xx = linspace(-1, 1,500)' ; % 生成区域内的插值点
numer = zeros(size(xx)); % numer为插值点的计算结果
denom = zeros(size(xx)) ; % 公式(3)的分母部分
for j =1:n+1 % 对插值点循环 
    xdiff = xx -x(j) ;  % 当前插值点与插值样本点的坐标插值 是一向量
    temp = c(j) ./xdiff; 
    numer = numer + temp*f(j) ; %求和操作 分子部分
    denom = denom + temp; % 叠加分母部分 500个点
end
ff = numer ./denom ;
plot(x,f,'x' ,xx,ff, '-' )
title(sprintf("n = %d",n)) % 设置标题 format title.

其拟合效果如下,实线为拟合结果,散点为插值样本点:

图片
图片

可以看出效果非常不错。同时重心Lagrange插值是向前稳定的,但对于数值分析中常见的等间距节点插值,其插值是病态的,例如,前面记录的利用拉格朗日插值对函数采用等间距节点插值时,在边界处会出现数值振荡,个人感觉Lagrange插值跟传统的Lagrange插值一样,只不过是改变节点间距、引入了重心权的概念在干同样的计算,我们可以将上述的代码进行修改,看看重心Lagrange插值是否能规避该问题:

图片

图片

可以发现,重心Lagrange插值是稳定的,有足够的插值样本点即可对区间内的函数分布进行高精度的描述。

阅读原文

简介:开源CAE技术爱好者,编程爱好者,计算力学,欢迎志同道合的朋友一起交流。欢迎关注微信公众号:挨踢的土木佬
(2)
打赏 喜欢就点个赞支持下吧 喜欢就点个赞支持下吧

声明:本文来自“挨踢的土木佬”,分享链接:https://www.zyxiao.com/p/302038    侵权投诉

网站客服
网站客服
内容投稿 侵权处理
分享本页
返回顶部