5.4 三次Hermite插值
三次Hermite插值曲线及曲面的构造与显示汇总
三次Hermite插值曲线及曲面的构造与显示摘要曲线曲面造型是计算机几何设计和计算机图形学的1项重要内容,主要研究在计算机图像系统的环境下对曲线曲面的表示、设计、显示和分析。
作为它的1个重要组成部分,Hermite 插值曲线曲面以其特性不仅在几何造型系统中有着广泛的应用,而且在工程设计中也受到了人们的青睐。
本文简要介绍了Hermite插值曲线与Conns曲面的定义和相关定理,阐述了如何构造Ferguson曲面及双3次Conns曲面,对3次Hermite插值曲线曲面的广泛应用也做了相应的举例说明。
文章采用 MATLAB语言来绘制3次Hermite插值曲线及Coons曲面。
matlab语言丰富的图形表现方法,极大的简化了3次Hermite曲线曲面的绘制过程,可以方便地、多样性地实现了可视化,这是其它语言所不能比拟的。
关键词:Hermite插值曲线;合成Ferguson曲线;Coons曲面;MATLAB语言; Abstract The curve surface modeling that is a important content in the computer aided geometric design and computer graphics, it chiefly researchs the expression, design, display and analysis of the curve and surface under the computer image system environment. The Hermite interpolation curve andsurface , as the important component of the curve and surface modeling, that not only has wide application in the geometry modeling system, but also assist many people in the engineering design. This paper introduces the definition and correlative theery of Hermite interpolation curve and the Coons surface briefly, and elaborates how to structure the Ferguson surface and double cubic Coons surface, moreever, this paper also make some corresponding explanations and examples for the wide application of cubic Hermite interpolation curve and suface. This paper uses the MATLAB language to draw up cubic Hermite interpolation curve and Coons surface. There arerichful performance methods of graphics in MATLAB language, this make the drowing process of cubic Hermite curve and surface very easy, and make the accomplishment of visualization conveniently, multiply. These points are useful advantages that other language don’t have. Keywords:Hermite interpolation curve;Complex Ferguson curve;Coons surface;MATLAB language;。
5.4埃尔米特(Hermite)插值
H3(xi) = yi
H´3(xi) = y´i x
(i=0,1,2)
1 1
0 0 0
1 1
y ( x) y f ( x )
解
所求三次Hermite的插值多项式为
H 3 ( x ) a0 a1 x a2 x 2 a3 x 3
i( x j ) 0 i ( x j ) 0
(i, j =0,1,2, …,n)
Hermite插值多项式可写成插值基函数表示的形式
H 2 n1 ( x ) i ( x ) f ( xi ) i ( x ) f ( xi )
i 0
n
计算方法
验证:
H 2n1 ( x j ) i ( x j ) f ( xi ) i ( x j ) f ( xi ) ij f ( xi ) 0 f ( x j )
n
计算方法
H2n+1(x)为满足条件
H ( xi ) f ( xi ),
H ( xi ) f ( xi )
( i 0,1, , n)
的2n+1次Hermite插值多项式。
计算方法
定理
满足插值条件
H ( xi ) f ( xi ) ( i 0,1, , n)
H ( xi ) f ( xi ),
其中
( x ) ( x x0 )( x x1 )( x xn )
(a, b)
定理的证明可仿照Lagrange插值余项的证明方法
实际中使用最广泛的是三次Hermite插值多项式,即 n=1的情况
计算方法
H 3 ( x ) j ( x ) f ( x j ) j ( x ) f ( x j )
参数三次埃尔米特插值实例分析
2
公式推导
参数三次曲线,简称 PC 曲线,表示为: ������(t) = ������0 + ������1 t + ������2 ������ 2 + ������3 ������ 3 , ������ ∈ [0,1] 确定四个系数矢量的方法是给定曲线两端点及其切矢。 对函数中参数 t 求导,得: ������������ ������′ (������) = = ������1 + 2������2 ������ + 3������3 ������ 2 ������������ 用������ = 0,1代入以上两式,得: ������0 = ������(0) ������0 + ������1 + ������2 + ������3 = ������(1) ������1 = ������′ (0) ������1 + 2������2 + 3������3 = ������′ (1) 写成矩阵形式: ������(0) 1 0 0 0 ������0 ������ ������(1) 1 1 1 1 1 [ ] [������ ] = ′ ������ (0) 0 1 0 0 2 ������ 0 1 2 3 3 [������′ (1)] 于是可得: ������0 1 0 0 0 ������(0) ������1 0 0 1 0 ������(1) [������ ] = [ ] 2 −3 3 −2 −1 ������′ (0) ������3 2 −2 1 1 [������′ (1)] 将上式代入函数方程,得: 1 0 0 0 ������(0) 0 0 1 0 ������(1) ������(t) = [1 ������ ������ 2 ������ 3 ] [ ] −3 3 −2 −1 ������′ (0) 2 −2 1 1 [������′ (1)] 上式即与标量形式的三次埃尔米特插值相对应的参数形式,即定义在区间������ ∈ [0,1]
分段三次hermite函数
分段三次hermite函数
分段三次 Hermite 函数是一种用于插值数据、拟合数据以及数值微分的函数。
它的特点是可以通过选择足够的基函数来适应各种不同的非线性函数。
本文将深入探讨分段三次 Hermite 函数的定义、应用和优点。
一、定义
分段三次 Hermite 函数是一种三次多项式函数。
它由基函数和插值条件构成。
1. 基函数
1)常数项
2)线性项
3)二次项
这些基函数可以用于构建分段三次 Hermite 函数,使其适应不同的非线性函数。
2. 插值条件
1)值的匹配条件
二、应用
分段三次 Hermite 函数广泛应用于数值微分、插值和拟合。
下面将分别介绍这些应用。
分段三次 Hermite 函数可以用于插值数据。
通过确定插值条件,可以得到一个分段三次 Hermite 函数,使其在给定数据点处与目标函数匹配。
这种方法常常用于构建数值框架,如数值微分和数值积分。
3. 拟合
三、优点
1. 精确度高
2. 稳定性高
分段三次 Hermite 函数具有优良的稳定性。
它可以处理大量的数据,而不会出现精度问题或数值不稳定性。
3. 方便性高
4. 可扩展性高
分段三次 Hermite 函数具有非常强的可扩展性。
它可以扩展到高维空间,适应各种不同的数据类型,从而得到非常精确的结果。
在第一个插值点上的hermite三点插指公式
在第一个插值点上的hermite三点插
指公式
在第一个插值点上的hermite三点插指公式
Hermite三点插值法是一种采用三个插值点来求解函数f(x)在给定范围内的曲
线图的插值算法,通常是用来拟合y=f(x)在离散中提供的三个点的插值函数,在
第一个插值点的提出的这种特定的三点插值模型,即对第一个插值点位置
(x0,f(x0)),其中x0为插值点位置,f(x0)为其处的函数值,用的三点模型可写为:
f(x)=f(x0)+f'(x0)(x-x0)+[f''(x0)/2](x-x0)^2
即,把第一个插值点位置(x0,f(x0))处的点代入,可以得到其相应的函数拟合
多项式,当然,并不是每一个函数拟合多项式都能满足实际需求,这就需要注意函数拟合多项式的拟合度,可以在参数估计和函数估计的时候,使用一定的误差来估计函数值,从而获得函数拟合度较好的模型。
此外,在使用Hermite三点插值法时,需要注意三个点之间的位置关系,三个
点位于x0,x1,x2等位置,在确定每个点的位置时应该考虑到它们之间的距离,
一般来说,三个点之间的间距应保持一定,以使插值函数尽可能精确的反映函数的实际变化。
因此,要使得Hermite三点插值法能取得较好的效果,在确定三个插值点的位
置的时候要综合考虑它们之间的位置关系,以及在第一个插值点的估计时要注意拟合度,这样就能很好的进行三点插值,从而得到准确的结果。
数值分析实验六(分段三次Hermite插值)
数值分析实验六(分段三次Hermite插值)《数值分析》实验报告实验编号:实验六课题名称:分段三次Hermite插值一、算法介绍给定的函数为f(x)=1/(25*x*x+1),将给定区间分成10分,得到11个节点:x[0],x[1],...,x[10],构造插值函数的基函数。
当x在(x[0],x[1])区间上时,H[0] = (x-x[0])*[((x-x[1])/(x[0]-x[1]))^2]。
其余的区间为H[0]=0。
h[0]= [1+2*(x-x[0])/(x[1]-x[0])]*[((x-x[1])/(x[0]-x[1]))^2]。
当x在[x[i-1],x[i]] (i=1,2,3, (9)区间上时,H[i]=(x-x[i])*[((x-x[i-1])/(x[i]-x[i-1]))^2],h[i]=[1+2*(x-x[i])/(x[i-1]-x[i])]*[((x-x[i-1])/(x[i]-x[i-1]))^2)。
当x在(x[i],x[i+1]](i=1,2,3,…,10)区间上其余的区间为H[i]=(x-x[i])[((x-x[i+1])/(x[i]-x[i+1]))^2],h[i]=[1+2*(x-x[i])/(x[i+1]-x[i])]*[((x-x[i+1 ])/(x[i]-x[i+1]))^2]。
其余区间上均为H[i]=0,h[i]=0(i=1,2,…,10)。
当x在(x[9],x[10])区间上时,H[10] = (x-x[9])(((x-x[10])/(x[9]-x[10]))^2).其余的区间为H[10]=0.h[10]= (1+2*((x-x[9])/(x[10]-x[9])))(((x-x[10])/(x[9]-x[10]))^2).其余区间h[10]=0。
构造函数H(x) =∑(y[i]*h[i]+y'[i]*H[i],(i=0,1,…,10)。
二、程序代码// testV iew.cpp : implementation of the CT estV iew class//#include "stdafx.h"#include "test.h"#include "testDoc.h"#include "testView.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////// //////////// CTestV iewIMPLEMENT_DYNCREA TE(CTestView, CView)BEGIN_MESSAGE_MAP(CTestView, CView)//{{AFX_MSG_MAP(CTestView)// NOTE - the ClassWizard will add and remove mapping macros here.// DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSG_MAP// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CV iew::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView::OnFilePrintPreview)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////// //////////// CTestV iew construction/destructionCTestView::CTestV iew(){// TODO: add construction code here}CTestView::~CT estView(){}BOOL CTestView::PreCreateWindow(CREA TESTRUCT& cs){// TODO: Modify the Window class or styles here by modifying // the CREA TESTRUCT csreturn CV iew::PreCreateWindow(cs);}/////////////////////////////////////////////////////////////////// //////////// CTestV iew drawingvoid CTestView::OnDraw(CDC* pDC){CTestDoc* pDoc = GetDocument();ASSERT_V ALID(pDoc);// TODO: add draw code for native data hereint i,j,k;double x,y,p_x,p_y,l,xx[100],f[100],F[100],sum,p_sum;CPen MyPen,*OldPen;pDC->SetViewportOrg(400,400); //定义坐标原点for(i=-500;i<500;i++){pDC->SetPixel(0,i,RGB(0,0,0));pDC->SetPixel(i,0,RGB(0,0,0)); //画出坐标}pDC->TextOut(-210,5,"-1");pDC->TextOut(196,5,"1");//原函数MyPen.CreatePen(PS_SOLID,1,RGB(255,0,0));//定义画笔颜色OldPen=pDC->SelectObject(&MyPen);x=-1.0,y=1/(1+25*x*x);p_x=x*200;p_y=-y*200;pDC->MoveTo(p_x,p_y);for (x=-1.0;x<=1.0;x+=0.0001){y=1/(1+25*x*x);p_x=x*200;p_y=-y*200;pDC->LineT o(p_x,p_y);}pDC->SelectObject(OldPen);MyPen.DeleteObject();//分段三次Hermite插值MyPen.CreatePen(PS_SOLID,1,RGB(0,0,0)); OldPen=pDC->SelectObject(&MyPen); x=-1.0,y=1.0/(1+25*x*x);p_x=x*200;p_y=-y*200;pDC->MoveTo(p_x,p_y);x=-1.0;for(i=0;i<=10;i++){f[i]=1/(1+25*x*x);xx[i]=x;F[i]=-50*x/(1+25*x*x)/(1+25*x*x); //导数x+=0.2;}x=-1.0;for(j=0;j<=1000;j++){sum=0;for(i=0;i<=10;i++){if(x==xx[i]){sum=f[i];p_x=x*200,p_y=-sum*200;pDC->LineT o(p_x,p_y);break;}if(xxx[i]){y=(1+2*(x-xx[i])/(xx[i+1]-xx[i]))*(x-xx[i+1])*(x-xx[i+1])/(xx[i]-xx[i+1])/(xx[i]-xx[i+1]);sum+=f[i]*y;y=(1+2*(x-xx[i+1])/(xx[i]-xx[i+1]))*(x-xx[i])*(x-xx[i])/(xx[i+1]-xx[i])/(xx[i+1]-xx[i]);sum+=f[i+1]*y;y=(x-xx[i])*(x-xx[i+1])*(x-xx[i+1])/(xx[i]-xx[i+1])/(xx[i]-xx[i+1]);sum+=F[i]*y;y=(x-xx[i+1])*(x-xx[i])*(x-xx[i])/(xx[i+1]-xx[i])/(xx[i+1]-xx[i]);sum+=F[i+1]*y;p_x=x*200;p_y=-sum*200;pDC->LineT o(p_x,p_y);break;}}x+=0.002;}pDC->SelectObject(OldPen);MyPen.DeleteObject();/////////////////////////////////////////////////////////////////// //////////// CTestV iew printingBOOL CTestView::OnPreparePrinting(CPrintInfo* pInfo){// default preparationreturn DoPreparePrinting(pInfo);}void CTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add extra initialization before printing}void CTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add cleanup after printing}/////////////////////////////////////////////////////////////////// //////////// CTestV iew diagnostics#ifdef _DEBUGvoid CTestView::AssertV alid() const{CView::AssertV alid();}void CTestView::Dump(CDumpContext& dc) const{CView::Dump(dc);CTestDoc* CT estV iew::GetDocument() // non-debug version is inline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CT estD oc)));return (CT estDoc*)m_pDocument;}#endif //_DEBUG/////////////////////////////////////////////////////////////////// //////////// CTestV iew message handlers三、运算结果截屏红色的曲线为原函数图像,黑色曲线为分段三次Hermite插值曲线四、算法分析上述图像中黑色的曲线为分段分段三次Hermite插值多项式所对应的图像,由图像可看出黑色的分段三次Hermited插值函数图像和拉格朗日、分段线性插值相比与红色被逼近函数的重合度最好,说明分段三次Hermite插值在函数的各节点两边插值函数的导数是相等的,保证了在各节点的平滑性,且不会出现Runge现象。
5.4 三次Hermite插值
由于0 ( x0 ) 0 ( x1 ) 0( x1 ) 0, 故 0 ( x) 含有 ( x x0 )( x x1 ) 因子。可设
0 ( x) c( x x0 )( x x1 )2
2
其中c为待定系数。
1 . 由 0( x0 ) 1, 可得 c 2 ( x0 x1 )
称 H3 ( x) 为三次Hermite插值多项式,上述条件称 为此问题的插值条件。
采用基函数的方法来构造 H3 ( x) 。
将 H3 ( x) 表示为:
H3 ( x) y00 ( x) y11( x) m00 ( x) m11( x)
其中 0 ( x),1 ( x), 0 ( x), 1 ( x)为插值基函数,且均为次数 不超过3的多项式。为满足插值条件,它们应满足
并给出余项公式。
( x1 ) m1, (i 0,1,2), H3 ( xi ) yi , H3 H3 ( x) y00 ( x) y11( x) y22 ( x) m11( x)
函数值
导数值
x0
x1
0
1
x2
0 0
1
x1
0 0 0
1
0 ( x)
1( x)
2 ( x )
作为多项式插值,三次已是较高的次数,次数再高就有 可能发生Runge现象,因此,对有n+1节点的插值问题, 我们可以使用分段两点三次Hermite插值
例1 对给定数表
x
y
x0 y0
x1 y1 m1
x2 y2
y
求一个三次Hermite插值多项式 H3 ( x) 满足条件
( x1 ) m1, (i 0,1,2), H3 ( xi ) yi , H3
三次Hermite插值
04 实例分析
CHAPTER
实例一:已知数据点的插值
总结词
利用已知数据点进行插值,可三次Hermite插值方法,利用已知的数据点来估计未知点的值。这 种方法能够更好地处理数据点的变化,并提高插值的精度。
CHAPTER
插值多项式的构造
定义
Hermite插值法是一种通过已知的离散数据点来构造一个多 项式,使其能够准确地经过这些数据点,并尽可能地平滑地 连接这些点的方法。
构造方法
Hermite插值多项式由两个部分组成,一个是线性函数,另 一个是二次函数。线性函数部分用于确保插值多项式能够准 确地经过数据点,而二次函数部分则用于保证插值多项式的 平滑性。
实例二:未知数据点的插值
总结词
在未知数据点的情况下,可以通过三次 Hermite插值方法,预测并估计未知点的值。
详细描述
在数据点未知的情况下,可以利用三次 Hermite插值方法,根据已知的数据点来预 测和估计未知点的值。这种方法能够为后续 的数据分析和处理提供重要的参考依据。
实例三:复杂函数的插值
三次Hermite插值能够提供高精度的插值结果,特别是在处理
复杂函数时。
稳定性好
02
该方法在处理大数据集时表现出良好的稳定性,不易受到噪声
和异常值的影响。
易于实现
03
三次Hermite插值的算法相对简单,易于在计算机上实现和优
化。
三次Hermite插值的局限性
对初始数据敏感
三次Hermite插值的结果对初始数据的选择 较为敏感,不同的初始数据可能导致不同的 插值结果。
实验六 分段三次Hermite插值画函数图像
实验六: 分段三次Hermite插值画函数图像学号: 姓名:指导老师:马季骕班级:计算机科学与技术(非师范)1、算法说明:分段三次Hermit插值的做法是在每一个小区间上作三次Hermit插值,因此在每一个插值节点上都需要构造两个插值基函数,然后再作它们的线性组合。
分段三次Hermit插值基函数如下:H(x)=Σ(yihi(x)+y’iHi(x))给定的函数为f(x)=1/(25*x*x+1),将给定区间分成10分,得到11个节点:x[0],x[1],...,x[10],构造插值函数的基函数。
当x在(x[0],x[1])区间上时,H[0] = (x-x[0])*[((x-x[1])/(x[0]-x[1]))^2]。
其余的区间为H[0]=0。
h[0]= [1+2*(x-x[0])/(x[1]-x[0])]*[((x-x[1])/(x[0]-x[1]))^2]。
当x在[x[i-1],x[i]] (i=1,2,3,...,9)区间上时,H[i]=(x-x[i])*[((x-x[i-1])/(x[i]-x[i-1]))^2],h[i]=[1+2*(x-x[i])/(x[i-1]-x[i])]*[((x-x[i-1])/(x[i]-x[i-1]))^2)。
当x在(x[i],x[i+1]](i=1,2,3, (10)区间上其余的区间为H[i]=(x-x[i])[((x-x[i+1])/(x[i]-x[i+1]))^2],h[i]=[1+2*(x-x[i])/(x[i+1]-x[i])]*[((x-x[i+1])/(x[i]-x[i+ 1]))^2]。
其余区间上均为H[i]=0,h[i]=0(i=1,2,…,10)。
当x在(x[9],x[10])区间上时,H[10] = (x-x[9])(((x-x[10])/(x[9]-x[10]))^2).其余的区间为H[10]=0.h[10]= (1+2*((x-x[9])/(x[10]-x[9])))(((x-x[10])/(x[9]-x[10]))^2).其余区间h[10]=0。
三次Hermite插值曲线的能量优化
下 面 讨 论 当 自 由 变 量 α1 α 2 β1 β 2 取 何 值 时 , 曲线
p(u) 的能量函数 f (α1 α 2 β1 β 2) 最小。
之满足如下条件:
ì p(u i ) = p i , p(u i + 1/3) = α1, p(u i + 2/3) = α 2 , p(u i + 1) = p i + 1 í î p′(u i ) = T i , p′(u i + 1/3) = β1, p′(u i + 2/3) = β 2 , p′(u i + 1) = T i + 1 α1 、 α 2 、β1 和 β 2 是四个自由变量。 其中,
光顺性是一个在 CAGD 中应用很普遍又很重要的
概念, 国内外许多学者对此作了大量研究, 提出了很多 光顺方法, 如 Kjellander 法、 量法及最小二乘法等 [13]。其 中, 能量法是一种整体优化方法, 其光顺效果好, 为人们 普遍采用的一种曲线光顺方法。光顺法的关键是: 能量 函数的确定, 优化问题的求解。 对于曲线 p(u) , 一般选用 ||p(u)″||2 du 和 p ‴(u)du 作 为曲线的能量函数。其中,p″(u) 为 p(u) 的二阶导数, 体现了曲线的曲率因素。 p ‴(u) 为 p(u) 的三阶导数, 体 现了曲线的挠率因素。由于上述两个能量函数不依赖 曲线的参数化, 能取得较好的光顺效果, 且计算量较小, 便于在计算机上实现, 故在曲线光顺优化中得到了普遍 的应用。
f (α1 α 2 β1 β 2) = u ||p″(u)||2 du = u
i
ui + 1
ui + 1 3
i
||p″(u)||2 du + ||p″(u)||2 ห้องสมุดไป่ตู้u
数值计算(数值分析)实验4-分段三次埃尔米特(hermite)插值【c程序实现+流程图】
实验四分段三次埃尔米特插值(一)实验目的掌握分段三次埃尔米特插值算法。
(二)实验项目内容1.写出计算步骤和流程图。
2.对每种算法分别用C或c#程序实现。
3.调试程序。
可用以下数据进行调试。
已知函数y=1/(1+x2)在区间[0,3]上取等距插值节点,求区间[0,3]上的分段三次埃尔米特插值函数,并利用它求出f(1.5)的近似值(0.3075)。
x0 1 2iy 1 0.5 0.2 iy 0 -0.5 -0.16 i(三)主要仪器设备微机(四)实验室名称公共计算机实验室(五)实验报告撰写实验四分段三次埃尔米特插值实验报告一、流程图二、 程序代码#include<stdio.h>#include<math.h>float f0(float x) N Y开始输入i x ,i y ,xy=0, j=0t=1i j ix x t t x x -=- i=0,…j-1,j+1,…n i y y ty =+j=n? 输出y结束j=j+1{return((x-1)*(x-1)*(2*x+1));}float f1(float x){return(x*x*(-2*x+3));}float g0(float x){return(x*(x-1)*(x-1));}float g1(float x){return(x*x*(x-1));}void main(){float x0,x1,x,y0,y1,yy0,yy1,h,p;printf("输入x0,x1,x,y0,y1和yy0,yy1的取值");scanf("%f%f%f%f%f%f%f",&x0,&x1,&x,&y0,&y1,&yy0,&yy1); h=x1-x0;p=y0*f0((x-x0)/h)+y1*f1((x-x0)/h)+h*yy0*g0((x-x0)/h)+h*yy1*g1((x-x0)/h);printf("%f\n",p);}三、运行结果【截图】。
分段三次Hermite插值在排驱压力计算中的应用
中图分类号:T E 3 1 l
YI Xi a n g y i ,L I De c a i ,Z HEN G J u n
( 1 . S t a t e K e y L a b o r a t o r y o fe o l o g y a n d E x p l o i t a t i o n ,C h e n g d u 6 1 0 0 5 9 ,C h i n a ;
文献标识码:A
文章编号:1 0 0 0 - 3 7 5 4( 2 0 1 3 )0 3 - 0 0 6 5 04 -
APP LI CATI oN oF P I ECEW I S E CUBI C HERM I TE I NTERPoLATI oN I N
THE CALCULATI o N oF EXPULS I oN PRES S URE
2 . D a q i n g O i l ie f l d C o m p a n y L t d . 。D a q i n g 1 6 3 4 5 3 ,C h i n a )
Abs t r a c t: Ex pu l s i o n p r e s s u r e i s o n e o f t h e i mpo r t a n t i n d e x e s i n s t u d y i n g r e s e r v o i r a c c u mul a t i n g pe fo r r ma n c e a n d p e r c o l a t i o n p e r f o m a r n c e b y me a n s o f t h e c a p i l l a r y p r e s s u r e d a t a,S O t h e d e t e r mi n a t i o n o f t h e a bo v e pr e s s u r e pl a y s a n i mpo r t a n t r o l e i n t he r e s e r v o i r e v a l u a t i o n.T he p r e s s u r e s o l v i n g me t h o d b y c u bi c s p l i n e ' i n t e r p o l a t i n g c a p i l l a r y pr e s - s u r e c u ve r o te f n a pp e a r Ru ng e p h e n o me n o n wh i c h d i s a g r e e i n t h e pr a c t i c a l l a ws .Th e r e f o r e t h e n e w me t ho d i s i nt r o - d u c e d i .e .u s i n g pi e c e wi s e c ub i c He m i r t e i n t e po r l a t i n g f un c t i o n t o ma t c h t h e c a p i l l a y r p r e s s u r e c u ve r a n d a d o pt i n g t h e ma x i ma l c u r v a t u r e a pp r o a c h t o s e e k f o r t h e d r a i na g e p r e s s u r e .Th e a pp l i c a t i o n i n Da q i n g S ai  ̄ r t u De v e l o p me n t Bl o c k s h o ws t ha t t hi s me t h o d c a n n o t o n l y k e e p t h e s h a p e s a n d mo n o t o n i c i t y o f t h e d a t a,b ut a l s o it f s t h e ma t c h o f
Hermite插值法
i = 0 ,1
x0 , x1均为R3 ( x )的二重零点,因此可设
R3 ( x ) = K ( x )( x − x0 )2 ( x − x1 )2
其中K (x )待定
10
构造辅助函数
ϕ (t ) = f (t ) − H 3 (t ) − K ( x )(t − x0 )2 (t − x1 )2
求一个次数不超过2n+1次的多项式H(x)使 求一个次数不超过2n+1次的多项式H(x)使 2n+1次的多项式H(x)
H ( xi ) = f ( xi ) = yi H ′( xi ) = f ′( xi ) = yi′
i = 0 ,1,L , n i = 0 ,1,L , n
这种带有导 数的多项式 问题, 插值 问题, 称为 Hermite插 Hermite插 值问题。 值问题。 1
′ ′ H 3 ( x) = y0α 0 ( x) + y1α1 ( x) + y0 β 0 ( x) + y1β1 ( x)
线性插值基函数代入定理1.5 将Lagrange线性插值基函数代入定理 线性插值基函数代入定理 中的基函数求得三次Hermite插值的基 中的基函数求得三次 插值的基 函数! 函数
x − x1 l0 ( x) = x0 − x1 x − x0 l1 ( x) = x1 − x0
基函数具有 什么表达式? 什么表达式?
4
x − x0 x − x1 α 0 ( x) = 1 + 2 x1 − x0 x0 − x1
2
x − x1 x − x0 α1 ( x ) = 1 + 2 x0 − x1 x1 − x0
分段三次 hermite 插值多项式的数学表达
分段三次 hermite 插值多项式的数学表达Hermite插值多项式是一种用于在给定的点集上进行插值的数学工具。
与其他插值方法不同的是,Hermite插值多项式不仅考虑了函数在各个插值点上的函数值,还考虑了函数在该点上的导数值。
这使得Hermite插值多项式能够更准确地拟合函数的曲线特征,特别是在存在函数奇点或不连续点的情况下。
要理解Hermite插值多项式的具体数学表达,首先需要了解插值点和插值条件的概念。
设给定的插值点集为{(x0, f0, f'0), (x1, f1, f'1), ..., (xn, fn, f'n)},其中xi为插值点的横坐标,fi为插值点的纵坐标,f'i为插值点的导数值。
我们的目标是构造一个多项式P(x),满足以下条件:1.在每个插值点(xi, fi)处,多项式P(x)的函数值等于fi:P(xi) = fi;2.在每个插值点(xi, fi)处,多项式P(x)的导数值等于f'i:P'(xi) = f'i。
根据这些插值条件,我们可以得到Hermite插值多项式的数学表达式。
首先,我们需要定义一个Lagrange插值基函数Lk(x),用于描述在插值点xi处的多项式P(x)的函数值。
Lagrange插值基函数可以通过以下公式计算得到:Lk(x) = Π(j ≠ k) [(x - xj) / (xk - xj)]其中Π是乘积符号,j和k分别表示插值点的索引。
然后,我们可以构造Hermite插值多项式Hk(x),它的数学表达式可以通过Lagrange插值基函数和插值点的函数值、导数值得到:Hk(x) = [1 - 2(x - xi)L'i(xi)]Li(x)^2 + (x - xi)Li(x)^2 其中Li(x)表示第i个插值点处的Lagrange插值基函数,L'i(xi)表示第i个插值点处的Lagrange插值基函数的导数值。
分段三次Hermite插值(可编辑修改word版)
摘要用函数来表示变量间的数量关系广泛应用于各学科领域,但是在实际问题中,往往是通过实验、观测以及计算等方法,得到的是函数在一些点上的函数值。
如何通过这些离散数据找到函数的一个满足精度要求且便于使用的近似表达式,是经常遇到的问题。
对于这类问题我们解决的方法为插值法,而最常用也最简单的插值方法就是多项式插值。
当然用插值法得到的近似表达式必须满足插值条件即假设给定了 n+1 个点的自变量的值以及函数值,近似函数必须要过这n+1 个点。
多项式插值,从几何角度看,就是寻求 n 次代数曲线y=Pn (x)通过 n+1 个点作为 f(x)的近似。
但是随着插值节点个数的增加,高次插值多项式的近似效果并不理想。
根据大量实验得出,在进行高次多项式插值时,会出现龙格现象。
因此,为了解决这样的一个问题,我们可以通过缩小插值区间的办法达到减小误差的目的。
但是当在每个小区间上用一次函数进行插值时,有很好的收敛性但是光滑度不够,因此本实验将用三次 Hermite 进行插值,做具体的讨论和学习。
关键词:龙格现象分段差值三次Hermite 进行插值i i ‒ 1 i ‒ 1 i iH 2(x ),x ∈ [x 1,x 2] ⋯⋯⋯⋯⋯⋯⋯ H n (x ),x ∈ [x n ‒ 1,x n ]1、实验目的1) 通过对分段三次 Hermite 插值算法程序的编写,提高自己编写程序的能力2) 体会分段三次 Hermite 插值比分段线性插值优越在哪里 3) 用实验报告的形式展现,提高自己在写论文方面的能力2、算法流程分段线性插值多项式S (x )在插值区间[a ,b ]上只能保证连续性,而不光滑。
要想得到在插值区间上光滑的分段线性插值多项式,可采用分段埃尔米特(Hermite )插值,这里我们考虑在整个[a ,b ]上用分段三次埃尔米特插值多项式来逼近f (x )。
一般的将带有导数的插值多项式称为 Hermite 插值多项式。
如果已知函数y = f (x )在节点a = x 0 < x 1 < ⋯ < x n = b 处的函数的值 和导数值:y i = f (x i ),y ' = f '(x i ),i = 0,1,2,⋯,n则在小区间[x i ‒ 1,x i ]上有四个插值条件:y i ‒ 1 = f (x i ‒ 1),y i = f (x i )y ' = f '(x ),y ' = f '(x ) 故能构造一个三次多项式H i (x ),并称为三次 Hermite 插值多项式。
Hermite插值公式
f ( n+r +2 ) (ξ ) 即得 f ( x) H ( x) = wn ( x) wr ( x) (n + r + 2)!
14
若r = n, 则相应的Hermite插值多项式为
H ( x) = ∑ hk ( x) f ( xk ) + ∑ hk ( x) f ′( xk )
k =0 k =0 n n
y0 = 2 , y1 = 3
′ ′ y 0 = 0 , y1 = 1
′ ′ H 3 ( x) = y0 h0 ( x) + y1h1 ( x) + y0 h0 ( x) + y1h1 ( x)
x x0 x x1 x x1 x x0 = y0 1 + 2 x x + y1 1 + 2 x x x x x1 x0 0 1 0 0 1 1
由条件(1)知
F ( x) = F ( x0 ) = F ( x1 ) = L = F ( xn ) = 0
F ′( x0 ) = F ′( x1 ) = L = F ′( xr ) = 0
13
即F (t ) = 0有n r + 1个单根x, xr +1 , xr +2 ,L, xn 和r + 1个二重根x0 , x1 ,L, xr .
i
n
------(7)
由条件(3)知hk ( xk ) = 1
C=
1
∏ (x
i =0
r
k
xi )
2
i =r +1 i≠k
∏ (x
n
k
xi )
将C代入式(7),得
wr ( x) hk ( x) = lkn ( x), wr ( xk )
hermit插值
16 多项式(12)常用作分段低次插值,称为分段三次Hermite插值.
x − x1 2 h0 ( x) = ( x − x0 )( ) x0 − x1 x − x0 2 h1 ( x) = ( x − x1 )( ) x1 − x0
例1.
已知f ( x )在节点1,处的函数值为f (1) = 2 , f ( 2 ) = 3 2 f ( x )在节点1,处的导数值为f ′(1) = 0 , f ′( 2 ) = −1 2
8
其中,
wr ( x) = ∏ ( x − xi )
r
wr ( xk ) = ∏ ( xk − xi )
i =0
n
i =0 r
x − xi lkn ( x) = ∏ i =0 xk − xi
i≠k
综合(1)(2)得到 hk ( x) ( k = 0,1,⋯ n) 即式(6),(8)
2.求解 hk ( x) (k = 0,1,⋯ n)
i =0 i≠k i = r +1 r n
将A,B代入式(5),得
′ ′ hk ( x) = {1 − ( x − xk )[lkn ( xk ) + lkr ( xk )]}lkn ( x)lkr ( x) ------(6) k = 0,1,⋯, r
6
其中,
x − xi lkn ( x) = ∏ i =0 xk − xi
n i≠k r
x − xi lkr ( x) = ∏ i =0 xk − xi
i≠k n
1 ′ lkn ( xk ) = ∏ i =0 xk − xi
i≠k
r
1 ′ lkr ( xk ) = ∏ i =0 xk − xi
i≠k
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
0 0 0
0 0
1 ( x)
0
( x) f ( x) H3 ( x) K( x)(x x0 )2 ( x x1 )2 0
i 0 ,1
因此(t )至少有 5个零点
连续使用4次Rolle定理,可得, 至少存在一点 [ x0 , x1 ] 使得
( 4 ) ( ) 0
即
( 4) ( ) f ( 4) ( ) 4! K ( x) 0
0, i j i ( x j ) ij , i( x j ) 0, 1, i j i ( x j ) 0, i( x j ) ij , (i, j 0,1)
( xi ) mi , (i 0,1) H3 ( xi ) yi , H3 H3 ( x) y00 ( x) y11( x) m00 ( x) m11( x)
§
5.4 埃尔米特(Hermite)插值
--要求在节点处两者相切,即导数值相等.
, xn b处的函数值为f 0 , f1, , fn ,
设f ( x)在节点 a x0 , x1,
设P( x)为f ( x)的在区间 [a, b]上的具有一阶导数的插 值函数
(1) 若要求P( x)在[a, b]上具有一阶导数 (一阶光滑度 )
f0 2, f1 3
f 0 0, f1 1
H3 ( x) f 00 ( x) f11 ( x) f00 ( x) f11 ( x)
x x1 x x0 x x1 f 0 1 2 x x f1 1 2 x x x x 1 1 0 0 0 1 x x0 x x1 x x1 f f0 x x0 1 x x x x 0 1 1 0
0 0
1 ( x)
0
x x0 x x1 0 ( x) 1 2 x1 x0 x0 x1
2
类似地,将 x0 , x1 互换,可得
x x1 x x0 1 ( x ) 1 2 x x x x 0 1 1 0
P ( xi ) f ( xi ) f i P ( xi ) f ( xi ) f , i 0,1, ,n
P( x)可以是最高次数为 2n 1次的多项式
两个节点就可以用 2 1 1 3次多项式作为插值函数
(2) 同样, 若要求P( x)在[a, b]上具有m阶导数(m阶光滑度 ) 即P( x)在节点 x0 , x1 ,, xn处必须满足
并给出余项公式。
( x1 ) m1, (i 0,1,2), H3 ( xi ) yi , H3 H3 ( x) y00 ( x) y11( x) y22 ( x) m11( x)
函数值
导数值
x0
x1
0
1
x2
0 0
1
x1
0 0 0
1
0 ( x)
1( x)
2 ( x )
x x1 x x0 1 ( x) 1 2 x x x x 0 1 1 0
2
x x1 0 ( x) ( x x0 ) x x 0 1
2
x x0 1 ( x) ( x x1 ) x1 x0
2 2
x x0 x x 0 1
2
2
2 H 3 ( x) 21 2( x 1) x 2 2 31 2( x 2) x 1
x 2 x 12
3 x 3 13x 2 17x 9
f (1.5) H 3 (1.5) 2.625 f (1.7 ) H 3 (1.7 ) 2.931
2
由于0 ( x0 ) 0 ( x1 ) 0( x1 ) 0, 故 0 ( x) 含有 ( x x0 )( x x1 ) 因子。可设
0 ( x) c( x x0 )( x x1 )2
2
其中c为待定系数。
1 . 由 0( x0 ) 1, 可得 c 2 ( x0 x1 )
称 H3 ( x) 为三次Hermite插值多项式,上述条件称 为此问题的插值条件。
采用基函数的方法来构造 H3 ( x) 。
将 H3 ( x) 表示为:
H3 ( x) y00 ( x) y11( x) m00 ( x) m11( x)
其中 0 ( x),1 ( x), 0 ( x), 1 ( x)为插值基函数,且均为次数 不超过3的多项式。为满足插值条件,它们应满足
5.4.2 三次Hermite插值
--考虑只有两个节点的三次Hermite插值
已知插值节点 x0 , x1 上的函数值及导数值分别 为
yi f ( xi ), mi f ( xi ), (i 0,1),
要求的是一次数不超过3的多项式 H3 ( x) ,使满足
( xi ) mi , (i 0,1). H3 ( xi ) yi , H3
x0 , x1均为R3 ( x)的二重零点 ,因此可设
R3 ( x) K ( x)(x x0 )2 ( x x1 )2
其中K ( x)待定
构造辅助函数
均是 二重零点
(t ) f (t ) H3 (t ) K( x)(t x0 )2 (t x1 )2
( xi ) f ( xi ) H3 ( xi ) K( x)(xi x0 )2 ( xi x1 )2 0
两点三次Hermite插值的余项
两点三次Hermite插值的误差为
R3 ( x) f ( x) H 3 ( x) R3 ( xi ) f ( xi ) H 3 ( xi ) 0 ( xi ) f ( xi ) H 3 ( xi ) 0 R3
i 0 ,1
其中a,b为待定系数。
1 . 由 0 ( x0 ) 1, 可得 a 2 ( x0 x1 ) 2 . ( x0 ) 0, 可得 b 由 0 3 ( x0 x1 )
将a,b代入得
x x0 x x1 0 ( x) 1 2 x1 x0 x0 x1
函数值
导数值
x0
x1
0
1
x0
0 0
1
x1
0 0 0
1
0 ( x)
1( x)
0 ( x )
1
0 0 0
0 0
1 ( x)
0
0 ( x ) 2 ( x x ) ( x1 ) 0, 故 0 ( x)含有 由于 0 ( x1 ) 0 因子。可设 1
0 ( x) (a b( x x0 ))( x x1 )2
x x1 0 ( x ) ( x x0 ) x0 x1
2
类似地,将 x0 , x1 互换,可得
x x0 1 ( x ) ( x x1 ) x1 x0
2
x x0 x x1 0 ( x) 1 2 x1 x0 x0 x1
例. 已知f ( x)在节点1 , 2处的函数值为f (1) 2, f (2) 3
f ( x)在节点1, 2处的导数值为f (1) 0, f (2) 1
求f ( x)的两点三次插值多项式 , 及f ( x)在x 1.5,1.7处的函数值 .
解:
x0 1, x1 2
2
三次Hermite插值多项式 H3 ( x) 的表达式为
H3 ( x) y00 ( x) y11( x) m00 ( x) m11( x)
可以证明,其余项为
f (4) ( ) R3 ( x ) f ( x ) H 3 ( x ) ( x x0 ) 2 ( x x1 ) 2 , 4! 其中 介于 x0 , x1 之间。
2
( xi ) mi , (i 0,1) H3 ( xi ) yi , H3 H3 ( x) y00 ( x) y11( x) m00 ( x) m11( x)
函数值
导数值
x0
x101源自x00 01x1
0 0 0
1
0 ( x)
1( x)
0 ( x )
1
0 0 0
P( xi ) f ( xi ) fi P( xi ) f ( xi ) fi P( xi ) f ( xi ) fi
P ( m ) ( xi ) f ( m ) ( xi ) f i ( m )
i 0 ,1, , n
定义. 称满足(1)或(2)式的插值问题为Hermite插值, 称满足(1)或(2)式的插值多项式P(x)为Hermite插值多项式, 记为 H k ( x) ,k为多项式次数.
作为多项式插值,三次已是较高的次数,次数再高就有 可能发生Runge现象,因此,对有n+1节点的插值问题, 我们可以使用分段两点三次Hermite插值
例1 对给定数表
x
y
x0 y0
x1 y1 m1
x2 y2
y
求一个三次Hermite插值多项式 H3 ( x) 满足条件
( x1 ) m1, (i 0,1,2), H3 ( xi ) yi , H3
f ( 4 ) ( ) K ( x) 4!
所以,两点三次Hermite插值的余项为
f ( 4 ) ( ) R3 ( x ) ( x x0 )2 ( x x1 )2 4!
x0 x1
以上分析都能成立吗?
当f ( x)在[ x0 , x1 ]上存在时 , 上述余项公式成立