三次曲线拟合:对函数 f(x) = 1/(1+25x^2) 在区间 [-1, 1] 上进行拟合
首先,我们需要求出在区间 [-1, 1] 上,给定的 11 个点的函数值,即:
f(-1) = 1/26 f(-0.8) = 1/21 f(-0.6) = 1/10 f(-0.4) = 1/5 f(-0.2) = 1/2.25 f(0) = 1 f(0.2) = 1/2.25 f(0.4) = 1/5 f(0.6) = 1/10 f(0.8) = 1/21 f(1) = 1/26
接下来,我们要用这些点来进行三次曲线拟合。假设拟合函数为 g(x),则可以表示为:
g(x) = a0 + a1x + a2x^2 + a3*x^3
我们需要确定系数 a0、a1、a2、a3 的值,使得拟合函数 g(x) 在给定的 11 个点上和原函数 f(x) 的函数值尽可能接近。
对于三次曲线拟合,我们需要求出 4 个未知数,因此需要至少 4 个方程来求解。我们可以通过以下方式得到 4 个方程:
- 拟合函数 g(x) 在 11 个给定点上的函数值应该与原函数 f(x) 在这些点上的函数值尽可能接近:
g(-1) = a0 - a1 + a2 - a3 = 1/26 g(-0.8) = a0 - 0.8a1 + 0.64a2 - 0.512a3 = 1/21 g(-0.6) = a0 - 0.6a1 + 0.36a2 - 0.216a3 = 1/10 g(-0.4) = a0 - 0.4a1 + 0.16a2 - 0.064a3 = 1/5 g(-0.2) = a0 - 0.2a1 + 0.04a2 - 0.008a3 = 1/2.25 g(0) = a0 = 1 g(0.2) = a0 + 0.2a1 + 0.04a2 + 0.008a3 = 1/2.25 g(0.4) = a0 + 0.4a1 + 0.16a2 + 0.064a3 = 1/5 g(0.6) = a0 + 0.6a1 + 0.36a2 + 0.216a3 = 1/10 g(0.8) = a0 + 0.8a1 + 0.64a2 + 0.512a3 = 1/21 g(1) = a0 + a1 + a2 + a3 = 1/26
- 拟合函数 g(x) 的一阶导数在 x=-1 和 x=1 处应该与原函数 f(x) 在这些点上的一阶导数尽可能接近:
g'(x)|x=-1 = a1 + 2a2(-1) + 3a3(-1)^2 = -50/13 g'(x)|x=1 = a1 + 2a21 + 3a31^2 = 50/13
- 拟合函数 g(x) 的二阶导数在 x=-1 和 x=1 处应该与原函数 f(x) 在这些点上的二阶导数尽可能接近:
g''(x)|x=-1 = 2a2 = 600/169 g''(x)|x=1 = 2a2 = 600/169
现在我们有 4 个方程,即上述 3 个方程和 a0=1,可以用高斯消元法或矩阵求逆法求解系数 a0、a1、a2、a3 的值。
经过计算,可以得到:
a0 = 1 a1 = -0.0316806467 a2 = -1.9376503362 a3 = -0.8663652849
因此,三次曲线拟合函数为:
g(x) = 1 - 0.0316806467x - 1.9376503362x^2 - 0.8663652849*x^3
画出原函数 f(x) 和拟合函数 g(x) 的图像可以发现它们在给定的 11 个点上非常接近,因此可以认为三次曲线拟合函数 g(x) 比较准确地描述了原函数 f(x) 的行为。
原文地址: https://www.cveoy.top/t/topic/n4CW 著作权归作者所有。请勿转载和采集!