给定三个点,和,我想计算二次函数 (2 次多项式)的系数a0
,a1
和, 其中?a2
(x0, y0)
(x1, y1)
(x2, y2)
yi = a0 + a1*xi + a2*xi*xi
我尝试了以下两个公式,但输出的精度并没有给我留下深刻的印象
final double x0mx1, x0mx2, x1mx2, t0, t1, t2;
double a2, a1, a0;
x0mx1 = (x0 - x1);
x0mx2 = (x0 - x2);
x1mx2 = (x1 - x2);
// method one
t0 = (y0 / (x0mx1 * x0mx2));
t1 = (y1 / (-x0mx1 * x1mx2));
t2 = (y2 / (x0mx2 * x1mx2));
a2 = (t0 + t1 + t2);
a1 = -((t0 * (x1 + x2)) + (t1 * (x0 + x2)) + (t2 * (x0 + x1)));
a0 = (t0 * x1 * x2) + (t1 * x0 * x2) + (t2 * x0 * x1);
// method two
a2 = ((((y1 - y0) * (x0mx2)) + ((y2 - y0) * ((-x0mx1)))) /
(((x0mx2) * ((x1 * x1) - (x0 * x0)))
+ (((-x0mx1)) * ((x2 * x2) - (x0 * x0)))));
a1 = (((y1 - y0) - (a2 * ((x1 * x1) - (x0 * x0)))) / ((-x0mx1)));
a0 = y0 - (a2 * x0 * x0) - (a1 * x0);
结果确实有点吻合,即,似乎大致+/- 1e-5 * max{ |a0'|, |a1'|, |a2'| }
在真实解a0'
、a1'
和的窗口内a2'
。
有没有更好、数值更稳定的方法来计算系数?
顺便说一句,我正在使用 Java,尽管我认为这无关紧要。
干杯,托马斯。