c++ 牛顿插值法这是代码 ,代码是正确的.// 牛顿插值法.cpp :定义控制台应用程序的入口点.//#include"stdafx.h"#include"iostream"using namespace std;#define N 4 //插值节点数目void main(){\x05doub
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/23 14:22:03
![c++ 牛顿插值法这是代码 ,代码是正确的.// 牛顿插值法.cpp :定义控制台应用程序的入口点.//#include"stdafx.h"#include"iostream"using namespace std;#define N 4 //插值节点数目void main(){\x05doub](/uploads/image/z/9122050-10-0.jpg?t=c%2B%2B+%E7%89%9B%E9%A1%BF%E6%8F%92%E5%80%BC%E6%B3%95%E8%BF%99%E6%98%AF%E4%BB%A3%E7%A0%81+%2C%E4%BB%A3%E7%A0%81%E6%98%AF%E6%AD%A3%E7%A1%AE%E7%9A%84.%2F%2F+%E7%89%9B%E9%A1%BF%E6%8F%92%E5%80%BC%E6%B3%95.cpp+%3A%E5%AE%9A%E4%B9%89%E6%8E%A7%E5%88%B6%E5%8F%B0%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E5%85%A5%E5%8F%A3%E7%82%B9.%2F%2F%23include%26quot%3Bstdafx.h%26quot%3B%23include%26quot%3Biostream%26quot%3Busing+namespace+std%3B%23define+N+4+++++%2F%2F%E6%8F%92%E5%80%BC%E8%8A%82%E7%82%B9%E6%95%B0%E7%9B%AEvoid+main%28%29%7B%5Cx05doub)
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