数值分析—牛顿插值

 

牛顿插值法

      算法很简单,参考了图书馆借的指导书。

      书上用的C,我把它转为C++,但是结果不对。

#include<iostream.h>

#define MAX_N 20

 

typedef struct tagPOINT

{

double x;

double y;

}POINT;

 

int main()

{

POINT points[MAX_N];

double diff[MAX_N];

 

cout<<"Input n value:"<<endl;

int n;

cin>>n;

 

if (n>MAX_N)

cout<<"The input n is larger than MAX_N,please redefine the MAX_N."<<endl;

if (n<=0)

cout<<"Please input a number between 1 and "<< MAX_N << ".";

 

cout << "Now input the (x_i,y_i),i=0,...,"<<n <<"."<<endl;

for (int i=0;i<=n;i++)

cin>>points[i].x>>points[i].y;

 

cout<< "Now input the x value:"<<endl;

double x;

cin>>x;

 

for (i=0;i<=n;i++)

diff[i]=points[i].y;

 

for(i=0;i<=n;i++)

diff[i]=points[i].y;

for(int k=0; k<n; k++)

{

for (int j=n;j>k;j--)

{ diff[j]=(diff[j]-diff[j-1])/(points[j].x-points[j-1-k].x);

}

}

 

double tem=1;

double newton=diff[0];

for(i=0; i<n; i++)

{

tem=tem*(x-points[i].x);

newton=newton+tem*diff[i+1];

}

cout<< "newton("<<x<<")="<< newton<<endl;

return 0;

}

 

算法分析:

很郁闷,运行没有错误,

仔细查找后发现书上一个FOR语句中变量错了,在计算K阶差商时用变量K控制循环,

在两个FOR嵌套中j变量是从大到小,好多程序都喜欢这样,我想知道这样做有什么好处?

难点是设计DIFF[]TEM

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值