牛顿插值法的应用_王春霖

合集下载

牛顿插值法原理及应用

牛顿插值法原理及应用

牛顿插值法插值法是利用函数f (x)在某区间中若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值。

如果这特定函数是多项式,就称它为插值多项式。

当插值节点增减时全部插值基函数均要随之变化,这在实际计算中很不方便。

为了克服这一缺点,提出了牛顿插值。

牛顿插值通过求各阶差商,递推得到的一个公式:f(x)=f[x0]+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)+...f[x0,...xn](x-x0 )...(x-xn-1)+Rn(x)。

插值函数插值函数的概念及相关性质[1]定义:设连续函数y-f(x) 在区间[a,b]上有定义,已知在n+1个互异的点x0,x1,…xn上取值分别为y0,y1,…yn (设a≤ x1≤x2……≤xn≤b)。

若在函数类中存在以简单函数P(x) ,使得P(xi)=yi,则称P(x) 为f(x)的插值函数.称x1,x2,…xn 为插值节点,称[a,b]为插值区间。

定理:n次代数插值问题的解存在且唯一。

牛顿插值法C程序程序框图#include<stdio.h>void main(){float x[11],y[11][11],xx,temp,newton;int i,j,n;printf("Newton插值:\n请输入要运算的值:x=");scanf("%f",&xx);printf("请输入插值的次数(n<11):n=");scanf("%d",&n);printf("请输入%d组值:\n",n+1);for(i=0;i<n+1;i++){ printf("x%d=",i);scanf("%f",&x[i]);printf("y%d=",i);scanf("%f",&y[0][i]);}for(i=1;i<n+1;i++)for(j=i;j<n+1;j++){ if(i>1)y[i][j]=(y[i-1][j]-y[i-1][j-1])/(x[j]-x[j-i]);elsey[i][j]=(y[i-1][j]-y[i-1][j-1])/(x[j]-x[j-1]);printf("%f\n",y[i][i]);}temp=1;newton=y[0][0];for(i=1;i<n+1;i++){ temp=temp*(xx-x[i-1]);newton=newton+y[i][i]*temp;}printf("求得的结果为:N(%.4f)=%9f\n",xx,newton);牛顿插值法Matlab程序function f = Newton(x,y,x0)syms t;if(length(x) == length(y))n = length(x);c(1:n) = 0.0;elsedisp(&apos;x和y的维数不相等!&apos;);return;endf = y(1);y1 = 0;l = 1;for(i=1:n-1)for(j=i+1:n)y1(j) = (y(j)-y(i))/(x(j)-x(i));endc(i) = y1(i+1);l = l*(t-x(i));f = f + c(i)*l;simplify(f);y = y1;if(i==n-1)if(nargin == 3)f = subs(f,&apos;t&apos;,x0);elsef = collect(f); %将插值多项式展开f = vpa(f, 6);endend牛顿插值法摘要:值法利用函数f (x)在某区间中若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值。

牛顿(newton)插值法

牛顿(newton)插值法

牛顿(newton)插值法牛顿插值法是一种数值分析中的插值方法,它用于找到一个多项式函数,该函数会经过给定的一系列数据点。

该方法最初由英国数学家艾萨克·牛顿(Isaac Newton)发明并称为插值多项式,它也被称作差分插值法。

插值是数学和工程学中的一项重要任务,它是用于在给定数据点之间构建连续函数的一种数值方法。

插值方法通常涉及过渡从观察结果派生出抽象结果的过程,从而使得预测可能的结果取得更加准确。

下面介绍牛顿插值法的基本原理。

插值基础插值基础是插值方法中的一个重要概念。

在这里,我们将对牛顿插值法中用到的插值基础进行简要介绍。

一个插值基础是指一个已知数据点的集合,通常是一个 x 坐标和对应的 y 坐标。

每个插值基础一般定义为一个数据点的函数,该函数包含了给定点的所有信息并将这些信息用于构建连续函数。

在牛顿插值法中,我们使用差分来定义插值基础。

差分是指两个相邻数据点之间 y 坐标的差值。

具体来说,若给定以下节点:x0, y0x1, y1x2, y2...xn, yn我们则通过以下的 "+" 符号所示的不断进行差分的方式来构建一个插值基础:y0y1-y0…yn-yn-1 yn-yn-1 yn-yn-2 ... yn-y0上述图表所展示的差分的值即为定义插值基础的差商(divided difference)。

牛顿插值公式基于上述插值基础和差商,我们现在可以使用牛顿插值公式来实现插值。

具体来说,牛顿插值公式可以表示为:f(x) = y0 + d1*f[x0,x1] + d2*f[x0,x1,x2] + ... + dn*f[x0,x1,...,xn]其中 f(x) 是插值函数,x0, x1, ..., xn 是给定的节点,y0, y1, ..., yn 是对应的 y 值,f[x0,x1] 是差商 f(x0,...,x1) 的值,d1, d2, ..., dn 也是差商。

请注意,插值函数的次数最高为 n - 1,这意味着插值函数与插值基础的次数相同。

牛顿插值法介绍

牛顿插值法介绍

牛顿插值法介绍本文将介绍牛顿插值法的基本原理、计算过程、优缺点以及在实际问题中的应用。

首先,我们将简要介绍插值法的基本概念和牛顿插值法的由来,然后详细讨论牛顿插值法的计算步骤和算法,接着分析其优缺点以及适用范围,最后通过几个实际问题的例子展示牛顿插值法的应用场景。

一、插值法基本概念在数学和计算机领域,插值是指根据已知的离散数据点构造满足这些数据点的曲线或函数的过程。

假设我们有一组数据点{(x1, y1), (x2, y2), ..., (xn, yn)},我们想要通过这些数据点构建一个函数f(x),使得f(xi) = yi,其中i = 1, 2, ..., n。

这样的函数就是经过插值的函数,它代表了这些数据点的趋势和变化规律。

