什么是试位法?
试位法(拉丁文 regula falsi,也叫"试错法"或"假位法")是一种求解 \(f(x) = 0\) 的"夹逼"型求根方法。和二分法一样,它需要一个让函数变号的初始区间 \([a, b]\),即满足 \(f(a)\cdot f(b) \le 0\),从而保证根一定落在 \(a\) 与 \(b\) 之间。不同的是,它并非每次都把区间对半折,而是在两个端点之间连一条直线,取这条直线与 \(x\) 轴的交点作为下一个近似值,因此通常比二分法收敛得更快。
如何使用本计算器
用标准记号输入函数 \(f(x)\):支持 + - * / ^、括号,以及 sin、cos、tan、exp、log、ln、sqrt、abs、cbrt 等函数。设置下端点 \(a\) 和上端点 \(b\),使 \(f(a)\) 与 \(f(b)\) 异号。再选择最大迭代次数和结果显示的有效数字位数。计算结果会给出近似根 \(x\)、实际迭代次数,以及残差 \(f(x)\)——理想情况下它应当非常接近 0。
公式详解
每一步的下一个近似值,就是穿过两个端点的割线与 \(x\) 轴的交点:
$$x_n = \frac{a_n\cdot f(b_n) - b_n\cdot f(a_n)}{f(b_n) - f(a_n)}$$
如果 \(f(x_n)\) 与 \(f(a_n)\) 同号,就用 \(x_n\) 替换 \(a\);否则替换 \(b\)。这样可以始终保持区间内的变号特性,也就保住了被夹住的根。当 \(|f(x_n)|\) 小于容差(约 \(1\mathrm{e}{-12}\))或达到迭代上限时,迭代停止。
实例演示
取 \(f(x) = x - \cos(x)\),区间 \([-10, 10]\):\(f(-10) \approx -10.839\)(负),\(f(10) \approx 10.839\)(正),因此该区间确实夹住了一个根。算法最终收敛到 \(x \approx 0.7390851332\),此时 \(f(x) \approx 0\)。这个数值正是著名的余弦函数不动点。
常见问题
为什么必须满足 \(f(a)\cdot f(b) \le 0\)? 变号意味着连续函数一定会在区间内穿过零点。如果不满足,该方法可能根本找不到根,工具也会给出相应提示。
为什么有时收敛很慢? 对于曲率较大的函数,可能出现某个端点长期固定不动的情况,导致线性收敛速度变慢。这是试位法的正常表现,也正因如此才要给迭代次数设上限。
如果分母为零怎么办? 当 \(f(b)\) 等于 \(f(a)\) 时,割线呈水平状态,与 \(x\) 轴没有唯一交点;此时计算器会报错,而不会去做除以零的运算。