#include <iostream>
#include <vector>
using namespace std;
// Newton插值多项式函数
double newton_interpolation(const vector<double>& x_data, const vector<double>& y_data, double x)
{
int n = x_data.size();
// 计算差商表
vector<vector<double>> div_diff(n, vector<double>(n));
for (int i = 0; i < n; i++)
{
div_diff[i][0] = y_data[i];
}
for (int j = 1; j < n; j++)
{
for (int i = 0; i < n - j; i++)
{
div_diff[i][j] = (div_diff[i+1][j-1] - div_diff[i][j-1]) / (x_data[i+j] - x_data[i]);
}
}
// 计算插值结果
double result = div_diff[0][0];
double term = 1.0;
for (int i = 1; i < n; i++)
{
term *= (x - x_data[i-1]);
result += div_diff[0][i] * term;
}
return result;
}
int main()
{
// 输入数据点
vector<double> x_data = {1.0, 2.0, 3.0, 4.0, 5.0};
vector<double> y_data = {1.0, 4.0, 9.0, 16.0, 25.0};
// 要求的插值点
vector<double> interp_points = {2.5, 3.5, 4.5};
// 计算插值结果
for (auto x : interp_points)
{
double result = newton_interpolation(x_data, y_data, x);
cout << "插值点x = " << x << ",插值结果为:" << result << endl;
}
return 0;
}