c++ 牛顿插值法这是代码 ,代码是正确的.// 牛顿插值法.cpp :定义控制台应用程序的入口点.//#include"stdafx.h"#include"iostream"using namespace std;#define N 4 //插值节点数目void main(){\x05doub

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/05 07:39:20
c++ 牛顿插值法这是代码 ,代码是正确的.// 牛顿插值法.cpp :定义控制台应用程序的入口点.//#include"stdafx.h"#include"iostream"using namespace std;#define N 4     //插值节点数目void main(){\x05doub

c++ 牛顿插值法这是代码 ,代码是正确的.// 牛顿插值法.cpp :定义控制台应用程序的入口点.//#include"stdafx.h"#include"iostream"using namespace std;#define N 4 //插值节点数目void main(){\x05doub
c++ 牛顿插值法
这是代码 ,代码是正确的.
// 牛顿插值法.cpp :定义控制台应用程序的入口点.
//
#include"stdafx.h"
#include"iostream"
using namespace std;
#define N 4     //插值节点数目
void main()
{
\x05double tmp=1;
\x05int i,j;
\x05double x[N];          //插值节点坐标
\x05double y[N];
\x05double g[N];
\x05double u,newton;      //需要计算的插值点
\x05cout<<"输入插值点坐标:"<<endl;
\x05for(i=0;i<N;i++)
\x05{
\x05\x05\x05cin>>x[i];
\x05\x05\x05cin>>y[i];
\x05}


\x05cout<<"输入要计算的插值点:"<<endl;
\x05cin>>u;


\x05for(i=0;i<N;i++)
\x05\x05g[i]=y[i];
\x05for(i=0;i<N;i++)
\x05{
\x05\x05for(j=N;j>i;j--)
\x05\x05{
\x05\x05\x05g[j]=(g[j]-g[j-1])/(x[j]-x[j-i-1]);
\x05\x05}
\x05}
\x05newton=g[0];
\x05tmp=1;
\x05for(i=1;i<=N;i++)
\x05{
\x05\x05tmp*=(u-x[i-1]);
\x05\x05newton=newton+tmp*g[i];
\x05}
\x05
\x05cout<<"所得结果为:"<<newton<<endl;


\x05
}
这是结果 结果也正确

但是这个debug error是怎么回事呢?

c++ 牛顿插值法这是代码 ,代码是正确的.// 牛顿插值法.cpp :定义控制台应用程序的入口点.//#include"stdafx.h"#include"iostream"using namespace std;#define N 4 //插值节点数目void main(){\x05doub
好2处数组下标溢出
1、g数组只有N个元素,下标可访问区间为[0 ,N-1],下面这个代码相当于访问了g[N]了
for(j=N;j>i;j--)
{
g[j]=(g[j]-g[j-1])/(x[j]-x[j-i-1]);
}
2、g数组最大不能到达N,当i=N的时候,tmp*g[i]这里会访问溢出
for(i=1;i