数学问题:
给定的函数表如下
用牛顿插值法计算以及
的近似值(近似值保留5位小数)。
解决代码:
#include<iostream>
#include<iomanip>
#include<vector>
using namespace std;
double NewtonInterPol(double arrX[], double arrY[], int n, double x) {
vector<vector<double> > table(n + 1);
for (int i = 0; i < n; i++) {
table[i].resize(n + 1);
}
for (int i = 0; i < n; i++)
{
table[i][0] = arrY[i];
}
for (int j = 1; j < n; j++) {
for (int i = j; i < n; i++)
{
table[i][j] = (table[i][j - 1] - table[i - 1][j - 1]) / (arrX[i] - arrX[i - j]);
}
}
double res = 0.0;
for (int i = 0; i < n; i++) {
double temp = 1.0;
for (int j = 0; j < i; j++)
{
temp = temp * (x - arrX[j]);
}
res = res + table[i][i] * temp;
}
return res;
}
int main() {
int n = 0; string laug;
double arrX[50], arrY[50];
double num = 0;
double x;
cin >> laug;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> arrX[i];
}
for (int i = 0; i < n; i++)
{
cin >> arrY[i];
}
cin >> x;
cout << fixed << setprecision(5) << NewtonInterPol(arrX, arrY, n, x);
return 0;
}
使用方法:
第一行是1个字符串,为函数接口名称:NewtonInterPol
第二行是1个数值,为数据点个数:n
第三行是n个数值,为待插值数据点的自变量:arrX
第四行是n个数值,为待插值数据点的因变量:arrY
第五行是1个数值,为待求点数值:x
测试输入:
NewtonInterPol
6
0.40 0.55 0.65 0.80 0.90 1.05
0.41075 0.57815 0.69675 0.88811 1.02652 1.25386
0.596
预期输出:
0.63192