通过MCP连接 →

输入计算

数学公式

广告

结果

使 f(x) = 0 的根 x
0.73908513321516
Converged
所用迭代次数 5
残差 f(x) 0.000000000000003
方法 无需导数的牛顿法(Steffensen 型)

这个计算器能做什么

本工具用于求解方程的根,也就是让 \(f(x) = 0\) 成立的那个 \(x\) 值,采用的是一种无需导数的牛顿迭代法,也称为 Steffensen 迭代。经典牛顿法需要先算出一阶导数 \(f'(x)\) 的解析表达式;而这个变体用一个仅靠函数取值就能算出的前向差商来替代导数,因此你完全不必手动求导。它是一款纯数学工具,适用于任意单变量实函数。

使用方法

f(x) 输入框中用变量 \(x\) 写出你的函数。可以使用 + - * / ^、括号、常数 pie,以及常见函数:sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, exp, ln, log, log10, sqrt, abs。三角函数使用弧度。设定初始猜测值 x0(结果会因它而异),选择最大迭代次数 n,即可读出收敛得到的根、残差 \(f(x)\) 以及所用的迭代次数。

公式详解

迭代公式为 $$x_{n+1} = x_n - \frac{f(x_n)^2}{f\!\left(x_n + f(x_n)\right) - f(x_n)}$$ 它来自标准的牛顿迭代步 $$x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}$$ 其中 \(f'(x_n)\) 用步长为 \(h = f(x_n)\) 的前向差商来近似。把这个近似代入,就得到上面的公式。在简单根附近,它的收敛速度大致是二阶的,与真正的牛顿法相当,却只用到函数值。

曲线 f(x) 与 x 轴相交,迭代点收敛到根
每个斯特芬森步骤都用割线斜率向 f(x)=0 的根逼近。

实例演算

对 \(f(x) = x - \cos(x)\),取 \(x_0 = 1\):第 1 次迭代得 \(f(1) = 0.45970\),探测点 \(f(1.45970) = 1.34861\),分母为 \(0.88891\),于是 $$x_1 = 1 - \frac{0.45970^2}{0.88891} = 0.76224$$ 迭代很快收敛到 \(x \approx 0.7390851332\),即满足 \(x = \cos(x)\) 的那个值(也就是 Dottie 数),此时 \(f(x) \approx 0\)。

迭代求根循环的流程图
迭代会一直重复,直到 x 的变化非常小或达到最大迭代次数。

常见问题

为什么有时无法收敛?初始猜测值选得不好可能导致发散,或者收敛到另一个根;如果分母 \(f(x+f(x)) - f(x)\) 变为零,方法会安全地停止。这时换一个 x0 试试即可。

角度用度还是弧度?用弧度,这是数学中的标准约定。如果需要,可用 x*pi/180 进行换算。

需要提供导数吗?不需要——这正是本方法的优势所在。它仅凭函数值就能估算出斜率。

最后更新: