1.7 分段插值法
分段插值
2012-2013(1)专业课程实践论文分段线性插值徐琼希,0818180205,R数学08-2班所谓分段线性插值就是通过插值点用折线段连接起来逼近f (x )。
设已知节点a=x 0<x 1<…<x n =b 上的函数值f 0,f 1,…,f n ,求一折线函数满足:1o ],,[)(b a C x I h ∈2o k h f x I =)( ),,1,0(n k =,3o )(x I h 在每个小区间[k x ,1+k x ]上是线性函数。
则称)(x I h 为分段线性插值函数。
模型一:由定义可知)(x I h 在每个小区间[k x ,1+k x ]上可表示为)(x I h =1111++++--+--k kk k k k k k f x x x x f x x x x )(1+≤≤k k x x x 模型二:首先确定间隔序列k ,使得:1+≤≤k k x x x第二个量是局部变量s ,其定义为 :k x x s -=最后一个量是一阶均差kk k k k x x y y --=++11δ 则插值基函数可表示为 k k k k k k x x y y x x y x L ---+=++11)()(k k s y δ+=.开始输入n,xi,yi,xNi=n?YS=ps[i-1].y*(x-ps[i].x)/(ps[i-1].x-ps[i].x)+ps[i].y*(x-ps[i-1].x)/(ps[i].x-ps[i-1].x)N i=n?Y输出Si(x)结束#include <stdio.h>#define N 100struct POINT{double x;double y;};void main(){int i,n;double x,S;struct POINT ps[N];printf("please input n,0<=n<=100: \n");scanf("%d",&n);printf("please input xi,yi: \n");for(i=0;i<n;i++){scanf("%lf,%lf",&ps[i].x,&ps[i].y);}printf("Now input x:\n");scanf("%lf",&x);printf("please input i:\n");scanf("%d",&i);S=ps[i-1].y*(x-ps[i].x)/(ps[i-1].x-ps[i].x)+ ps[i].y*(x-ps[i-1].x)/(ps[i].x-ps[i-1].x);printf("S%d(%lf)=%lf \n",i,x,S);}例1.给定函数y=f(x)的函数表,结点个数n=5,分3段,求x=0.47的函数值。
《分段低次插值法》课件
分段二次插值适用于需要更高精度插值的情况,但计 算相对复杂。
分段三次插值
三次插值
三次插值使用三次多项式进行插值,比二次插值 更为精确。
分段三次插值
分段三次插值是将数据点分成若干段,每一段使 用三次多项式进行插值。
适用场景
分段三次插值适用于需要更高精度插值的情况, 但计算相对复杂。
04
分段低次插值法的优势与局限性
分段低次插值法
• 引言 • 分段低次插值法的基本原理 • 分段低次插值法的数学模型 • 分段低次插值法的优势与局限性
• 分段低次插值法的应用实例 • 分段低次插值法的未来展望
01
引言
插值法的定义
插值法是一种数学方法,用于通过已知的离散数据点来构造一个连续函数,以便在 整个定义域内进行预测或逼近。
分段低次插值法可以与机器学习算法结合,利用插值结果作 为特征输入,提高机器学习模型的预测精度。
与优化算法结合,通过优化算法对插值结果进行优化,提高 插值的精度和效率。
在大数据处理中的应用前景
在大数据时代,分段低次插值法可以应用于大规模数据的插值处理,提高数据处 理效率。
在数据挖掘和机器学习领域,分段低次插值法可以作为特征提取和数据预处理的 一种有效方法。
多项式插值
使用多项式函数逼近已知数据点,通 过求解多项式来找到未知点的坐标。
分段低次插值的定义
分段低次插值法是一种数学方法,它 将整个数据集分成若干个小的分段, 并在每个分段上使用低次多项式进行 插值。
分段低次插值法的特点是每个分段上 的多项式次数较低,从而减少了计算 复杂度,提高了计算效率。
分段低次插值的实现方式
分段低次插值法的提出,为解决实际 问题提供了一种新的思路和方法,具 有重要的理论和应用价值。
《数值分析》课程教学大纲
拉格朗日插值公式插值余项牛顿插值公式埃尔米特插值 数值分析课程教学大纲(Numerica1Ana1ysis)学时数: 其中: 学分数:48实验学时:4课外学时:O3适用专业:计算机科学与技术 一、课程的性质、目的和任务本课程是计算机专业学科的基础课程。
它利用计算机使学生将已学的数学和程序设计知识等有关知识有机地结合起来,并应用它解决实际问题。
其主要任务是:介绍数值理论、函数逼近、数值微积分、非线性方程求根、线性代数方程组、特征值问题的常用数值法,要求学生能够评价各种算法的优劣,使用高级语言描述学过的算法并上机调试。
这对于学生从事数值软件的研制与维护是十分有益的。
二、课程教学的基本要求通过本课程的学习,学生应充分理解数值方法的特点,熟练掌握使用各种数值方法解决数学问题的技巧,为今后结合计算机的应用而解决实际问题打下坚实的基础。
三、课程的教学内容、重点和难点引论(4学时)教学内容:引论A 算法B 误差基本要求:了解掌握误差的基本概念,理解数值运算中误差的来源,并掌握误差分析的方法与原则。
重点和难点:误差分析。
第1章插值方法(8学时)I 问题的提法 2 3 5 61.7 分段插值法基本要求:掌握1agrange 插值与牛顿插值这两种形式不同而实质一致的插值的概念及余项估计;掌握分段低次插值及余项估计。
了解这几种插值的联系及区别并能熟练地进行运算。
J⅛,.*拉格朗日插值,牛顿插值。
难点:拉格朗日插值,余项估计。
第2章数值积分(8学时)教学内容:2.1机械求积2.2 牛顿•柯特斯公式 2.3 龙贝格算法 2.4 高斯公式 2.5 数值微分基本要求:了解数值积分的基本思想和代数精度的概念,掌握插值型求积公式与高斯型求积公式,理解等距节点的牛顿•柯特斯公式及余项估计。
掌握数值微分的基本思想与运算。
重点:牛顿-柯特斯求积公式。
难点:龙贝格求积算法,高斯求积公式。
第3章常微分方程的差分方法(4学时)教学内容:3.1欧拉方法3.2 改进的欧拉方法 3.3 龙格-库塔方法基本要求:掌握欧拉方法,特别是改进的欧拉方法的基本思想和计算过程;了解龙格-库塔方法。
插值方法
格朗日(Lagrange)插值。
2.n=2
线 性 插 值 只 利 用 两 对 值 (x0,y0) 及 (x1,y1) 求 得
y=f(x)的近似值,误差较大。
p2(x0)=y0,p2(x1)=y1,p2(x2)=y2
p2(x)是x的二次函数,称为二次插值多项式。
第1章 插值方法
插值法是一种古老的数学方法。早在 1000多年前,我国历法上已经记载了应用一 次插值和二次插值的实例。 拉格朗日(Lagrange)、牛顿 (Newton)、埃特金(Aitken)分别给出了 不同的解决方法。
1.1 拉格朗日插值公式 1.2 牛顿插值公式 1.3 埃特金插值公式 1.4 存在惟一性定理 1.5 插值余项 1.6 分段三次埃尔米特插值 1.7 三次样条插值 1.8 应用实例
[a,b],有与x有关的ξ(a<ξ<b)存在, 使得
其中ω(x)=(x-x0)(x-x1)…(x-xn)。
[例5] 设f(x)=lnx, 并假定已给出值表试近 似计算ln(0.6)的值,并指出精度。 值表 0.4 -0.916291
x lnx
0.5 -0.693147
0.7 -0.356675
0.8 -0.223144
(x∈[-5,5])。
取等距节点xi=-5+i(i=0,1,…,10), 试建立插值多项式 L10(x), 并作图形, 观察L10(x)对f(x)的逼近效果。
图1-3 例6的图形
1.6 分段三次埃尔米特插值
为了避免 Runge现象的发生 , 我们很自 然地会想到把区间[-5, 5]等分为10个小区 间, 在每一个小区间内应用低次插值。但由 于每个小区间只有两个端点(插值节点) , 按照我们已知的方法, 得到的将是一个分段 线性插值函数。
分段线性插值
分段线性插值分段线性插值是一种在机器学习、数学、信号处理等领域中广泛应用的方法。
分段线性插值的主要目的是为漏洞、持续时间等数据展示提供更好的视觉效果,同时也可以使数据更容易进行处理。
在分段线性插值中,每一段数据都可以看作是一条直线段。
通过在相邻数据点之间插入一条直线来实现插值。
每个数据点或任意数段可以称为一个插值区间,插值区间内部的数据点都采用一条直线进行插值,直线的斜率由插值区间上下数据点构成。
例如:在一个区间(x1,y1)和(x2,y2)之间进行插值,其中x1<x<x2。
那么,我们可以使用线性公式y = mx + b来估计数据点的y值。
方程中m是插值区间的斜率,通过公式m = (y2-y1)/(x2-x1)计算。
而b是在插值区间x1和x2之间的截距,通过公式b = y1 - m x1计算。
最后,我们就可以通过已知的数据点,估计同一段中任意点的y值。
下面我们通过一个实例来进一步解释分段线性插值的应用。
比如我们有一组工作时间数据如下:|年份| 工作时间 ||----|----|| 2010 | 6.5 || 2011 | 7.0 || 2013 | 7.5 || 2015 | 8.0 |目前,我们需要在2012年估计工作时间。
首先,我们需要找到分段线性插值的区间。
2012年的数据点在2011年和2013年之间。
因此,我们可以使用2011年和2013年之间的数据点进行插值。
然后,通过计算斜率来确定m和b的值。
斜率可以通过公式m = (y2-y1)/(x2-x1)来计算。
2011年和2013年的工作时间分别是7.0和7.5,年份分别是2011和2013。
因此,斜率为:(7.5-7.0)/(2013年-2011年)= 0.25/2 = 0.125插值区间的y截距b可以通过公式b = y1 - m x1来计算。
这使得我们可以计算出截距:接下来,我们就可以使用斜率和截距来计算2012年的工作时间,这将是我们所需的数据点的估计值:y = mx + b= 0.125 * 2012 + 258.375= 259.875。
数值计算方法 拉格朗日插值、分段插值 - 拉格朗日插值、分段插值
4!
(x x j ),
j0
[0.10, 0.30]
R3 (0.20)
e 24
(0.20
0.10)(0.20
0.15)(0.20
0.25)(0.20
0.30)
0.000001 e 106
插值多项式计算值 f (0.20) 0.818730 实际更精确的值为 f (0.20) 0.8187308 与上面讨论的余项表明6位的精度是相符的。
其截断误差为
R3( x)
M3 6
(x
x0 )( x
x1 )( x
x2 )
R2
其中 M3
(0.3367) sin 0.3367
max f ( x)
x0 x x2
1
L2(0.3367) 6
cos x0 0.828
(0.828)(0.0167)(0.033)(
0.0233)
0.178
10
用抛物插值计算sin 0.3367时,由公式(2.5)得
sin 0.3367
y0
(x ( x0
x1 )( x x2 ) x1 )( x0 x2 )
y1
(x ( x1
x0 x0
)( )(
x x2 ) x1 x2 )
y2
(x ( x2
x0 x0
)( )(
x x1 ) x2 x1 )
L2(0.3367) 30374
6
拉格朗日插值问题
课后练习
设函数 f (x) ex,已知下列数据点:
x0 y0
0.10 0.904837
,
x1 y1
0.15 ,
0.860708
x2 y2
插值方法
一、插值思想简介
二、一维插值 三、二维插值 四、利用matlab进行插值计算 五、建模实例
一、插值思想简介
插值:最初来源于天体计算的需要,比如,人们得到了
若干观测值,即某个星球在若干已知时刻的位置,需要计 算星球在另一些时刻的位置。所谓插值,就是在若干已知 的函数值之间插入计算一些未知的函数值。
n=3时 n=9时 n=15时
二、分段多项式插值 由于高次插值多项式的振荡缺陷,促使人们转而寻求简单的低 次多形式插值。分段插值的基本思想是将插值区间划分为若干 个小区间,然后在每个小区间上做满足一定条件的低阶插值。 1、分段线性插值 设函数f(x)在n+1个节点x0,x1,…,xn处的函数值已知, 为 y0,y1,…,yn 。 要求一个分段( 共 n段)线性函数q(x),使其满足: q(xi)=yi, i=0,1,…,n. 这n+1个点 x0,x1,…,xn 称为节点,q(x) 称为插值基函数 y
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊插值方法啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊插值方法在工程实践和科学实验中常常需要从一组实验观测数据揭示自变量x与因变量y之间的关系一般可以用一个近似的函数关系式
分段线性插值
摘要用函数来表示变量间的数量关系广泛应用于各学科领域,但是在实际问题中,往往是通过实验、观测以及计算等方法,得到的是函数在一些点上的函数值。
如何通过这些离散数据找到函数的一个满足精度要求且便于使用的近似表达式,是经常遇到的问题。
对于这类问题我们解决的方法为插值法,而最常用也最简单的插值方法就是多项式插值。
当然用插值法得到的近似表达式必须满足插值条件即假设给定了n+1个点的自变量的值以及函数值,近似函数必须要过这n+1(x)通个点。
多项式插值,从几何角度看,就是寻求n次代数曲线y=Pn过n+1个点作为f(x)的近似。
但是随着插值节点个数的增加,高次插值多项式的近似效果并不理想。
根据大量实验得出,在进行高次多项式插值时,会出现龙格现象。
龙格(Runge)现象即当n趋于无穷大时,x在某一邻域内,f(x)收敛,而在这个区域外f(x)发散。
因此,为了解决这样的一个问题,我们可以通过缩小插值区间的办法达到减小误差的目的,所以本实验将针对低次分段插值多项式来做具体的讨论和学习。
关键词:龙格现象分段差值1、实验目的1)通过对分段线性插值算法程序的编写,提高自己编写程序的能力2)体会分段线性插值是如何消除龙格现象的。
3)用实验报告的形式展现,提高自己在写论文方面的能力2、算法理论设在节点处的函数值为,i=0,1,,n。
为了提高近似程度,可以考虑用分段线性插值来逼近原函数,这时的插值函数为分段函数:在区间上的线性函数为误差为:易见,是平面上以点为节点的折线,有如下的特点:1.在上为次数不超过一次的多项式;2.;3.;如果,由线性插值的误差公式得到令,则有关于整体误差:可以按如下方式考虑,若记则对任一都有于是,当时,说明分段线性插值收敛于。
3、数值算例已知点坐标如下表所示:xiyi用分段线性插值法,求解当x为时,对应y的值解:具体程序如下所示:#include ""float Fdline(float x[],float y[],float x1,int len){int i=0;float s=0;for(i=0;i<len-1;i++){if(x1>=x[i] && x1<x[i+1])break;}s=(x1-x[i])/(x[i-1]-x[i])*y[i-1]+(x1-x[i-1])/(x[i]-x[i-1])* y[i];return s;}float Fdline(float x[],float y[],float x1,int len);void main(){float x[]={,,,,};float y[]={,,,,};int len=sizeof(x)/sizeof(x[0]);float x1=0;float s=0;printf("请输入要求解的x1的值:\n");scanf("%f",&x1);s=Fdline(x,y,x1,len);printf("经过分段三次Hermite插值的结果为:\n");printf("%f\n",s);}运行结果:5、对结果进行分析根据分段线性插值的原理,可以看出分段线性插值虽然有很好的收敛性质,但却不是光滑的,所以线性插值的结果和实际的结果差距较大。
数值分析分段低次插值
二次插值
01
二次插值是通过构造一个二次多项式在两个已知数据点之间,并利用这个多项 式来估计其他点的值。
02
二次插值的公式为:$y = a(x - x_0)(x - x_1) + b(x - x_0) + c$,其中$a, b, c$是 待求解的系数,$(x_0, y_0)$和$(x_1, y_1)$是已知数据点,$x$是待估计的点的横 坐标。
分段低次插值的缺点
逼近精度有限
由于插值次数较低,分段低次插值在逼近复杂函数时的精度可能有 限,可能无法满足某些高精度应用的需求。
对数据敏感
对于数据中的噪声和异常值,分段低次插值方法可能较为敏感,可 能导致插值结果失真。
连续性不足
由于分段处理的方式,分段低次插值可能无法保证函数在分段点处的 连续性,这在某些应用中可能是一个问题。
分段低次插值的基本步骤
数据分段
将给定数据点按照某种规则进 行分段,每一段对应一个低次
多项式。
确定多项式
对于每一段数据,选择一个低 次多项式进行插值。
求解插值多项式
利用给定数据点和选择的低次 多项式,求解插值多项式的系 数。
逼近未知函数
将所有分段上的插值多项式组 合起来,形成对未知函数的逼在求解微分方程中的应用
总结词
分段低次插值在求解微分方程中能够提 供稳定和高效的数值解。
VS
详细描述
在求解微分方程时,分段低次插值可以作 为数值方法的基底,提供稳定和高效的数 值解。这种方法在处理非线性微分方程时 具有较好的适应性,能够有效地解决微分 方程的数值求解问题。
06
分段低次插值的优缺点和未来发展方
02
分段低次插值的基本原理
分段低次插值的数学模型
插值专业知识讲座
(t) f (t) L2 (t) k(x)(t x0 )(t x1)(t x2 ),
易知,x0, x1, x2, x为Ψ(t)旳4个零点,在4个点两两构成旳区
间上,应用Rolle定理,然后再反复应用Rolle定理即得证。
例1.1 给定sin11°=0.190809,sin12°=0.207912,求线性插 值,并计算sin11°30'和sin10°30' 。
2
2
例1.2 给定sin11°=0.190809,sin12°=0.207912, sin13°=0.224951,构造二次插值,并计算 sin11°30′。
解 x0= 11, x1= 12, x2= 13, y0= 0.190809, y1= 0.207912,y2= 0.224951,
L2
(x)
l0(x) = A (x - x1)(x - x2)。
由条件:l0(x0) = 1,得
A
1
,
(x0 x1)(x0 x2 )
l0
(x)
(x (x0
x1)(x x2 ) x1)(x0 x2 )
.
同理可得,
l1 ( x)
(x ( x1
x0 x0
)(x x2 ) )(x1 x2 )
,
l2 (x)
)
(x
x0
)( x
x1) (1.3)
证明 因为L(xi)= f(xi),i=0,1,所以,R1(x0)=R1(x1)=0, 即 x0,x1为R1(x)旳两个根。所以,可设R1(x)为
可设
R1(x) = k(x)(x-x0)(x-x1).
固定任一 x,作辅助函数,令
(t) f (t) L1(t) k(x)(t x0 )(t x1),
分段线性插值法求插值-Read
分段线性插值法求插值摘要本文根据题目的要求,利用分段线性插值法对采样点和样本值进行插值计算。
为了更好的评断模型的优化性,我们同时采用了最近点插值,3次多项式插值和3次样条插值法来处理同样的问题,作为分段线性插值方法的参考模型。
根据插值函数计算区间内任意取样点的函数值。
最后再利用所得函数值画出相应的函数图象,并与原函数g(x)的图象进行对比。
通过对本题四个问题的解答,并观察对比函数图象我们得到了如下两个重要的结论:(1)在同一取样点,利用不同的插值方法可能会得到不同的函数值,所得函数值与原函数的标准函数值的误差大小决定了该插值方法的“好坏”。
而最优化的插值方法往往依赖于被插值函数。
本题中,在函数式g(x)对应X,Y的条件下,可以根据对比函数图象明显看出:分段线性插值方法和3次多项式插值方法优于3次样条插值和最近点插值。
(2)在插值计算中,取样点的多少往往会影响所得插值函数优化程度。
一般情况下,取样点越多所得插值函数越优化,对应的函数值与标准函数值越接近。
通过对本题四个问题相应对比函数图象的观察,我们也明显看出:在区间[-6 6]内,当取样点为21,41时,分段线性插值法进行插值计算得到的函数图象基本上与原函数g(x)吻合。
AbstractIn this article ,we use piecewise linear interpolation to compute the sampling point and sample value according to the request of question. In order to judge the model's quality in a better way, we use nearest interpolation, cubic interpolation and spline interpolation regarded as the model reference of piecewise linear interpolation to deal the question in the same way at the same time. Then draw the function picture by function value of any sampling point in the interval of interpolating function. Finally, we make a comparison between the original function g(x) image and the interpolating function image.At the base of analysing the final result and comparing the constrastive image . We can summarize two items of important conclusion as follows:(1)At the same sampling point , different interpolating method canobtain different function value. Usually , the optimizationalgorithm depends on the size of error between the objectfunction value .(2) When processing interpolating compute , the number of thesampling point will make an effect on the quality of a model.Commonly, the more multitudinous the sampling points wereused ,the more precise the interpolation model will be .目录一.问题的重述 (1)二.问题的分析 (1)三.问题的假设 (1)四.分段线性插值原理 (2)五.问题的求解 (2)六.插值方法的优劣性分析 (5)附录 (6)一.问题的重述已知211)(xx g +=,66≤≤-x 用分段线性插值法求插值,绘出插值结果图形,并观察插值误差。
分段线性插值法
例2. 给出数据表如下:
Xi yi 19.1 76.3 25 77.8 30.1 79.25 36 80.8 40 82.35 15.1 83.9 50 85.1
生成插值函数及其图形,并求当x = 27.1时的函数值。
解:In[1]:= data={{19.1,76.3},{25,77.8},{30.1,79.25},{36,80.8},{ 40,82.35},{45.1,83.9},{50,85.1}};
采用分段插值是一种办法。
一、分段线性插值的概念
所谓分段线性插值就是通过插值点用折线连 接起来逼近 f ( x )
设已知节点a x0 x1 xn b 上的函数值为: y0 , y1 yn 构造插值函数 ( x) 使其满足: (1) ( xi ) yi (i 0,1,2,..., n)
g1=ListPlot[Table[A],Prolog->AbsolutePointSize[18]];
Interpolation[A,InterpolationOrder->3] g2=Plot[%[x],{x,0,0.8}] Show[g1,g2] N[%%%[0.12],20] N[%%%%[0.72],20] N[f[0.12],20] N[f[0.72],20]
i 1 ( x x ) i j f ( x ) L2 ( x ) yk j i 1 ( x k x i ) k i 1 jk
i 1
这种分段的低次插值叫分段二次插值,在几何 上就是用分段抛物线代替 y=f(x) , 故分段二次 插值又为分段抛物插值。
2. 插值函数
函数InterPolation通过在数据点之间进行多项式 插值,构造一个近似函数(分段插值函数) , 该函数通过已知的数据点,其调用格式如下:
计算方法 4 分段插值
9
第二章,综合习题1
例:给定 f ( x ) ln x,的函数值表如下, 取 0.5 及 0.6 两点,分别用拉格朗日和牛顿插 值计算 ln 0.54 的近似值,并估计误差限。
x 0.4 lnx -0.916291
0.5 -0.693147
计算方法(2016/2017 第一学期)
西南科技大学
制造科学与工程学院
4
构造方法
构造分段线性插值基函数,再作线性组合 设,l0 ( x ),l1 ( x ), ln ( x ) 为所求基函数, 满足: x0 x1 l0 ( x ) l1 ( x ) ln ( x ) 1 1 1 0 0 0 xn 0 0 0
0.6 -0.510826
0.7 -0.356675
计算方法(2016/2017 第一学期)
西南科技大学
制造科学与工程学院
10
第二章,综合习题2
1 例:设函数 f ( x ) ,试写出它在插值节点组 2 1 x 1 -1, 0, 1 上的插值多项式,并用它计算 f ( x ) 3 处的值。
西南科技大学
制造科学与工程学院
1
分段插值法
高次插值的龙格现象
换句话说,适当地提高插值多项式的次数,有 可能提高计算结果的准确程度,但并非插值多项式 的次数越高越好。当插值节点增多时,不能保证非
节点处的插值精度得到改善,有时反而误差更大。
Rn ( x )
计算方法(2016/2017 第一学期)
f
w x n 1 n 1 !
n 1
制造科学与工程学院
西南科技大学
分段线性插值
考察函数
f
(x)
1 1 x2
,
5 x5
右图给出了 P5 (x) 和 P10 (x) 的图像,当n 增大时, Pn (x) 在两端 会发出激烈的振荡
,这就是所谓龙格现
象。该现象表明,在
大范围内使用高次
插值,逼近的效果往
往是不理想的
-5
y f(x)
P5(x) 0
P10(x) 5x
另外,从舍入误差来看,高次插值误差的传播 也较为严重,在一个节点上产生的舍入误差会在计 算中不断扩大,并传播到其它节点上。因此,次数 太高的高次插值多项式并不实用,因为节点数增加 时,计算量增大了,但插值函数的精度并未提高。 为克服在区间上进行高次插值所造成的龙格现象, 采用分段插值的方法,将插值区间分成若干个小的 区间,在每个小区间进行线性插值,然后相互连接 ,用连接相邻节点的折线逼近被插函数,这种把插 值区间分段的方法就是分段线性插值法。
f
(xk
)
x xk xk1
f (xk1 )
( xk x xk1 )
在几何上就是用折线
y
y=f(x)
替代曲线,如右图所示
若用插值基函数表示,
则在a,b上
0
x0
x1
x2
xn x
n
S(x) li (x) f (xi ) ( a x b)
i0
其中
x
xi
xi1 xi1
,
xi1 x xi
上有误差估计式
f (x) S(x) hi2 max f (x) 8 xi x xi1
其中 hi xi1 xi
例5.19 已知f(x)在四个节点上的函数值如下表所示
x i 30 45 60 90
分段线性插值
1.4分段插值 一.分段线性插值即用折线代替曲线。
设f (x )连续 优点:计算简单,适用于光滑性要求不高的插值问题。
缺点:分段插值函数只能保证连续性,失去了原函数的光滑性。
二.分段三次(Hermite )插值不少实际插值问题不仅要求函数值相等,而且还要求导数值也相等。
这就导致下面的Hermite 插值。
并满足: 从而由此条件可得: 类似可得的表达式。
下面是matlab 函数pieceline (x ,y ,u )实现分段线性插值多项式的计算。
function v=pline(x,y,u) delta=diff(y)./diff(x); n=length(x); k=ones(size(u)); for j=2:n-1k(x(j)<=u)=j; ends=u-x(k);v=y(k)+s.*delta(k);在每个区间 上,用1阶多项式 (直线) 逼近 f (x):],[1+i i x x 11111)()(++++--+--=≈i ii ii i i i y x x x x y x x x x x P x f ],[for 1+∈i i x x x 记 易证:当 ||max 1i i x x h -=+0→h )()(1x f x P h →一致给定000,...,;,...,;,...,,n n n x x y y y y ''在 上利用两端点的 y 及 y' 构造3次Hermite 函数。
],[1+i i x x 31111()()()()()i i i i i i i i S x y x y x y x y x ααββ++++=+++''3311'331 1.(), (),(), ()i i i i i i i i S x y S x y S x y S x y ++++===='''1111111111111()1, ()0, ()0, ()0,()0, ()1, ()0, ()0,()0, ()0, ()1, ()0,()0, ()i i i i i i i i i i i i i i i i i i i i i i i i i i i i x x x x x x x x x x x x x x ααββααββααββαα+++++++++++++==============''''''1110, ()0, () 1.i i i i x x ββ+++==''1111122()12,2()().i i i i i i i i i i ii x x x x x x x x x x x x x x x x αβ+++++--⎛⎫⎛⎫=+ ⎪ ⎪--⎝⎭⎝⎭-⎛⎫=- ⎪-⎝⎭程序中,pline是分段线性插值函数;输入参数x——给定的数据点的横坐标所组成的向量Y——给定的数据点的纵坐标所组成的向量U——需要计算的点所组成的向量输出参数v——u所对应的分段线性插值多项式的值,即v(i)=s1(u(i)),其中s1是未来满足分段线性插值多项式Detla是计算差商的最后计算s、v。
分段低次插值及应用
分段低次插值及应用分段低次插值是指将一段区间内的已知数据点用低次多项式来逼近,从而得到整个区间内的近似函数。
这种插值方法在实际应用中非常广泛,比如数值计算、图像处理、信号处理等多个领域。
分段低次插值的步骤如下:1. 将已知数据点按照顺序排列。
2. 将整个插值区间分为多个小区间,每个小区间内有若干个已知数据点。
3. 在每个小区间内,通过已知数据点构造低次多项式,如线性函数、二次函数等。
4. 在每个小区间内用构造出的多项式来逼近数据点。
这种插值方法的主要优点是简单易懂,计算速度快。
然而,低次多项式可能无法完美拟合数据点,导致插值函数和实际函数存在误差。
因此,分段低次插值常常作为一种近似方法,用来求解一些不太复杂的问题。
分段低次插值在实际应用中具有广泛的应用,以下是一些常见的应用场景:1. 数据处理:在数据处理中,我们常常需要用已知数据点来估计其他位置上的数据。
分段低次插值可以通过已知数据点来构造近似函数,并用它来预测其他位置上的数据。
2. 图像处理:在图像处理中,我们经常需要对图像进行去噪、平滑或者边缘检测。
分段低次插值可以用来对图像进行插值处理,从而得到平滑的图像或者进行图像边缘检测。
3. 信号处理:在信号处理中,我们常常需要从离散信号中还原连续信号。
分段低次插值可以用来从已知的离散信号点中还原连续信号。
4. 数值计算:在数值计算中,我们常常需要对函数进行数值积分或者微分。
分段低次插值可以用来近似替代函数,从而进行数值积分或者微分运算。
5. 数据可视化:在数据可视化中,我们常常需要将数据以图形的形式展示。
分段低次插值可以用来将数据以平滑的曲线或者曲面的形式展示出来,更好地展示数据的变化趋势。
总之,分段低次插值作为一种近似方法,在实际应用中发挥着重要的作用。
它可以用来处理各种类型的数据,并提供快速、简单的解决方案。
当然,对于更复杂的问题,可能需要使用更高阶的插值方法来获得更精确的结果。
分段线性插值法
《数值分析》实验报告 实验序号:实验五 实验名称: 分段线性插值法1、 实验目的:随着插值节点的增加,插值多项式的插值多项式的次数也增加,而对于高次的插值容易带来剧烈的震荡,带来数值的不稳定(Runge 现象)。
为了既要增加插值的节点,减小插值的区间,以便更好的逼近插值函数,又要不增加插值多项式的次数以减少误差,可采用分段线性插值。
2、 实验内容:求一个函数ϕ(x )用来近似函数f (x ),用分段线性插值的方法来求解近似函数ϕ(x )并画出近似函数图像及原函数图像。
设在区间[a,b]上,给定n+1个插值节点b x x x x a n =<<<<=...210和相应的函数值n y y y ,...,,10,求一个插值函数)(x ϕ,满足以下条件:(1)),...,2,1,0()(n j y x j j ==ϕ; (2) )(x ϕ在每一个小区间[1,+j j x x ]上是线性函数。
对于给定函数11-,2511)(2≤≤+=x x x f 。
在区间[]11-,上画出f (x )和分段线性插值函数)(x ϕ的函数图像。
1. 分段线性插值的算法思想:分段线性插值需要在每个插值节点上构造分段线性插值基函数)(x l j ,然后再作它们的线性组合。
分段线性插值基函数的特点是在对应的插值节点上函数值取 1,其它节点上函数值取0。
插值基函数如下:设在节点a ≤x0<x1<…≤b=f(xi),(i=0,1,2,…,n)求折线函数L (x )满足:(1) L(x )∈C[a,b](2) L(x[i]=y[i])(3) L(x)在每个小区间(x[i],x[i+1])上是线性插值函数¢(x )叫做区间[a,b]上对数据(x[j],y[j])(j=0,1,2,…,n)的分段区间函数。
利用一介拉格朗日函数,直接得到线性插值函数为:L(x0)=(x-x[1])/x[0]-x[1];(x[0]≤x ≤x[1])L(x0)=0(x[1]≤x ≤x[n])分段线性方程的表达式:¢(x )=∑(j=0,..,n)y[j]*L[j](x);3、实验代码:// LDlg.cpp : implementation file//#include "stdafx.h"#include "L.h"#include "LDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MSG_MAP(CAboutDlg)// No message handlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////// // CLDlg dialogCLDlg::CLDlg(CWnd* pParent /*=NULL*/): CDialog(CLDlg::IDD, pParent){//{{AFX_DATA_INIT(CLDlg)// NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CLDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CLDlg)// NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CLDlg, CDialog)//{{AFX_MSG_MAP(CLDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_LARGRI, OnLargri)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)ON_BN_CLICKED(IDC_HERMITE, OnHermite)//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////// // CLDlg message handlersBOOL CLDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization herereturn TRUE; // return TRUE unless you set the focus to a control}void CLDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework.void CLDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}// The system calls this to obtain the cursor to display while the user drags // the minimized window.HCURSOR CLDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}void CLDlg::OnOK(){int x00=300,y00=350,i,j;double x;CDC *pDC=GetDC();pDC->SetMapMode(MM_LOMETRIC);pDC->SetViewportOrg(x00,y00);//画坐标轴与原函数for(i=-700; i<=700; i++){pDC->SetPixel(i,0,RGB(0,0,0));pDC->SetPixel(0,i,RGB(0,0,0));}for(x=-1; x<=1; x+=0.001){double j=400.0/(1+25*x*x);pDC->SetPixel(x*500,j,RGB(255,0,0));}pDC->TextOut(-30,-10,"0");pDC->TextOut(-30,430,"1");pDC->TextOut(490,-10,"1");pDC->TextOut(-490,-10,"-1");pDC->MoveTo(-10,680); //x箭头pDC->LineTo(0,700);pDC->MoveTo(0,700);pDC->LineTo(10,680);pDC->MoveTo(680,10); //y箭头pDC->LineTo(700,0);pDC->MoveTo(700,0);pDC->LineTo(680,-10);pDC->TextOut(-30,700,"y");pDC->TextOut(700,-10,"x");}void CLDlg::OnLargri(){int x00=300,y00=350,i,j;double x;CDC *pDC=GetDC();pDC->SetMapMode(MM_LOMETRIC);pDC->SetViewportOrg(x00,y00);//画坐标轴for(i=-700; i<=700; i++){pDC->SetPixel(i,0,RGB(0,0,0));pDC->SetPixel(0,i,RGB(0,0,0));}double yx[]={-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1};pDC->TextOut(-30,-10,"0");pDC->TextOut(-30,430,"1");pDC->TextOut(490,-10,"1");pDC->TextOut(-490,-10,"-1");pDC->MoveTo(-10,680); //x箭头pDC->LineTo(0,700);pDC->MoveTo(0,700);pDC->LineTo(10,680);pDC->MoveTo(680,10); //y箭头pDC->LineTo(700,0);pDC->MoveTo(700,0);pDC->LineTo(680,-10);pDC->TextOut(-30,700,"y");pDC->TextOut(700,-10,"x");// 拉格朗日差值的函数double yy[12],lx[12],ly[12];double l_fenzi[12],l_fenmu[12];double l_x,l_y;for(i=0; i<=10; i++){yy[i]=1.0/(1+25*yx[i]*yx[i]);}for(i=0; i<=10; i++){l_fenmu[i]=1.0;for(j=0; j<=10; j++){if(i!=j)l_fenmu[i]=l_fenmu[i]*(yx[i]-yx[j]);}}double qq,pp;for(qq=-1; qq<=1; qq+=0.0003){for(i=0; i<=10; i++){l_fenzi[i]=1.0;for(j=0; j<=10; j++){if(i!=j)l_fenzi[i]=l_fenzi[i]*(qq-yx[j]);}}pp=0;for(i=0; i<=11; i++){pp=pp+1.0/(1+25*yx[i]*yx[i])*l_fenzi[i]/l_fenmu[i];}pDC->SetPixel(qq*500,pp*390+5,RGB(132,112,225));}}void CLDlg::OnButton2(){int x00=300,y00=350,i,j;double x;CDC *pDC=GetDC();pDC->SetMapMode(MM_LOMETRIC);pDC->SetViewportOrg(x00,y00);//画坐标轴与原函数for(i=-700; i<=700; i++){pDC->SetPixel(i,0,RGB(0,0,0));pDC->SetPixel(0,i,RGB(0,0,0));}double yx[]={-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1};double yy[14];for(i=0; i<=10; i++){yy[i]=1.0/(1+25*yx[i]*yx[i]);}pDC->TextOut(-30,-10,"0");pDC->TextOut(-30,430,"1");pDC->TextOut(490,-10,"1");pDC->TextOut(-490,-10,"-1");pDC->MoveTo(-10,680); //x箭头pDC->LineTo(0,700);pDC->MoveTo(0,700);pDC->LineTo(10,680);pDC->MoveTo(680,10); //y箭头pDC->LineTo(700,0);pDC->MoveTo(700,0);pDC->LineTo(680,-10);pDC->TextOut(-30,700,"y");pDC->TextOut(700,-10,"x");// 线性分段差值的图像CPen pen;CPen*oldpen;pen.CreatePen(PS_SOLID,5,RGB(0,0,0));oldpen=pDC->SelectObject(&pen);for(i=0; i<10; i++){pDC->MoveTo(yx[i]*480,yy[i]*400);pDC->LineTo(yx[i+1]*480,yy[i+1]*400);}}void CLDlg::OnHermite(){int x00=300,y00=350,i,j;double x;CDC *pDC=GetDC();pDC->SetMapMode(MM_LOMETRIC);pDC->SetViewportOrg(x00,y00);//画坐标轴与原函数for(i=-700; i<=700; i++){pDC->SetPixel(i,0,RGB(0,0,0));pDC->SetPixel(0,i,RGB(0,0,0));}double yx[]={-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1};double yy[12];for(i=0; i<=10; i++){yy[i]=1.0/(1+25*yx[i]*yx[i]);}pDC->TextOut(-30,-10,"0");pDC->TextOut(-30,430,"1");pDC->TextOut(490,-10,"1");pDC->TextOut(-490,-10,"-1");pDC->MoveTo(-10,680); //x箭头pDC->LineTo(0,700);pDC->MoveTo(0,700);pDC->LineTo(10,680);pDC->MoveTo(680,10); //y箭头pDC->LineTo(700,0);pDC->MoveTo(700,0);pDC->LineTo(680,-10);pDC->TextOut(-30,700,"y");pDC->TextOut(700,-10,"x");//分段三次Hermite差值的函数double x0,x1,yd1,yd0,y1,y0;for(i=0; i<10; i++){x0=yx[i],x1=yx[i+1];y0=1.0/(1+25*x0*x0);y1=1.0/(1+25*x1*x1);yd0=-(50*x0)*1.0/((1+25*x0*x0)*(1+25*x0*x0));yd1=-(50*x1)*1.0/((1+25*x1*x1)*(1+25*x1*x1));for(double qq=x0; qq<x1; qq+=0.005){double pp= y0*(1+2*(qq-x0)/(x1-x0)) * (qq-x1)/(x0-x1) * (qq-x1)/(x0-x1)+y1*(1+2*(qq-x1)/(x0-x1)) * (qq-x0)/(x1-x0) * (qq-x0)/(x1-x0)+yd0*(qq-x0) * (qq-x1)/(x0-x1) * (qq-x1)/(x0-x1)+yd1*(qq-x1) * (qq-x0)/(x1-x0) * (qq-x0)/(x1-x0);pDC->SetPixel(qq*500,pp*400,RGB(225,185,15));}}}4.实验截图5.实验结果分析:分析:分段线性插值的方法克服了Lagrange插值法当节点不断加密时,构造的插值多项式的次数不断升高,高次多项式虽然是连续的,但是不一定都收敛到相应的被插函数而产生Runge现象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
我们已经知道:f(x)在n+1个节点xi(i=0,1,2,…,n) 上的n次插值多项式Pn (x) 的余项
f(n 1 )()n
R (x )f(x ) P n (x )(n 1 )!i 0(x x i)
设想当节点数增多时会出现什么情况。由插值余项可 知,当f(x)充分光滑时时,余项随n增大而趋于0的,这 说明可用增加节点的方法达到这个目的,那么实际是这 样吗?
这种插值多项式
当节点增加时反而不 能更好地接近被插值 函数的现象,称为龙 格现象。
上述现象告诉我们用高次插值多项式是 不妥当的,从数值计算上可解释为高次插 值多项式的计算会带来舍入误差的增大, 从而引起计算失真。因此,实践上作插值 时一般只用一次、二次最多用三次插值多 项式。
那么如何提高插值精度呢?采用分段 插值是一种办法。
龙格(Runge)给出的一个例子:
[例6] 给定
(x∈[-5,5])。
取等距节点xi=-5+i(i=0,1,…,10), 试建立插值 多项式L10(x), 并作图形, 观察L10(x)对f(x)的 逼近效果。
图1-8 例6的图形
从图中,还可看见, 在0附近插值效果是 好的,即余项较小, 另一种现象是插值多 项式随节点增多而振 动更多。
1.7 分段插值法
1,多项式插值的问题
我们已经知道插值有多种方法: Lagrange 插值、 Newton插值、Hermit 插值 等多种方式。插值的目的就是数值逼近的 一种手段,而数值逼近,为得是得到一个 数学问题的精确解或足够精确的解。那么, 是否插值多项式的次数越高,越能够达到 这个目的呢?现在,我们来讨论一下这个 问题。
则称(x)是f(x)在[a ,b]上的分段m次插值多项式。
m=1称为分段线性插值 m=2称为分段抛物线插值
分段线性插值的构造:
由定义, (x)在每个子区间[xi , xi+1](i=0,1,2,,n-1) 上是一次插值多项式;
(x ) y ix x i x x ii 1 1 y i 1x x i 1 x x ii x i, x x i 1
局部性 插值的光滑性不高
本节主要内容
高次插值的龙格现象 分段插值的概念 分段线性插值、抛物插值 分段三次埃尔米特插值 分析分段插值的余项、收敛性
实际上,上面介绍的分段低次插值,虽然具有计 算简便,收敛性有保证,数值稳定性又好且易在 计算机上实现等优点,但它却不能保证整条曲线 的光滑性,从而不能满足某些工程技术上的要求, 从六十年代开始,首先由于航空、造船等工程设 计的需要而发展起来的样条插值(spline)方法, 既保留了分段低次插值的各种优点,又提高了插 值函数的光滑性,在许多领域显得越来越广泛的 应用。
若用插值基函数表示,则在整个区间上为
n
Ih(x)
fjlj (x)
j0
分段线性插值的余项:
定理5:设f(x)在[a,b]上有二阶连续导数f″(x) ,且| f″(x)| ≤m2, 记: h = max |xi+1-xi|,就有估计:
|f(x)- (x) |=|R(x)| ≤m2h2/8, x∈[a, b]。
分段线性插值曲线图:
y=f(x)
Y
x0
x1
x2
…
xn X
例:设
在[0,5]上取等
距节点 x i 0 i(i 0 ,1 , ,5 )求分段插 值函数,及 f (4.5) 近似值
解
yi
1
1 x2
1.00000
0.50000
0.20000
0.10000
0.05882
0.03846
证明:由Hermite余项公式,当x∈[xi, xi+1]时 |f(x)- (x) |=|R(x)| = |f (4)()(x-xi)2(x- xi+1 )2|/4! ≤m4max|(x-xi)2(x-xi+1)2|/24≤m2h2/384,证
毕。
分段插值法优缺点
一种显示算法,算法简单,收敛性能得到 保证
注意到h随分段增多而减少,因此用分段法提高精度 是很好的途径. 证明:由Lagrange 余项公式,当x∈[xi, xi+1]时
|f(x)- (x) |=|R(x)| = |f″()(x-xi)(x- xi+1 )|/2! ≤m2max|(x-xi)(x-xi+1)|/2≤m2h2/8,
上式右端与小区间的位置无关,证毕。
.
xkx1xkxk
2(xxk1)yk1
分段三次Hermite插值的误差估计
定理6:设f(x)在[a,b]上有四阶连续导数f(4) (x) ,且| f (4)(x) | ≤m4, 记: h = max |xi+1-xi|,就有估计:
|f(x)- (x) |=|R(x)| ≤m4h4/384, x∈[a, b]。
3,分段插值定义:
设f(x)是定义在[a,b]上的函数,在[a,b]上节点 a= x0< x1<x2<…<xn-1<xn=b,
的函数值为 y0 , y1 ,y2 ,…yn-1 ,yn ,若函数(x)满足条 件
(1) (x)在区间[a , b]上连续; (2) (x)在每个子区间[xi , xi+1](i=0,1,2,,n-1)上是 次数为m的多项式;
f(x)L2(x)k i i1 1ykjj i ik1 1((x xk i x xji))
这种分段的低次插值叫分段二次插 值,在几何上就是用分段抛物线代 替y=f(x),故分段二次插值又称分段 抛物插值。
4,分段三次插值
考虑到插值曲线的光滑度,主要讨论 分段 三次埃尔米特插值,即 假定在每个节点xi上给出了函数值yi和导数 值 y'i 。
f( 4 .5 ) I h ( 4 .5 ) 0 .0 5 8 8 2 l4 ( 4 .5 ) 0 .0 3 8 4 6 l5 ( 4 .5 ) 0 .0 5 8 8 2 0 .5 0 .0 3 8 4 6 0 .5 0 .0 4 8 6 4
精确值为 f(4.5)0.04706。
分段二次插值即:选取跟节点x最近 的三个节点xi-1,xi, xi+1进行二次插值, 即在区间[xi-1, xi+1],取:
在每个小区间[xk , xk1] 上是Hermite三次多项
式,由Hermite三次插
2
值子多区项间式[x表k ,达xk式1]上得的在12xxk xxkk 11yk1xxk xxkk 11(xxk)yk
表达式为
2
2
S3(x) x x k x x kk 1 1 12xk x 1 xk xk yk xk x 1 xk xk
分段线性插值基函数为:
xi1 x[i1,i](i0)
li(x)(xi1) x[i,i1](i5)
0
x[0,i1) (i1,5]
分段线性插值函数为:
Ih (x ) l0 (x ) 0 .5 0 0 0 0 l1 (x ) 0 .2 0 0 0 0 l2 (x ) 0 .1 0 0 0 0 l3 (x ) 0 .0 5 8 8 2 l4 (x ) 0 .0 3 8 4 6 l5 (x )