帮助我理解 Brent 的求根算法的一部分。在一个典型的迭代中,我们有样本 (a,fa), (b,fb), (c,fc) 都是实数的 (a<b<c) 或 (c<b<a) 。此外,在我对 (1< fa/fb) 和 (fc/fb <= -1) 感兴趣的情况下。在这种情况下(使用 Mathematica 语法),该算法尝试按如下方式进行逆二次插值:
xm=(c-b)/2;
s=fb/fa;
q=fa/fc;
r=fb/fc;
p=s*(2*xm*q*(q-r)-(b-a)(r-1));
q=(q-1)(r-1)(s-1);
If[0<p,q=-q];
p=Abs[p];
If[2*p-Min[Abs[e*q],3*xm*q-Abs[tol*q]]<0,
"Accept Inverse Quadratic Interpolation",(* else *)"Take a Bisection Step"
]
认为
Abs[e*q] > 3*xm*q-Abs[tol*q]
还假设 (tol) 大约为零。那么 If 条件是有效的:
2*p-3*xm*q<0
请解释为什么在条件中使用它,并提供满足上述不等式的 (a,fa),(b,fb),(c,fc) 的值并使我们处于接受逆二次的边缘插值。