加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

《数值分析》实验三 Newton差分插值算法

(2013-03-13 23:10:35)
标签:

数值分析

实验指导书

程序源代码

教育

分类: 数值分析

实验目的:掌握Newton差分插值算法的基本原理,理解差分的概念,掌握差分表的计算方法。学习用计算机语言编写程序实现算法。

[参考程序]

#include "stdio.h"

#define M 10

#define N 10

//定义插值节点及所求点数据,根据题目不同而修改

double x0=0;  //初始点

double y[]={1.00000,0.99500,0.98007,0.95534,0.92106,0.87758};

 

// 数据读入及参数设置函数。

void ReadPara(double *xx,int *n,double *h,double f[N][N])

{

       //输入插值次数n,要计算的xx

       printf("Please input xx:");

       scanf("%lf",xx);                          //设置例题数据xx=0.048;

       printf("Please input n:");

       scanf("%d",n);                                   //设置例题数据n=4;

       printf("Please input h:");

       scanf("%lf",h);                           //设置例题数据h=0.1;

       //初始化差分表

       int loopj;

       for(loopj=0;loopj<=*n;loopj++)

       {

              f[0][loopj]=y[loopj];

       }

 

}

//计算单个差分的函数

double fx(int i,int j,double f[M][N])

{

       if(i==0)

       {

              return f[i][j];

       }

       else

       {

             

              return (fx(i-1,j+1,f)-fx(i-1,j,f));

       }

}

//由初始值计算整个差分表

void CaculateNewton(int n,double f[M][N])

   

       int loopi,loopj;

       //循环求解差分表

       for(loopi=1;loopi<=n;loopi++)

       {

          for(loopj=0;loopj<=n-1;loopj++)

          {

                

                     f[loopi][loopj]=fx(loopi,loopj,f);

          }

       }

}

 

//用秦九韶算法计算插值多项式结果

double S(int n,double t,int end,double f[M][N])

{

       if(n==end)

       {

              return f[n][0];

       }

       else

       {

             

              return S(n+1,t,end,f)*(t-n)/(n+1)+f[n][0];

       }

}

 

//程序主函数

void main()

{

       double f[M][N];            //此处用M表示差分阶数,N表示差分对应的X(N)

       int n;                            //插值多项式次数

       double xx;            //需要计算的插值函数值

       double result;       //保存最终插值计算结果

       double h;               //插值多项式中的插值节点步长

       double t;

 

       //输入算法所需数据及参数

       ReadPara(&xx,&n,&h,f);

       //循环计算均差表中的其他所有数据

       CaculateNewton(n,f);

       t=(xx-x0)/h;

       //通过秦九韶法计算Newton差分插值多项式值

       result=S(0,t,n,f);

       //输出插值结果

       printf("Result is: %lf",result);

}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有