c++利用拉格朗日插值算法得到预测值

问题遇到的现象和发生背景

c++利用拉格朗日插值算法得到预测值与真实值相差较大

用代码块功能插入代码,请勿粘贴截图
#include<iostream>

using namespace std;

int main()
{
    double PI = 3.1415926535897932;
    int n;
    cout << "请输入您要输入的插值个数" << endl;
    cin >> n;
    double* a = new double[n];
    double* b = new double[n];
    cout << "请依次输入点的坐标值" << endl;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i] >> b[i];
    }
    cout << "您输入的点坐标分别为" << endl;
    for (int i = 0; i < n; i++)
    {
        cout << "(" << a[i] << "," << b[i] << ")   ";
    }
    double x;
    cout << "请输入您要预测的x的值" << endl;
    cin >> x;
    double y=0;
    double z = 1;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (j != i)
            {
                z *= (x - a[j]) / (a[i] - a[j]);
            }
        }
        y += z * b[i];
    }
    cout << "预测值为:"<<y<<endl;
    delete []a;
    delete []b;
    return 0;
}

运行结果及报错内容

预期值与真实结果相差太远

我的解答思路和尝试过的方法
我想要达到的结果

可以较为准确的得出预测值

拉格朗日插值算法是一种数值分析中的插值算法。它利用拉格朗日插值函数来逼近一组给定的数据点,从而求出这些点的函数值。它的基本思想是用拉格朗日插值函数来拟合一组给定的数据点,并用这个拟合函数来预测其他数据点的函数值。

下面是一个简单的 C++ 实现例子:

// 拉格朗日插值算法
// n: 数据点的个数
// x: 数据点的横坐标
// y: 数据点的纵坐标
// xi: 要求函数值的点的横坐标
double lagrange_interpolation(int n, double* x, double* y, double xi) {
  double result = 0;
  for (int i = 0; i < n; i++) {
    double numerator = 1;
    double denominator = 1;
    for (int j = 0; j < n; j++) {
      if (j != i) {
        numerator *= xi - x[j];
        denominator *= x[i] - x[j];
      }
    }
    result += numerator / denominator * y[i];
  }
  return result;
}

在这个例子中,函数 lagrange_interpolation 接受三个参数:数据点的个数、数据点的横坐标和纵坐标,返回要求函数值的点的横坐标。