c++编写拉格朗日插值

using namespace std;
double lagrangeInterpolation(vector<double>& x, vector<double>& y, double x_val) {
double result = 0.0;
for (size_t i = 0; i < x.size(); i++) {
double term = y[i];
for (size_t j = 0; j < x.size(); j++) {
if (j != i) {
term *= (x_val - x[j]) / (x[i] - x[j]);
}
}
result += term;
}
return result;
}
int main() {
SetConsoleOutputCP(CP_UTF8); // 设置控制台为 UTF-8 编码
vector<double> x = {0, 1, 2, 3};
vector<double> y = {1, 2, 0, 4};
cout << "已知数据点:" << endl;
for (size_t i = 0; i < x.size(); i++) {
cout << "(" << x[i] << ", " << y[i] << ")" << endl;
}
double x_test = 1.5;
double y_result = lagrangeInterpolation(x, y, x_test);
cout << "\n插值结果:" << endl;
cout << "当x = " << x_test << "时,y = " << y_result << endl;
return 0;
}