插值法通常用于寻找这样的函数,它能够通过已知的数据点来估计函数在其他位置的值。

常见的插值方法包括拉格朗日插值法、牛顿插值法和埃尔米特插值法等。

在这些方法中,牛顿插值法是最为广泛使用的一种,因为它的计算效率高、精度较高,并且易于编程实现。

二、牛顿插值法的由来牛顿插值法由艾萨克·牛顿在17世纪提出,他是一位英国著名的数学家、物理学家和天文学家,在微积分、物理学和光学等领域都做出了重大贡献。

牛顿发展了牛顿插值法的理论基础和计算方法,并将其应用于数据分析和天体运动等问题中。

牛顿插值法基于牛顿插值多项式的概念,该多项式利用差商(divided differences)来表示,并具有易于计算和分析的优势。

牛顿插值多项式能够在已知的数据点上进行插值,并且还可以通过添加新的数据点来动态地更新插值结果。

因此,牛顿插值法成为了一种非常有用的数值计算工具,被广泛应用于工程、科学和金融等领域。

三、牛顿插值法的计算步骤1. 确定数据点首先,我们需要确定一组离散的数据点{(x1, y1), (x2, y2), ..., (xn, yn)},这些数据点是我们已知的数据,我们要通过它们来构建插值函数。

牛顿插值法的应用

牛顿插值法的应用

牛顿插值法的应用
牛顿插值法是指在给定若干个离散数据点的情况下,通过构造一个基于这些数据点的插值多项式,来近似表示原始数据的方法。

该方法可以用于实际问题中的数据拟合和函数近似计算。

具体地,我们可以使用牛顿插值法来计算一个函数在某些特定点的近似值,或者在整个定义域内的近似函数值。

这种方法基于拉格朗日插值法,但是使用了前向和后向递推的方法来避免了计算插值多项式中高次导数的复杂度。

使用牛顿插值法的过程中,我们需要先根据给定的数据点,构造出一个插值多项式的基函数,然后通过递推来确定插值多项式本身。

基函数的构造依赖于数据点的数量,但是可以证明这些基函数是唯一的。

通过递推求解插值多项式,可以得到一个包含所有数据点的一元多项式,从而得到对函数在某些特定点的近似值或者对函数在整个定义域内的近似函数值。

总之,牛顿插值法是一种基于递推的插值近似方法,可以用于实际问题中的数据拟合与函数近似计算。

Newton插值法的程序设计与应用

Newton插值法的程序设计与应用

Newton插值法的程序设计与应用Newton插值法是一种常用的数值插值方法,用于通过已知数据点的函数值来估计未知数据点的函数值。

它基于多项式插值的思想,通过构造一个插值多项式来逼近原始函数。

在程序设计中,我们可以使用Newton插值法来实现数据的插值计算。

下面将详细介绍Newton插值法的程序设计与应用。

1. 程序设计思路- 输入:已知数据点的横纵坐标数组,以及待估计的未知数据点的横坐标。

- 输出:通过Newton插值法估计得到的未知数据点的纵坐标。

- 程序设计步骤:1) 根据已知数据点的横纵坐标数组,计算并存储差商表。

2) 根据待估计的未知数据点的横坐标,利用差商表计算插值多项式的系数。

3) 利用插值多项式的系数计算未知数据点的纵坐标。

2. 差商表的计算差商表是Newton插值法的关键部份,用于计算插值多项式的系数。

差商表的计算可以通过递推公式来实现。

- 输入:已知数据点的横纵坐标数组。

- 输出:差商表,存储了各阶差商的值。

- 程序设计步骤:1) 初始化差商表为一个空的二维数组。

2) 将已知数据点的纵坐标作为差商表的第一列。

3) 逐阶计算差商表的其他列,使用递推公式:f[x0, x1, ..., xn] = (f[x1, ..., xn] - f[x0, ..., xn-1]) / (xn - x0)。

4) 返回计算得到的差商表。

3. 插值多项式的系数计算插值多项式的系数可以通过差商表来计算,具体计算方法如下:- 输入:差商表,待估计的未知数据点的横坐标。

- 输出:插值多项式的系数。

- 程序设计步骤:1) 初始化插值多项式的系数为一个空的数组。

2) 逐阶计算插值多项式的系数,使用递推公式:a[i] = f[x0, x1, ..., xi]。

3) 返回计算得到的插值多项式的系数。

4. 未知数据点的纵坐标计算利用插值多项式的系数,可以计算待估计的未知数据点的纵坐标。

- 输入:插值多项式的系数,待估计的未知数据点的横坐标。

Newton插值法的程序设计与应用

Newton插值法的程序设计与应用

