当前位置: 代码迷 >> C语言 >> Newton插值多项式计算函数的近似值
  详细解决方案

Newton插值多项式计算函数的近似值

热度:404   发布时间:2006-03-12 12:59:00.0
Newton插值多项式计算函数的近似值

#include"stdio.h"
#define N 5
int i,j,k;
float m,s,n;
float xx[]={0.4,0.55,0.65,0.80,0.95,1.05};
float yy[]={0.41075,0.57815,0.69675,0.90,1.00,1.25382};
float New()
{
m=0;
for(j=0;j<=N;j++)
m+=yy[j]/(xx[j]-xx[i]);
return m;
}
float Newton(float x)
{
s=0,n=1;
for(i=0;i<=N;i++)
if(j!=i)
{
n*=(x-xx[i]);
s=n*New();
}
return s;
}
main()
{
clrscr();
printf("%f\n",Newton(0.596));
}


题目是用Newton插值多项式计算函数的近似值
不胜感谢!

搜索更多相关的解决方案: Newton  多项式  近似值  插值  函数  

----------------解决方案--------------------------------------------------------

具体算法不太了解,
我粗看过去,觉得Newton函数中的j好像没有初值


----------------解决方案--------------------------------------------------------

那你能就此说说你的看法嘛,应该是怎么样子才对发呢???


----------------解决方案--------------------------------------------------------

写的好乱阿,全局变量这样用,程序没法正常工作。
你是学数值计算的吧,牛顿插值法碰巧我这里删掉了,不过我这里还有
定步长辛普森公式计算
二分法
列主高斯消去法
龙贝格
牛顿迭代法
弦截法
逐次超松弛迭代法
你碰到问题再来找我吧,你把代码重新写一下,注意把i和j都变成局部变量。
今天我不帮你写了,要去看球了,明天还不会的话,我在帮你看看。
还有,学校图书馆应该有数值计算的C语言实现这本书的,你去看看,我以前就是用这本书的。


----------------解决方案--------------------------------------------------------
你是想把New()中的变量j和Newton()中的i来比较,他们两个是不同的函数,不能这样比较吧。
----------------解决方案--------------------------------------------------------
老兄,谢谢你的回复哦
对,我是学数值分析的
看你列举了那么多的计算方法,我想你的数学和C一定学的很好了
好的,我就再看看吧
----------------解决方案--------------------------------------------------------

大家还是说个例子吧,我实在做不出来呀


----------------解决方案--------------------------------------------------------
Newton(0.596)=0.631917   
----------------解决方案--------------------------------------------------------

错啦~你这个数字变了点


----------------解决方案--------------------------------------------------------

#include "stdio.h"
#include "conio.h"
#define X 0.596
void main()
{
int i,j;
float s=0.0;
float xx[]={0.4,0.55,0.65,0.80,0.95,1.05};
float yy[]={0.41075,0.57815,0.69675,0.90,1.00,1.25382};
float xy[6];

xy[0]=yy[0];
for(j=1;j<6;j++) /*j阶均差,但依次保留每阶的第一个值*/
for(i=j;i<6;i++)
if(j==1)
xy[i]=(yy[i-1]-yy[i])/(xx[i-j]-xx[i]);
else
xy[i]=(xy[i-1]-xy[i])/(xx[i-j]-xx[i]);

for(i=0;i<6;i++)
for(j=0;j<i;j++)
xy[i]=xy[i]*(X-xx[j]);
for(i=0;i<5;i++) /*我看计算方法里加了4项,我有点奇怪,我这照着做*/
s+=xy[i];

printf("%f\n",s);

getch();
}

大致这样~(我没学计算方法),可能不对。参考了牛顿插值公式
计算方法里有个类似的题~我用它的数据算了一阶均差~部分数据相同,有几个不一样
所以我想它最后的结果可能也有问题


----------------解决方案--------------------------------------------------------