尧图精选

数值分析——2.3均差与牛顿插值多项式

🕒 发布时间:2026/10/2 21:10:23 📁 来源:尧图网络
基于C语言编写牛顿插值多项式算法计算下面例题代码#include iostream #include vector #include iomanip #include cmath using namespace std; // 牛顿插值法计算函数 double newtonInterpolation(const vectordouble x, const vectordouble y, double target_x) { int n x.size(); // 构建差商表使用二维vector初始化为0 // diff_quotient[i][j] 表示从节点 i 开始的 j 阶差商 vectorvectordouble diff_quotient(n, vectordouble(n, 0.0)); // 1. 初始化0阶差商即函数值本身 for (int i 0; i n; i) { diff_quotient[i][0] y[i]; } // 2. 计算1阶到n-1阶差商 // 按照图片表格的列方向进行计算 for (int j 1; j n; j) { // j代表阶数 for (int i 0; i n - j; i) { // i代表行索引 diff_quotient[i][j] (diff_quotient[i 1][j - 1] - diff_quotient[i][j - 1]) / (x[i j] - x[i]); } } // 3. 打印差商表模仿你提供的第二张图 cout 差商表 endl; cout setw(6) xk setw(12) f(xk) setw(12) 一阶 setw(12) 二阶 setw(12) 三阶 endl; for (int i 0; i n; i) { cout setw(6) fixed setprecision(2) x[i]; for (int j 0; j n - i; j) { cout setw(12) fixed setprecision(5) diff_quotient[i][j]; } cout endl; } cout endl; // 4. 根据牛顿插值公式计算目标值 // N(x) f[x0] f[x0,x1](x-x0) f[x0,x1,x2](x-x0)(x-x1) ... double result diff_quotient[0][0]; // 第一项 f[x0] double term 1.0; for (int i 1; i n; i) { term * (target_x - x[i - 1]); // 累乘 (x - x0)(x - x1)... result diff_quotient[0][i] * term; // 加上对应的差商乘以累乘项 } return result; } int main() { // 输入题目给定数据 vectordouble x { 0.40, 0.55, 0.65, 0.80 }; vectordouble y { 0.41075, 0.57815, 0.69675, 0.88811 }; double target_x 0.596; cout 已知节点: ; for (double val : x) cout val ; cout \n对应函数值: ; for (double val : y) cout val ; cout \n\n目标插值点 x target_x endl endl; // 执行牛顿插值 double result newtonInterpolation(x, y, target_x); // 输出最终结果 cout 最终计算结果: f( target_x ) ≈ fixed setprecision(6) result endl; cout 注由于浮点数精度限制手工计算与程序计算结果可能存在微小尾数差异属正常现象 endl; return 0; }运行结果
上一篇/下一篇内容由系统自动关联 返回资讯列表 →