引言在我们生活中,许多实际问题都都可以利用函数来表示某种内在规律的数量关系,但是在很多应用领域,函数)(x f 有时不能直接写出表达式或者过于复杂不易计算,而只能给出函数)(x f 在若干个点上的函数值或导数值,通常也是造一张函数表,当遇到要求表中未列出的变量的函数值时,就必须做数值逼近.例如给定了函数)(x f 在几个特定点上的函数值,为了研究函数的变化规律,就要根据这个表,将其公式化寻求某一函数)(x y 去逼近)(x f ,在给定点上等于函数值,在其他点上约等于函数值,这样)(x y 既能反映)(x f 的函数特性,又便于计算.称)(x y 的插值函数,)(x f 为被插值函数.我们可以求一个待定函数来近似反映函数的特性,使得待定函数在给定点上等于函数值,在其它点上的函数的值作为函数的近似值,这种方法称为插值法.利用差值函数很容易得到Lagrange 插值多项式,公式结构紧凑,在理论分析中甚为方便.由于公式中的每一项与所有的插值结点有关.因此,如果需要增加一个插值结点,则Lagrange 插值公式中的每一项都需要改变计算量大,为了克服这一缺点,于是产生了Newton 插值法.有的要求更高需要在某些点处的导数也相同于是前两种方法达不到精度于是产生了Hermite 插值法.本题主要讨论牛顿插值多项式.主要是对牛顿插值法的理论总结,利用C++程序和Matlab 语言程序编写,以及对其应用讨论.第一章 插值方法求得近似函数的方法通常有两种:一种是插值法,另一种是曲线拟合法.本章主要讨论插值法用多项式来逼近列表函数问题,即具有唯一插值函数的多项式插值,对其中的多项式插值主要讨论n 次多项式插值的方法,即给定n+1各点处的函数值后,怎样构造一个n 次插值多项式的方法.§1.1插值问题的由来在许多实际问题及科学研究中,因素之间往往存在函数关系.然而这种关系经常很难有明显的解析表达式,通常只是由观察与测试得到一些离散数值.有时由于表达式过于复杂,不仅使用不便,而且不易于进行计算与理论分析.解决此类问题的方法有两种:一种是插值法,另一种是拟合法.插值法是一种古老的数学方法,他来自生产实践,早在一千多年前,我国科学家在研究历法上就应用了线性插值与二次插值,但它的基本理论却是在微积分产生之后才逐渐完善的,其应用也逐步增多.特别是在计算机软件中,许三多库函数.等的计算实际上归结于它的逼近函数的计算.在工程的实际问题中,由于航空、造船、精密机械加工等实际问题的需要,插值方法在实践上和理论上显得更为重要,并得到了进一步的发展和广泛的应用.因此我们希望能够得到一个“简单函数”逼近被计算函数的函数值.于是就得到了一种方法.叫做插值逼近或者插值法.§1.2 几个基本概念§1.2.1 插值函数的概念及相关性质定义 1.1 设连续函数)(x f y -在区间],[b a 上有定义,已知在1+n 个互异的点n x x x ,,,10 上取值分别为n y y y ,,10(设b x x x a n ≤<<<≤ 10).若在函数类中存在以简单函数)(x p ,使得i i y x p =)((n i ,1,0=),则称)(x p 为)(x f 的插值函数. 称n x x x ,,,10 为插值节点,称],[b a 为插值区间. 定义1.2 设如下表i x0x 1xn x iyy1yny求一个)(x p ,使其满足: ○1)()(x IP x p n ∈○2i i i y x f x P ==)()(, n i ,,1,0 =则称)(x p 为)(x f 的n 次代数插值多项式,该问题称为n 次代数插值问题.定理1.1 n 次代数插值问题的解存在且唯一 .§1.2.2 Lagrange 插值函数的概念及相关性质定义1.3 若n 次多项式)(x l k (n k ,1,0=)在1+n 个互异节点n x x x ,,,10 上满足),,1,0,(,0,1)(n j k kj kj x l kj j k =⎩⎨⎧≠===δ则称)(x l k (n k ,,1,0 =)为节点n x x x ,,,10 上的n 次插值基函数. n 次差值多项式)(x L n 为)()(0x l y x L k nk k n ∑==称之为拉格朗日多项式.定理1.2 设],[1b a C f n +∈,则余项为:)()!1()()(11x w n f x R n n n +++=ξ其中)())(()(101n n x x x x x x x w ---=+ .§1.2.3 差商的概念及相关性质定义1.4 称函数)(x f 于点j i x x ,(j i x x ≠)上的平均变化率为)(x f 在j i x x ,处的一阶差商,记作],[j i x x f ,即ij i j j i x x x f x f x x f --=)()(],[,j i x x ≠.一阶差商的差商为)(x f 在点k j i x x x ,,处的二阶差商.记作],,[k j i x x x f ,即ik j i k j k j i x x x x f x x f x x x f --=],[],[],,[一般地,在求出)(x f 的1-m 阶差商后就可以构造)(x f 的m 阶差商.称10110],,[],[],,,[i im im i im i im i i x x x x f x x f x x x f --=-为)(x f 在im i i x x x ,,10处的m 阶差商.特别地,规定零阶差商)(][i i x f x f =.性质1.1 任意调换插值节点的次序其值不变 即],,[],,[],,[120201210x x x f x x x f x x x f ==性质1.2 差商是一个数,可表示为某个函数的线性组合.性质1.3 当)(x f 的m 阶导数)()(x f m 在包含节点im i i x x x ,,10的某个区间上存在时,在 im i i x x x ,,10之间至少存在一点ξ使!)(],,,[)(10m f x x x f m im i i ξ=注1.1 由性质2可以推出,n 次多项式的一阶差商是1-n 多项式.表1-1差商表k x )(kx f 一阶差商 二阶差商三阶差商四阶差商x)(kx f1x )(kx f ],[10x x f2x)(kxf],[21x x f ],,[21x x x f3x )(k x f ],[32x x f ],,[321x x x f ],,,[321x x x x f4x)(kx f],[43x x f],,[432x x x f],,[321x x x f],,,,[4321x x x x x f§1.2.3 Newton 插值函数与差分的概念及相关性质 定义1.5 我们定义牛顿插值公式为)())(](,,,[))(](,,[)](,[)()(1111211----++--+-+=n nnx x x x x x x x x f x x x x x x x f x x x x f x f x N (1.1)定义1.6 设函数)(x f y =在等距节点kh x x k +=0),,1,0(n k =上的函数值)(k k x f y = ),,1,0(n k =,其中h 为常数,称为步长.称函数在每个小区间上的增量k k y y -+1为函数)(x f 在k x 处以h 为步长的一阶向前差分,记作k y ∆,即k y ∆k k y y -=+1称一阶差分的差分1+∆k y -k y ∆为二阶差分,记作k y 2∆,即k k k k k k y y y y y y +-=∆-∆=∆+++12122由此可得1-m 阶差分的差分k m k m k m y y y 111-+-∆-∆=∆为)(x f 在k x 点处的m 阶差分.称1--k k y y 为函数)(x f 在k x 处以h 为步长的一阶向后差分,记作k y ∇.即1--=∇k k k y y y称111---∇-∇k m k m y y 为函数)(x f 在k x 处以h 为步长的m 阶向后差分,记作k m y ∇. 即111---∇-∇=∇k m k m k m y y y表1-2 向前差分表ix i y i y ∆y 2∆y 3∆y 3∆x1y1x 1y 0y ∆2x2y1y ∆02y ∆3x 3y 2y ∆ 12y ∆03y ∆4x4y2y ∆22y ∆13y ∆3y ∆表1-3向后差分表ix i y i y ∇y 2∇y 3∇y 3∇x1y1x 1y 0y ∇2x2y1y ∇02y ∇3x 3y 2y ∇ 12y ∇ 03y ∇4x4y2y ∇22y ∇13y ∇3y ∇性质1.4 各阶差分可以表示成函数值的线性组合.即(1)k n j knnk k j ny C y -+=∑-=∆0)1( (2)k j knn k k j ny C y -=∑-=∇0)1( 性质1.5 差商与差分有如下关系n n nn n h n f h n f x x x f !!],,,[0010∇=∆=定义1.7 设1+n 个等距插值节点的顺序为n n x x x x ,,,110- ,则由差商表示的牛顿插值公式为)()](,,,[))(](,,[)](,[][)(111211---++--+-+=n nnx x x x x x x f x x x x x x x f x x x x f x f x N又设插值节点th x x +=0 )0(n t <<由性质1.5差商与差分关系kk k h k f x x x f !],,,[010∆=可得∑=∆+--=∆+--++∆-+∆+=nk knn f k k t t t f n n t t t f t t f t f x N 00200!)1()1(!)1()1(!2)1()( (1.2) 称为牛顿前插公式.其余项公式为,)()1()!1()()()(110++--+=+=n n n n h n t t t n f th x R x R ξ],[0n x x ∈ξ定义1.8 设1+n 个等距插值节点的顺序为011,,,x x x x n n -,则由差商表示的牛顿插值公式为)()](,,,[))()(](,,[)](,[][)(10121211x x x x x x x f x x x x x x x x x f x x x x f x f x N n n n n n n n n n n n n n n --++---+-+=------又设插值节点th x x n -= )0(n t <<由性质1.5差商与差分关系knk k n n n hk f x x x f !],,,[1∇=-- 可得∑=∆+---=∆+---+-∇-+∇-=nk nkk nnn n n n n f k k t t t f n n t t t f t t f t f x N 02!)1()1()1(!)1()1()1(!2)1()( (1.3) 称为牛顿后插公式.其余项公式为,)1)(()1()!1()()()(111+++---+=-=n n n n n n h n t t t n f th x R x R ξ],[0n x x ∈ξ第二章 Newton 插值法的程序设计与应用利用插值基函数很容易得到Lagrange 插值多项式,公式结构紧凑,在理论分析中也很方便,但当插值节点增减时全部插值基函数)(x l i n i ,,1,0 =都要随之变化,整个公式也将发生变化,这在实际计算中是很不方便的,于是我们导出插值多项式的又一种表示形式——Newton 插值公式.远远减少了工作量.但由于通过相同结点的差值多项式是惟一的,因此,拉格朗日差值公式与牛顿公式本质上是一个多项式,只不过形式不同而已.为了更方便的应用Newton 插法,本章主要讨论Newton 插值法的程序设计,并对其应用进行讨论.§2.1 Newton 插值法的算法与程序设计本节主要讨论n 次多项式插值的方法,即给定n+1各点处的函数值后,怎样构造一个n 次插值多项式的方法.为了更方便的计算并与计算机结合,我们便作出了相应的程序.并利用Matlab 进行绘图.§2.1.1 Newton 插值法的应用步骤步骤 首先我们按照表1-1,求得各点的差商.然后利用Newton 前差或后差公式即(公式1.3)把数值带入.即可以求得n 次多项式. 它在计算机上的应用步骤如下:步骤1 输入所要求的牛顿多项式的次数n ,并依次输入1+n 个节点),(i i y x .for : i=0 to n+1 {scanf("%f",&x[i]) scanf("%f",&y[0][i]); }步骤2 计算各阶差商 for : i=1 to n+1 {for : j=i to n+1 if(i>1)y[i][j]=(y[i-1][j]-y[i-1][j-1])/(x[j]-x[j-i]); elsey[i][j]=(y[i-1][j]-y[i-1][j-1])/(x[j]-x[j-1]);}步骤3 代入牛顿插值公式,可计算得出结果. for :i=1 to n+1 {temp=temp*(xx-x[i-1]);newton=newton+y[i][i]*temp;}由于篇幅所限,流程图、C 语言程序和Matlab 程序详见附录(附录A 、B 、C ).§2.1.2 利用Newton 插值法程序的实例为了更方便的应用牛顿插值法,我们进行了与计算机的结合,下面我们将展示几个例子.例2.1 已知x y sin =的一组数据为x6π4π3π2πsinx21 22 23 1(1)构造牛顿插值函数并作图分析. (2)并分别利用程序估计12sinπ,1514sinπ的估计值.分析 首先我们可以通过程序求出差商表:带入定义1.5中可求得如下牛顿插值多项式如下)6(2086076.095492926.0)(2π--=x x x x N (2.1)kx)(kx f一阶差商 二阶差商三阶差商四阶差商6π 21 954929268.04π 22 791089631.0086076.2-3π 23607024424.0 35153865.0- 13648909.0-2π125587263.044710035.0-09125470.0-028797106.0)4)(6(13648909.0)6(2086076.095492926.0)(3πππ-----=x x x x x x x N (2.2))3)(4)(6(028797106.0)4)(6(13648909.0)6(2086076.095492926.0)(4ππππππ---+-----=x x x x x x x x x x x N (2.3)第二步 我们分别利用C++程序和Matlab 分别计算12sinπ和1514sinπ的值.步骤如下:○1利用C++程序:首先我们输入所要求的牛顿多项式的次数n ,然后输入n+1个节点的值.即可以得出12sinπ和1514sin π的值为0.2586和0.0804; ○2利用Matlab 程序:首先我们在Matlab 中新建一个文件,文件内容即为附录C 中Matlab 程序代码,然后输入以下步骤:x=[0,pi/6,pi/4,pi/3,pi/2];y=[0,0.5,sqrt(2)./2,sqrt(3)./2,1]; x0=pi/12;Newton(x,y,x0] ans =0.2586x=[0,pi/6,pi/4,pi/3,pi/2];y=[0,0.5,sqrt(2)./2,sqrt(3)./2,1]; x0=14.*pi/15; Newton(x,y,x0) ans =0.0804即结果为0.2586和0.0804利用Matlab 分别对求得的牛顿差值多项式作图(代码详见附录D)图形如下.图2-1例2.2 设)1ln()(x x f +=的函数表如下:x0.25 0.30 0.36 0.39 0.45 )(x f0.2231440.2623640.3074850.3293040.371564试计算)275.1ln(,3.2ln )(=x f分析:同上题步骤我们先求差商表,进而代入公式可得)39.0)(36.0)(30.0)(25.0(057720032.0)36.0)(30.0)(25.0(1411736357.0)30.0)(25.0(294393939.0)25.0(7844.022314.0)(4----+---+----+=x x x x x x x x x x x N ( 2.4))36.0)(30.0)(25.0(1411736357.0)30.0)(25.0(294393939.0)25.0(7844.022314.0)(3---+----+=x x x x x x x N (2.5))30.0)(25.0(294393939.0)25.0(7844.022314.0)(2----+=x x x x N (2.6)利用C++程序我们可以得到计算结果 :242946.0)275.0(4=N ,242945.0)275.0(3=N ,242938.0)275.0(2=N 928823.0)3.1(4=N ,877002.0)3.1(3=N ,737653.0)275.0(2=N 我们利用Matlab 进行绘图.图2-2从上述两个例子我们可以看出,多项式(2.1)在区间]4,0[π周围与原函数逼近的较好.离这个区间越远与原函数的误差越大在5.1=x 处时,该图像就已经开始背离图像了.所以该多项式只能在一个小的区间里可以逼近原函数,不适合作为原函数的逼近函数.也可以看出多项式(2.2)在]3,0[π区间的周围逼近的较好,但是2=x 处时,该图像就离原图像误差较大.多项式(2.3)在区间[0,2.5]都逼近的挺好,从图中我们看出在远离这个区间的图像误差相对较大,但是在这三个多项式中是逼近最好的,同样在例2.2中也是如此.于是我们我们可以得出节点越多,函数逼近的相对较好.在节点附近逼近的越好,越远离节点误差越大,所以公式适用于计算节点附近的值于是为了减小误差,在下一节的等距节点下的插值公式根据所求的点的函数值的不同分别采取了前插和后插公式.§2.2 等距节点下的Newton 插值算法与程序设计前面我们讲述了一般节点下的牛顿插值公式,为了计算方便于是有了对等距节点下的牛顿多项式的研究,本节将对等距节点下的插值多项式进行总结讨论.§2.2.1 等距节点下的Newton 插值法的程序算法步骤步骤 我们按照表1-2或1-3,求差分.然后利用Newton 前插公式(公式1.2)或Newton 后插公式(公式1.3)并把数值带入.即可以求得n 次多项式. 它在计算机上的应用步骤如下:步骤1 输入所要求的牛顿多项式的次数n ,步长h ,并依次输入1+n 个节点),(i i y x .for : i=0 to n+1 {scanf("%f",&x[i]) scanf("%f",&y[0][i]); }步骤2 求得各界差分 for : i=1 to n+1{ for : j=i to n+1y[i][j]=(y[i-1][j+1]-y[i-1][j-1])/(x[j]-x[j]); }//求向前差分for : i=1 to n+1{ for : j=i to n+1y[i][j]=(y[i-1][j]-y[i-1][j-1])/(x[j]-x[j-i]); }//求向后差分步骤3 代入牛顿插值公式,可计算得出结果 for(i=1;i<n+1;i++) {temp=temp*((t-i+1)/i);newton=newton+y[i][i]*temp; }printf("求得的结果为:N(%.4f)=%9f\n",xx,newton); }//求得运用前插公式的值for(i=n;i<0;i--) {temp=temp*((t-i+1)/i);newton=newton+y[n-i][n-i]*temp; }printf("求得的结果为:N(%.4f)=%9f\n",xx,newton); }//求得运用后插公式的值由于篇幅所限 C 语言程序(详见附录D 、E).§2.2.2 等距节点下Newton 插值的实例例2.4 已知x tan 的值列表如下: x 1. 3 1.31 1.32 1.33 x tan 3.6021 3.7471 3.90334.0723近似计算325.1tan ,305.1tan .采用Newton 向后插公式.为此,做差分表i x i f i f ∇ i f 2∇ i f 3∇ 1.3 3.6021 0.1450 0.0112 0.0016 1.31 3.7471 0.1562 0.0128 1.32 3.9033 0.1690 1.334.0723从而,有).2)(1(!30016.0)1(!20128.01690.00723.4)(3++++++=t t t t t t x p 将5.001.033.1325.1-=-=t 代入上式,得9869.3)325.1(325.1tan 3=≈p .将5.201.033.1305.1-=-=t 带入后插多项式中可以得到0797.3)305.1(305.1tan 3=≈p现在我们利用C++程序 首先输入所求插值的次数3和步长0.01.然后输入各个节点,并输入所要求的点1.325既可以求出该点的函数值.即9869.3)325.1(=f . 0797.3)26.1()26.1(3=≈p f下面我们可得图图2-4 例2.4 设函数在各节点的取值如下x0 0.2 0.4 0.6 0.8 1.0 )(x f 1.0 0.818731 0.670320 0.548812 0.449329 0.367879 试利用插值公式求)3.0(f的值.采用Newton向前插公式,同上题我们先做差分表,然后相应带入到差分公式.中求得后插公式.利用C语言程序步骤如下:首先输入所求插值的次数5和步长0.2.然后输入各个节点,并输入所要求的点0.3既可以求出该点的函数值.即7880f.)3.0(.0由以上例子我们看到例1用了牛顿后插公式,例2用了牛顿前插公式,我们该怎样选取.这个经过验证得出,如果所要求的点较靠近节点x,则采用前插公式;如果1x,则采用牛顿后插公式.靠近n附录A :牛顿插值法的流程图N YNYY NNY开始 输入ni=0i=i+1分别输入n+1个输入各节点 j=j+1 i=1;t=1;N=00y j=ii<n j<n? i>1ij j ij x x y --=1-j 1,-i 1j -i y -y 11-j 1,-i 1j -i y -y --=j j ij x x y 输入ij y i<n+1 t=t*(x-1-i x )N=N+i i ty i=i+1输出n 的值附录B:牛顿插值法的程序#include<stdio.h>void main(){float x[11],y[11][11],xx,temp,newton;int i,j,n;printf("Newton插值:\n请输入要运算的值:x=");scanf("%f",&xx);printf("请输入插值的次数(n<11):n=");scanf("%d",&n);printf("请输入%d组值:\n",n+1);for(i=0;i<n+1;i++){ printf("x%d=",i);scanf("%f",&x[i]);printf("y%d=",i);scanf("%f",&y[0][i]);}for(i=1;i<n+1;i++)for(j=i;j<n+1;j++){ if(i>1)y[i][j]=(y[i-1][j]-y[i-1][j-1])/(x[j]-x[j-i]);elsey[i][j]=(y[i-1][j]-y[i-1][j-1])/(x[j]-x[j-1]); printf("%f\n",y[i][i]);}temp=1;newton=y[0][0];for(i=1;i<n+1;i++){ temp=temp*(xx-x[i-1]);newton=newton+y[i][i]*temp;}printf("求得的结果为:N(%.4f)=%9f\n",xx,newton);}附录C:牛顿插值法的Matlab程序function f = Newton(x,y,x0)syms t;if(length(x) == length(y))n = length(x);c(1:n) = 0.0;elsedisp('x和y的维数不相等!');return;endf = y(1);y1 = 0;l = 1;for(i=1:n-1)for(j=i+1:n)y1(j) = (y(j)-y(i))/(x(j)-x(i));endc(i) = y1(i+1);l = l*(t-x(i));f = f + c(i)*l;simplify(f);y = y1;if(i==n-1)if(nargin == 3)f = subs(f,'t',x0);elsef = collect(f); %将插值多项式展开 f = vpa(f, 6);endendend附录D:等距节点下的前插公式的C语言程序#include<stdio.h>void main(){float x[11],y[11][11],xx,temp,newton,t,h;int i,j,n;printf("Newton插值:\n请输入要运算的值:x=");scanf("%f",&xx);printf("请输入插值的次数(n<11):n=");scanf("%d",&n);printf("步长:\n请输入要运算的值:h=");scanf("%f",&h);printf("请输入%d组值:\n",n+1);for(i=0;i<n+1;i++){printf("x%d=",i);scanf("%f",&x[i]);printf("y%d=",i);scanf("%f",&y[0][i]);}t=(xx-x[0])/h;for(i=1;i<n+1;i++)for(j=i;j<n+1;j++){y[i][j]=(y[i-1][j+1]-y[i-1][j]);printf("%f\n",y[i][i]);}temp=1;newton=y[0][0];for(i=1;i<n+1;i++){temp=temp*((t-i+1)/i);newton=newton+y[i][i]*temp;}printf("求得的结果为:N(%.4f)=%9f\n",xx,newton);}附录E:等距节点下的后插公式的C语言程序#include<stdio.h>void main(){float x[11],y[11][11],xx,temp,newton,t,h;int i,j,n;printf("Newton插值:\n请输入要运算的值:x=");scanf("%f",&xx);printf("请输入插值的次数(n<11):n=");scanf("%d",&n);printf("步长:\n请输入要运算的值:h=");scanf("%f",&h);printf("请输入%d组值:\n",n+1);for(i=0;i<n+1;i++){printf("x%d=",i);scanf("%f",&x[i]);printf("y%d=",i);scanf("%f",&y[0][i]);}t=(xx-x[n-1])/h;for(i=1;i<n+1;i++)for(j=i;j<n+1;j++){y[i][j]=(y[i-1][j]-y[i-1][j-1]);printf("%f\n",y[i][i]);}temp=1;newton=y[n-1][n-1];for(i=n;i<0;i--){temp=temp*((t-i+1)/i);newton=newton+y[n-i][n-i]*temp;}printf("求得的结果为:N(%.4f)=%9f\n",xx,newton);}。

牛顿插值法在测量数据处理中的应用

牛顿插值法在测量数据处理中的应用

牛顿插值法在测量数据处理中的应用
牛顿插值法是数值分析的一种有效的插值方法,经常用于测量数据处理中。

它按照牛顿差商的原理,利用已知的几个数据点,求出未知的数据点的数值。

牛顿插值法的优势在于,它可以很好地拟合已知的数据,并可以计算出高次插值函数的系数。

其特点是计算量比较小,但是需要一定的计算能力和计算方法。

在测量数据处理中,牛顿插值法可以用来求解测量中的精度误差。

例如,在测量过程中,有多个测量数据,如果不能在短时间内完成全部的测量,可以采用牛顿插值法,通过已有的数据,推算出未测量的数据,从而获得准确的测量结果。

牛顿插值法还可以用来求解多元函数的拟合,还可以用来求解多元曲线的拟合。

牛顿插值法在测量数据处理中有着广泛的应用,能够有效地解决测量中的精度误差问题,为测量中获取准确的数据提供了可靠的保证。

牛顿插值法在凸轮修正设计中的应用

牛顿插值法在凸轮修正设计中的应用

牛顿插值法在凸轮修正设计中的应用牛顿插值法是一种基于牛顿插值多项式的几何方法,用于在有限数据点的情况下,计算出抛物线的拟合曲线。

这种技术在凸轮修正领域中发挥着重要作用,既能有效地减少凸轮收缩率,又能精确控制凸轮的微细加工精度。

本文将针对凸轮修正设计中应用牛顿插值法,从实用性和适用范围出发,介绍牛顿插值法在该方面的具体应用过程及效果,并结合该法的特点,提出许多技术改进建议。

凸轮修正设计是指将抛物线表面的凸轮的顶点修正平整,达到预定的精度要求。

这种精度需要靠机械加工来实现,但由于凸轮的复杂度及表面形状不规则,需要考虑的参数众多,使得此类修正工作十分费力,又容易出现误差。

牛顿插值法是一种重要的数学方法,它将原先由机械加工实现的修正工作转变成数据运算实现,只需要通过把凸轮表面以抛物线形式近似表达,再结合牛顿插值多项式的数学方程,就能够生成拟合曲线的数据,从而达到减少凸轮收缩率的目的。

牛顿插值法在凸轮修正设计中的实用性表现良好,能够在较低精度要求下,减少对凸轮收缩率的控制。

由于牛顿插值法是可以以有限数据进行任意精度的计算,可以根据不同的精度要求,设定不同的数据点个数,以提高拟合曲线的精度。

同时,牛顿插值法还可以分析凸轮表面的精度要求,以及表面的实际加工精度,从而更有效地精确控制凸轮的微细加工精度。

然而,牛顿插值法也存在一定缺陷,在某些情况下,由于它只是根据有限的数据点计算出的拟合曲线,受限于它的特性,拟合的结果可能出现较大的误差。

为了解决这一问题,人们需要根据实际情况,添加更多的数据点,以提高拟合精度,并利用计算机实时调整结果以提高准确性。

牛顿插值法在凸轮修正设计中的应用可以节省大量时间,但它也有一定的局限性,这就要求用户根据实际情况,将数据点选取得恰当,尤其是当精度要求较高时,就要添加更多的数据点,以降低计算误差。

此外,为了更有效地控制凸轮的微细加工,应该利用牛顿插值法对凸轮表面进行实时分析,并建立加工过程中的表面形状模型。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

APPLICATION OF NEWTON INTERPOLATION
Wang Chunlin (Staff and Worker' s University)
Abstract This paper describes how to seek data exclusive of t he dat a listed in t he f unction t able and establish the interpolation curve equation and ant i -interpolating data i n order to solve t he approximate root of the equation .T he four ex amples shown in the paper are all representative problems in the metallurgical engineering technology . Keywords difference difference quotient New ton interpolation
通过对余项的分析表明 , 余项的大小与插值节点
的取法有关 , 所得的结论是 :取与(欲插入的)X 距 离最近的几个节点作为插值区间会使余项最小 。
此外 , 由差分误差传播的分析 —稳定性问题的分
析表明 , 对实际问题盲目追求高阶差分(或差商)
并不可取 。
大多数给出的函数表 , 或是全区间是等距的 ,
理 , 得到该炉衬二段各自的温度分布 t =t(x)为
t 1 = N 2(x) = 1600 -18940x +178222 .
3 x2
(0 ≤ x ≤0 .075)
t 2 = N 2(x)=2630 .1 -27562 .5 x
+ 119964 .2 x2 - 132776 . 7 x3
(0 .075 ≤ x ≤0 .6)
1 前 言
工程技术 和科学研究中常 利用函数 图表计 算 。所利用的函数图表或是由实验整理出来的 , 或是从理论推导出来的解析式 , 但该解析式由于 太复杂而不便于直观理解或每次代入它而作具体 运算 , 从而给出若干函数值的表 。 实际上 , 即使是 一大型函数表 , 但其列出的数据总是有限 , 因而往 往是 , 需要求出已列数据以外的数据 , 为此就得做 一些补充计算 , 即插值计算 。
据此 , 一般而言 , 当实验数据较少或没有适宜 的函数曲线可以拟合(如本文例 3)时 , 采用插值 曲线比较妥当 。
例 2 为研究转炉炉衬在高温下被侵蚀的情 况 , 需查明转炉炉衬工作层在作业时的温度沿其 厚度的分布 。 在一 150t 转炉上约位于钢水面下 30mm 沿炉衬工作层 15 , 75 , 132 , 172 和 600m m 处埋设 5 支热电偶测温 。 对本问题而言 , 所关心 的是 :由测知高温范围而推断耐火材料软化带的 厚度 。由于工作层仅为 600mm 厚 , 以及测温条件 的恶劣 , 故没有必要也不可能埋设更多的热电偶 以获得较多点的温度 。 然而 , 既已获得 5 个试验 数据 , 除满足本问题需要外 , 不妨用它们开发另一 个功用 , 即由此建立表述炉衬工作层的温度分布 的插值曲线方程 , 进而推算转炉炉衬工作层的热 积蓄量(即焓值), 以用于转炉热平衡 。
该转炉第 6 炉次的出钢前 , 由上述部位所测 得的 5 个温度读数 , 并取炉衬工作层表面 x =0 处 的温度为 1600 ℃(等于钢液温度)作为补充读数 可得 6 个数据 , 按前述稳定性的思路 , 拟分成二段 各建立其牛顿插值函数 :
x/ m
0 0 .01 5 0 .07 5 0 .07 5 0 .13 2 0 .17 2 0 .60
王春霖 , 男 , 副教授
· 1 2 · 武钢技术 1999 年第 3 期
f (x)= N n(x )+Rn(x)
式中 f[ …] ———函数 f(x)的各阶差商 , 例如
f [ x 0 , x 1 , x 2]
=
Δy 1 - Δy 0 x2 -x0
t/ ℃
16 00 13 56 11 82 11 82 77 7 76 3 60 0
一阶差商 二阶差商 三阶差商
16266 .67 -2900 178222 .27
-7105 .28 -35 0
-380 .84
69 64 1 .86 -6 5 .90
-132776 .69
解 :
将上表中上斜线行 上的值代入式(1), 经整
=0 .0984
若按三次插值 , 则应挑选 4 个节点 , 即再添一
个 φ=3/ 8 的节点 , 此时可在表上添一行一列(用
虚线框在最后的行与列), 其
Δ3 6
ζt(t
-1)(t
-2)=0
.24 6
×1 .2
×(1 .2 -1)(1 .2 -2)=-7 .68 ×10-2
这样 , 由三次插值所得的 ζ值为
ht , 参量
t
为t
=x
h
x
0(t
> 0), 这样 , 由式(1)
便得牛顿前插公式为
N n(x)= y 0 +1t !Δy0 +t (t2-! 1)Δ2 y 0 + …
+t (t
-1)…(t n!
-n
+1)Δny0
(2)
如果计算插值区间终点附近的函数值 , 可将
插值点次序由大到小排列 , 即 x 0 , x 1 = x 0 -h …,
包括牛顿插值法的诸多插值方法 , 在一般数
值方法教本中有详细的论证 。 本文避开数学上的 逻辑推理论证过程 , 就几个冶金工程技术上较典 型的实际问题综合地提出牛顿插值法的应用 。
2 牛顿插值多项式
已知函数 y =f(x), 如果它是给出的函数表 , 其 n +1 个节点 x0 , x1 …xn 处的函数值是 y0 , y1 … y n ;如果给出的是 y =f(x)的解析式 , 则在上述节 点处取值 y0 , y1 …yn , 要求建立一个次数不超过 n 的多项式 N n(x), 使 N n(xi)=yi (i =0 , 1 …n)。 为 此 , 只要在 n +1 个已知节点 xi 以外再给一个节 点 x , 此时将点 x 也看作一个节点 , 推出逼近原函 数 f(x)的牛顿插值多项式 N n(x)为[ 2]
3 .3 牛顿 —爱尔米特插值
例 3 物体的导温系数 a , 是表述物体在加热
(或冷却)时温度在物体内扩散的性能 , 故 a 亦称 为热扩散率 , 它是温度的函数 。 文献[ 3] 载有中碳
钢 a =f(t)的实验曲线 , 示于图 1 。
图 1 中碳钢的热扩散率 a 随温度 t 的变化
第 37 卷第 1999 年 5
3期 月
W I S C武O
钢技术
T ECH NOLOG
Y
VMoaly.3.7 N19o9.93
牛顿插值法的应用
王春霖
(职工大学)
摘 要 阐述了应用牛顿插值法求函数表所列 数据以 外的数 据 , 建 立插值 曲线方 程和逆 插值 ——— 求解 方程近似根等问题 , 文中所举 4 个实例都是冶金工程技术中的一些较为典型的问题 。 关键词 差分 差商 牛顿插值法
3 牛顿插值法的若干典型应用
3 .1 求函数表中未列的数据
例 1 闸阀的局部阻力系数 ζ和闸阀的关闭
度 φ=(d -h)/d 有关(d 为管内径 , h 为 开启高 度), 其 ζ=f(φ)的函数表如下[ 3]
φ 0 1/ 8 2/ 8 3/ 8 4/ 8 5/ 8 6/ 8 7/ 8
ζ 0.00 0 .07 0.20 0 .81 2.06 5 .52 17 .60 97 .80
插值计算方法的基本思想是 :构造某个简单 函数用以逼近原函数 , 通过计算逼近的关系式从 而得到研究对象的近似值 。逼近函数的类型有多 种选法 , 但其基本上是代数多项式 , 这是因为数学 中业已阐明 , 有相当广泛的函数可以用代数多项 式逼近[ 1] 。
建立代数多项式也有多种方法 , 其中牛顿插值 的方法具有递推性 , 其组成很有规律 , 方便于实际 计算 , 并能应用较少的已知数据达到应有的精度 。
2/ 8
0 .26
3/ 8
0 .81
Δζ
0 .07 0 .19 0 .59
Δ2ζ
Δ3ζ
0 .12 0 .26
0 .24
t
=
φ-φ0 h
=1
.2/8 -0 1/ 8
=1 .2
ζ= N 2(0 .15)= ζ0 +[ Δζ0 + Δ22ζ0(t -1)] t
=0 .00 +[ 0 .07 +0 .212(1 .2 -1)] ×1 .2
这样 , 工作层在出钢前单位体积的焓值 Q 为
∫ ∫ 0.075
0 .6
Q =ρ
0
c1 t 1 dx + 0 .075 c2 t 2 dx
, kJ · m -3
式中 ρ———工作层耐火材料的密度/ kg·m -3
c1 和 c2 ———作层耐火材料的(所在温度范围 内)平均比热/ kJ·kg -1·℃-1
———函 数 在 点
x0 、x1 和 x2 处的二阶差商 ;而 Δy1 和 Δy0 分别为
点 x0 和 x1 处的一阶差分 。 Rn(x)称为余项 。 造成余项的原因是用差商
代替了微商 。 通过余项的计算得 原函数 f(x)与
逼近函数 Nn(x)之间的误差 。 但是实际计算余项 颇为困难 , 尤其是只给出函数表的情况下 。然而 ,
或者虽 然全区间不等 距而子区间 等距的 。 式
相关文档
最新文档