C语言分段三次Hermite插值法:计算f(x)=1/(1+x²)近似值
C语言分段三次Hermite插值法:计算f(x)=1/(1+x²)近似值
本文提供了一个使用C语言编写的分段三次Hermite插值多项式程序,用于计算函数 f(x) = 1 / (1 + x²) 在给定点的近似值,并与准确值进行比较。
**代码示例:**c#include <stdio.h>#include <math.h>
// 计算函数值double function(double x) { return 1 / (1 + pow(x, 2));}
// 分段三次 Hermite 插值函数double hermiteInterpolation(double x, double x0, double x1, double f0, double f1, double f0_prime, double f1_prime) { double h = x1 - x0; double t = (x - x0) / h; double t2 = t * t; double t3 = t2 * t;
double p0 = 2 * t3 - 3 * t2 + 1; double p1 = -2 * t3 + 3 * t2; double m0 = t3 - 2 * t2 + t; double m1 = t3 - t2;
return p0 * f0 + p1 * f1 + m0 * h * f0_prime + m1 * h * f1_prime;}
int main() { // 示例数据 double x[6] = {0.5, 1.5, 2.5, 3.5, 4.8}; // 需要计算的点 double x_values[6] = {0, 1, 2, 3, 4, 5}; // 已知点的 x 值 double f_values[6]; // 已知点的函数值 double f_prime_values[6]; // 已知点的函数一次导数值
// 计算已知点的函数值和函数一次导数值 for (int i = 0; i < 6; i++) { f_values[i] = function(x_values[i]); f_prime_values[i] = (-2 * x_values[i]) / pow(1 + pow(x_values[i], 2), 2); }
// 执行插值计算并输出结果 for (int i = 0; i < 5; i++) { double result = hermiteInterpolation(x[i], x_values[i], x_values[i + 1], f_values[i], f_values[i + 1], f_prime_values[i], f_prime_values[i + 1]); double exact_value = function(x[i]); printf('在 x = %.2f 处的插值结果为:%.6f,准确值为:%.6f
', x[i], result, exact_value); }
return 0;}
程序说明:
function(double x)函数用于计算给定函数 f(x) = 1 / (1 + x²) 的值。2.hermiteInterpolation函数实现了分段三次Hermite插值算法,根据已知点及其导数值计算插值结果。3. 在main函数中,我们定义了需要计算的点x,以及已知点的 x 值、函数值和函数一次导数值。4. 程序首先计算已知点的函数值和函数一次导数值,然后调用hermiteInterpolation函数进行插值计算。5. 最后,程序将插值结果与准确值进行比较并打印输出。
总结:
这篇博客提供了一个简单的C语言程序,演示了如何使用分段三次Hermite插值法计算函数近似值。您可以根据自己的需求修改和优化代码,应用于更复杂的场景。
原文地址: https://www.cveoy.top/t/topic/CqX 著作权归作者所有。请勿转载和采集!