//Point.h begin//
#pragma once
class Point
{
public:
Point(void);
Point(double xx,double yy);
public:
~Point(void);
public :
double x;
double y;
};
//Point.h end /
//Point.cpp begin /
#include "Point.h"
Point::Point(void)
{
}
Point::~Point(void)
{
}
Point::Point(double xx,double yy)
{
x=xx;
y=yy;
}
//Point.cpp end ///
//Newton.h begin ///
#include <iostream>
#include "Point.h"
using namespace std;
class Newton
{
public:
Newton(void);
public:
~Newton(void);
public:
vector<Point> v;
int n;
public:
void add(double xx,double yy);
double getFin(double x);
};
//Newton.h end ///
//Newton.cpp begin
#include "Newton.h"
#include "math.h"
Newton::Newton(void)
{
double x=0.0;
double y=0.0;
cout<<"please input the x,y"<<endl;
cin>>x;
cin>>y;
while(x>0)
{
add(x,y);
cout<<"please input the x,y"<<endl;
cin>>x;
cin>>y;
}
cout<<"现在进入Newton插值"<<endl;
cout<<"请输入阶数"<<endl;
cin>>n;
cout<<"请输入所求数字"<<endl;
cin>>x;
cout<<getFin(x)<<endl;
}
Newton::~Newton(void)
{
}
void Newton::add(double xx, double yy)
{
Point p(xx,yy);
v.push_back(p);
}
double Newton::getFin(double x)
{
double result=0.0;
for(int i=0;i<n;i++)
for(int j=n;j>i;j--)
{
v[j].y=(v[j].y-v[i].y)/(v[j].x-v[i].x);
}
for(int i=0;i<=n;i++)
{
double a=1.0;
for(int j=1;j<i+1;j++)
{
a=a*(x-v[j-1].x);
}
result+=(v[i].y)*a;
}
return result;
}
//Newton.cpp end/
//main.cpp begin //
#include "Newton.h"
#include <iostream>
using namespace std;
int main()
{
Newton myNewton;
return 0;
}
//main.cpp end //