求根
函数的根是使函数等于零的值。
• polyroots(v) - 返回包含多项式 (其系数在 v 中) 根的矢量。
默认情况下,polyroots 使用拉格尔法 (迭代法),并在复平面中搜索解。
• root(f(var1, var2, ...), var1, [a, b]) - 返回使函数 f 等于零的 var1 的值。如果指定了 a 和 b,则 root 在区间 [a, b] 中查找 var1。否则,在调用 root 之前必须利用估值定义 var1。使用估值时,root 将使用 Secant 或 Mueller 法;在使用根加括号时,root 将使用 Ridder 或 Brent 法。
自变量
• f 为任意变量数的标量值函数。
• var1 是在 f 中得到的标量变量,其为求根相关的变量。定义复数估值以求解复根。
• a, b (可选) 为实数,a < b,而使 f(a) 和 f(b) 具有相反的符号。root 搜索区间 a≤x ≤ b 中的根。
在以符号形式计算 root 函数时,必须指定范围自变量 [a, b]。
• v 是包含多项式系数的矢量,其中多项式的第一个元素为常数项,且
2 ≤ length(v) ≤ 99。
附加信息
• 从功能区插入 root 函数会自动向其分配关键字标签。
• root 函数仅能求解单个具有一个未知数的方程。要同时求解多个方程,请使用
find 或
minerr。
• root 函数取决于 TOL,但对于大于 10-5 的 TOL 没有响应。此为最大收敛准则。此外,小于 1012 的 TOL 值不大可能产生好的结果,同时算法可能无法收敛。
• 对于具有重根的函数,返回的根取决于估值。如果估值极其接近 f 的最小值或最大值,则 root 函数可能无法收敛或收敛到一个远离估值的根。选取适当的估值或括号,会预先对绘制函数曲线有所帮助。
• 快速变化的函数可导致根求解器返回极小的复数部分,即使原本期望得到实数结果。
• 要求解 f(x) = g(x) 形式的方程,可使用类似 x0 := root(f(x) − g(x), x) 的表达式。
• 对于具有已知根 r 的表达式 f(x),求解 f(x) 的其他根等同于求解 h(x) = f(x) / (x − r). 的根。如此忽略已知根对于两个根比较接近的情况非常有用。通常,求解此处定义的 h(x) 的根比尝试通过不同估值得到 f(x) 的其他根更为容易。
• 如果 f(x) 具有接近其根的较小斜率,则 root(f(x), x) 可能收敛到一个相对远离实际根的值 r。在这种情况下,即使 |f(r)|<TOL,r 也有可能远离 f(r) = 0 的点。要求得更精确的根,可降低 TOL 的值。或者尝试求得 root(g(x),x),其中 g(x) = [f(x))]/[(d/dx)*f(x)])。
• 如果出现下列情况,root 函数可能无法收敛,或收敛到意外的根:
◦ 表达式没有根。
◦ 根与初始估计值相差过大。
◦ 估值与根之间具有局部最大值、局部最小值或不连续点。
◦ 估值非常接近函数 f 的最小值或最大值。
◦ 表达式具有复根,但初始估计值为实数 (或者相反)。
◦ 具有小间距重根 (尝试降低 TOL 的值来对其进行区分)。
◦ 根位于函数的平坦区域 (尝试降低 TOL 的值,或求出 f(x) 函数除以其一阶导数的根)。