等距节点插值公式
- 格式:ppt
- 大小:49.50 KB
- 文档页数:7
§2 等距节点插值和差分摘要:在等距节点情况下,通过使用差分可减少Newton 插值公式的计算量。
本节首先介绍等距节点下的差分公式、差分与差商之间关系,根据待估值点x 的位置不同,引入表初公式、表末公式和Bessel 公式,最后说明在使用差分计算插值时需注意的两点:(1)不宜用高阶差分公式;(2)差分公式是一个不稳定的计算公式。
等距节点:1,1,2,,i i x x h i n +-==,h 称为步长2.2.1 差分概念一阶差分:()()()1i i i f x f x f x +∆=- 二阶差分:()()()21i i i f x f x f x +∆=∆-∆ … … … …k 阶差分:()()()111k k k i i i f x f x f x --+∆=∆-∆()()()()()()()()()123110231(1)(1)ki i k i k i k i k k k i i kk jk j j k k f x f x kf x f x x kf x f x k f x j ++-+-+--+-+=⎛⎫⎛⎫∆=-+-+⎪ ⎪⎝⎭⎝⎭+-+-⎛⎫=- ⎪⎝⎭∑2.2.2 差分与差商关系定理2.2.1 在等距节点的情况下 ()()1121,,,,!k k k k f x f x x x x h k +∆=.利用归纳法证明这个公式是在Newton 公式中使用差商的基础 2.2.3 差分表()()()()()()()()()()()()()()()11221233212344321234554321x f x x f x f x x f x f x f x x f x f x f x f x x f x f x f x f x f x ∆∆∆∆∆∆∆∆∆∆2.2.4 根据待估值点x 的位置不同选择不同的计算公式 给定等距节点组:{}12,,,n x x x● 表初公式:如果x 在节点中最小的那个节点附近 节点选取:1213111,,2,,.k x x x h x x h x x kh +=+=+=+x 的表示:1x x ph =+牛顿公式:()(1)(1)(1)2111112!!10.p p p p p k k k kjj P x ph f p f f f p f j --⋅⋅-+=+=+∆+∆++∆⎛⎫=∆ ⎪⎝⎭∑例2.2.1 有函数表x 0.5 0.6 0.7 0.8 f(x) 0.4794 0.5646 0.6442 0.7174 求f(0.54).解:差分表(1)(1)(2)23!0.540.5,0.1,0.4(0.54)0.47940.0852(0.0056)(0.0008)0.5142p p p p p x ph h p P p ---==+===+⨯+-+-=● 表末公式:如果x 在最大节点附近 节点选取与编号:010200(max),,2,,.k x x x h x x h x x kh ---=-=-=-x 的表示:0x x ph =-牛顿公式:()()(1)(1)(1)200122!!0()(1)1.p p p p p k kk kk kjjj j P x ph f x p f f f p f j --⋅⋅-+----=-=-∆+∆++-∆⎛⎫=-∆ ⎪⎝⎭∑● 贝塞尔(Bessel)公式:如果x 在中间节点附近 节点选取与编号:121012,,,,,,,,k k k x x x x x x x -+-+-第一种组序:01122(1),,,,,,k k x x x x x x x ----,Newton 公式1:()1121200011212k k j jj j j j p j p j P x ph f f f j j --+--==++-⎛⎫⎛⎫+=+∆+∆ ⎪ ⎪+⎝⎭⎝⎭∑∑ 第二种组序:()10211,,,,,,k k x x x x x x ---Newton 公式2:()112120110111212k k j jj j j j p j p j P x ph f f f j j --+--+==+-+-⎛⎫⎛⎫+=+∆+∆ ⎪ ⎪+⎝⎭⎝⎭∑∑ Bessel 公式:(Newton1+Newton2)/2()12101002211111/222211.22k j j j j jk j j j p j f f p P x ph f j j f f p j j -+-=---+=+-⎛⎫+-+=+∆+ ⎪+⎝⎭∆+∆+-⎛⎫ ⎪⎝⎭∑∑Bessel 公式适合计算01,01x x x p <<<<,特别是12p =.()2244011021102132821282f f f f f f P x h ---+∆+∆∆+∆+=-++ 例 2.2.2 表2.10求()f 0.525Bessel 公式的截断误差:取2n 个节点()()22(2)22(1)11111(1),2!2222n n n nf R x n n h n x x ξξ--⎛⎫⎛⎫⎛⎫⎛⎫⎛⎫=---- ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭⎝⎭⎝⎭⎝⎭<< 2.2.5 差分公式的缺点1)高阶差分容易造成有效数字的丢失,见表2.10 原因?2)差分容易扩大传播误差3322321123230012323411012332422110232433201123364x y x y y x y y y x y y y y x y y y y y x y y y y y x y y y y y εεεεεεεεεεεεε------------------∆∆∆+∆+∆+∆+∆-∆-∆-∆-∆∆+∆-∆+∆∆-∆∆-。
第四节差分与等距节点插值公式差分与等距节点插值是数值计算中常用的一种插值方法,它使用离散的节点以及节点处的函数值,通过差分运算得到函数的近似值。
在本节中,将介绍差分和等距节点插值的基本思想和公式,并给出一些具体的例子和应用。
差分与等距节点插值的基本思想是利用函数在节点上的值来近似函数在其他点上的值,而节点之间的间隔是相等的。
具体来说,我们可以通过计算函数在节点上的导数来近似函数在其他点上的导数,进而得到函数在其他点上的近似值。
一维差分插值的基本公式是拉格朗日插值公式。
设函数f(x)在等距节点x0, x1, ..., xn上的值分别为y0, y1, ..., yn,则拉格朗日插值公式可以表示为:f(x) ≈ P(x) = ∑[(x - xi) / (xj - xi)] * yj其中,i ≠ j,∑表示对j的求和,xi表示节点的值,xj表示其他任意点的值,yj表示其他节点处函数的值。
多维差分插值的基本公式也是类似的。
设函数f(x1, x2, ..., xn)在等距节点(xi1, xi2, ..., xin)上的值分别为yij,则多维拉格朗日插值公式可以表示为:f(x1, x2, ..., xn) ≈ P(x1, x2, ..., xn) = ∑[∏(xk - xik) / (xjk - xik)] * yij其中,∏表示对k的连乘,i ≠ j,xi1, xi2, ..., xin表示节点的值,xj1, xj2, ..., xjn表示其他任意点的值,yij表示其他节点处函数的值。
差分与等距节点插值在实际应用中有广泛的用途。
例如,在数值微分中,我们可以使用差分公式来近似计算函数在特定点上的导数。
其中,常用的差分公式有中心差分公式、向前差分公式和向后差分公式。
中心差分公式通过函数在相邻两个节点上的值来近似计算函数在中间点的导数。
向前差分公式通过函数在当前节点和下一个节点上的值来近似计算函数在当前点的导数。
已知等距节点的插值型求积公式等距节点的插值型求积公式是一种数值积分方法,它可以在一段区间上对函数进行积分。
这种方法使用等距节点,即在确定的区间上使用同样间隔的节点,然后通过插值方法来近似原函数,最终得到积分结果。
以下是已知等距节点的插值型求积公式的详细解释。
首先,我们需要确定插值点的数量和位置。
等距节点的插值型求积公式通常使用n个等距节点,每个节点的间距为h。
插值点的位置可以表示为x0, x1, x2... xn-1,其中x0是区间的左端点,xn-1是右端点。
接下来,我们需要使用Lagrange插值多项式来近似原函数。
Lagrange插值多项式是一个n次多项式,用于在n个给定点上插值。
对于等距节点的插值型求积公式,Lagrange插值多项式的形式为:L(x) = Σf(xi)Li(x)其中,f(xi)是在插值点xi处的函数值,Li(x)是拉格朗日插值基函数。
拉格朗日插值基函数可以表示为:Li(x) = Π(j=0,j!=i) ((x-xj)/(xi-xj))其中,Π代表乘积,j!=i表示j不等于i。
然后,我们需要对Lagrange插值多项式进行积分,从而得到插值型求积公式。
插值型求积公式的形式为:∫f(x)dx ≈∫L(x)dx = hΣf(xi)wi其中,wi是插值点xi处的权重,它们的值可以通过求解以下方程组得到:Σwi = nΣxiwi = 0Σ(x^2i)wi = (n^2-1)/3通过解方程组,我们可以得到每个插值点的权重,从而得到插值型求积公式。
该公式可以用于对函数进行数值积分,从而得到近似的积分值。
总之,已知等距节点的插值型求积公式是一种使用n个等距节点的Lagrange 插值多项式来近似原函数,并通过对多项式进行积分得到的数值积分方法。
它可以用于对函数进行数值积分,从而得到近似的积分值。
2012-2013(1)专业课程实践论文等距节点插值公式柳希元,0818180127,R数学08-1班一、算法理论将Newton差商插值多项式中各阶差商用相应差分替代,就可得到各种形式的等距节点插值公式。
如果节点错误!未找到引用源。
要计算错误!未找到引用源。
附近点x 的函数错误!未找到引用源。
值,可令错误!未找到引用源。
于是为Newton前插公式。
其中如果要求表示函数在错误!未找到引用源。
附近的值错误!未找到引用源。
此时应用Newton插值公式,插值点应按错误!未找到引用源。
的次序排列,有做变换错误!未找到引用源。
带入公式得为Newton后插公式。
其中二、算法框图三、算法程序class Interpolation{Interpolation(int num, double x1, double x2, double func[]);double ComputeForwardValue(double x); // compute forward interpolation value ~Interpolation();private:void GetForwardTable(); // get the forward differential tableprivate:int m_num; // the number of interpolation pointsdouble m_x1, m_x2; // the first point m_x1 and last point m_x2double m_step; // the interpolation stepdouble* m_func; // the function value of interpolation pointsdouble* m_ftable; // the forward differential table};#include<iostream>#include<limits>using namespace std;#define NUM 11//上¦?面?输º?入¨?需¨¨要°a多¨¤少¦¨´个?样¨´本À?#define MIN 0//上¦?面?输º?入¨?区?间?的Ì?最Á?小?值¦Ì#define MAX 10//上¦?面?输º?入¨?区?间?的Ì?最Á?大䨮值¦Ìint main(){//下?面?输º?入¨?y的Ì?值¦Ìdouble func[NUM]=0,1,4,9,16,25,36,49,64,81,100};//上¦?面?输º?入¨?y的Ì?值¦Ìdouble x1=MIN, x2=MAX, x;int num=NUM;char flag='Y';Interpolation test(num, x1, x2, func);while(flag=='Y'){cout<<"Input x: ";cin>>x;if (!cin) // checking failure state{cin.clear(); // clear failure tagcin.ignore(numeric_limits<int>::max(), '\n'); // clear input buffercontinue;}if(x<x1 || x>x2){cout<<"---Invalid input: "<<x<<"---"<<endl;cout<<"Only the number between "<<x1<<" and "<<x2<<" is valid..."<<endl; }else{cout<<"Forward interpolation value:"<<puteForwardValue(x+0.001)<<endl;}cout<<endl<<"Do you want to process? please input(Y/N):"<<endl;cin>>flag;}return 0;}Interpolation::Interpolation(int num, double x1, double x2, double func[]) {m_num = num;m_x1 = x1;m_x2 = x2;m_step = (m_x2-m_x1)/(num-1);m_func = new double[m_num];m_ftable = new double[m_num];for (int i=0; i<m_num; ++i){m_func[i] = func[i];m_ftable[i] = func[i];}GetForwardTable();}Interpolation::~Interpolation(){delete m_func;delete m_ftable;}void Interpolation::GetForwardTable(){// get the forward differential tableint i, j;for (i=1; i<m_num; ++i)for (j=m_num-1; j>=i; --j)m_ftable[j] = m_ftable[j]-m_ftable[j-1];}double Interpolation::ComputeForwardValue(double x){// compute forward interpolation valuedouble* coef; //coefficient talbedouble result, t;int i;coef = new double[m_num];t = (x-m_x1)/m_step;for (i=1, coef[0]=1; i<m_num; ++i) //compute the coefficient tablecoef[i] = coef[i-1]*(t-i+1)/i;for (i=0, result=0; i<m_num; ++i)result += m_ftable[i]*coef[i];delete coef;return result;}四、算法实现例 1.当错误!未找到引用源。