通过MCP连接 →

输入计算

Choose a and b so that f(a) and f(b) have opposite signs (f(a)·f(b) ≤ 0).

数学公式

广告

结果

Approximate root x where f(x) ≈ 0
0.7390851332149927
试位法(Regula Falsi)
根 x 0.7390851332149927
迭代次数 10
根处的 f(x) -0.000000000000281108

什么是试位法?

试位法(拉丁文 regula falsi,也叫"试错法"或"假位法")是一种求解 \(f(x) = 0\) 的"夹逼"型求根方法。和二分法一样,它需要一个让函数变号的初始区间 \([a, b]\),即满足 \(f(a)\cdot f(b) \le 0\),从而保证根一定落在 \(a\) 与 \(b\) 之间。不同的是,它并非每次都把区间对半折,而是在两个端点之间连一条直线,取这条直线与 \(x\) 轴的交点作为下一个近似值,因此通常比二分法收敛得更快。

曲线 f(x) 与 x 轴相交,一条割线连接含根区间的两个端点
试位法用一条直线连接两端点,其与 \(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\) 轴没有唯一交点;此时计算器会报错,而不会去做除以零的运算。

最后更新: