牛顿插值法原理及应用
- 格式:doc
- 大小:554.19 KB
- 文档页数:18
牛顿插值法
插值法是利用函数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
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 { printf("x%d=",i); scanf("%f",&x[i]); printf("y%d=",i); scanf("%f",&y[0][i]); } for(i=1;i for(j=i;j { if(i>1) y[i][j]=(y[i-1][j]-y[i-1][j-1])/(x[j]-x[j-i]); else y[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 { 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; else disp('x和y的维数不相等!'); return; end f = 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)); end c(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); else f = collect(f); %将插值多项式展开 f = vpa(f, 6); end end 牛顿插值法 摘要:值法利用函数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-x 0)...(x-xn-1)+Rn(x) 关键词:牛顿插值法流程图程序实现 一、插值法的由来 在许多实际问题及科学研究中,因素之间往往存在着函数关系,然而,这种关系经常很难有明显的解析表达,通常只是由观察与测试得到一些离散数值。有时,即使给出了解析表达式,却由于表达式过于复杂,不仅使用不便,而且不易于进行计算与理论分析。解决这类问题的方法有两种:一种是插值法,另一种是拟合法。插值法是一种古老的数学方法,它来自生产实践,早在一千多年前,我国科学家在 研究历法上就应用了线性插值与二次插值,但它的基本理论却是在微积分产生之后才逐渐完善的,其应用也日益增多,特别是在计算机软件中,许多库函数,如等的计算实际上归结于它的逼近函数的计算。逼近函数一般为只含有算术运算的简单函数,如多项式、有理分式(即多项式的商)。在工程实际问题当中,我们也经常会碰到诸如此类的函数值计算问题。被计算的函数有时不容易直接计算,如表达式过于复杂或者只能通过某种手段获取该函数在某些点处的函数值信息或者导数值信息等。因此,我们希望能用一个“简单函数”逼近被计算函数,然后用该简单函数的函数值近似替代被计算函数的函数值。这种方法就叫插值逼近或者插值法。 逐次线性插值法优点是能够最有效地计算任何给定点的函数值,而不需要写出各步用到的插值多项式的表达式。但如果解决某个问题时需要插值多项式的表达式,那么,它的这个优点就成了它的缺点了。能不能根据插值条件构造一个插值多项式,它既有具体的表达式,又很容易用它计算任何点的函数值呢?牛顿插值法能作到这一点。 二、牛顿插值法的概念 牛顿插值多项式的表达式 设 ) ())(())(()(1 1 1 2 1 x x x x x x c x x x x c x x c c N n n n --⋅⋅⋅--⋅⋅⋅+--+-+= 问题是如何根据插值条件 ()y x N i i n =,i=0,1,2⋅⋅⋅n 来计算待定系数c c c c n ⋅⋅⋅210,,?