牛顿插值法

插值法是利用函数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插值函数

·        2程序设计

·        C程序

·        Matlab程序

1插值函数

编辑

插值函数的概念及相关性质[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次代数插值问题的解存在且唯一

2程序设计

编辑

牛顿插值法C程序

 程序框图#include<stdio.h>

void main()

{

    floatx[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]);

           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<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;

else

   disp(&apos;xy的维数不相等!&apos;);

    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,&apos;t&apos;,x0);

       else

           f =collect(f);               %将插值多项式展开

           f = vpa(f, 6);

       end

    end

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值