根求解Skill root-finding

这个技能专注于数值方法中的根求解问题,提供策略和工具来实现方程的根查找。适用于需要找到函数零点的场景,如数学建模、工程计算等。关键词包括:根求解、数值分析、Python、Scipy、Bisection法、Newton-Raphson法、算法实现、方程求解、数值计算。

数值计算 0 次安装 0 次浏览 更新于 3/14/2026

名称: 根求解 描述: “数值方法中根求解的问题解决策略” 允许工具: [Bash, Read]

根求解

使用时机

在数值方法中处理根求解问题时使用此技能。

决策树

  1. 问题特征

    • 单个根还是多个根?
    • 是否有括号区间(知道包含根的区间)?
    • 导数是否可用?
  2. 方法选择

    情况 方法 实现
    括号区间,无导数 Bisection法,Brent法 scipy.optimize.brentq
    导数可用 Newton-Raphson法 scipy.optimize.newton
    无导数 Secant法 scipy.optimize.newton (no fprime)
    方程组 scipy.optimize.fsolve 理想情况下需要Jacobian矩阵
  3. 实现根求解

    • scipy.optimize.brentq(f, a, b) - 如果有括号区间,保证收敛
    • scipy.optimize.newton(f, x0, fprime=df) - 在根附近二次收敛
    • 对于系统:scipy.optimize.fsolve(F, x0)
  4. 处理多个根

    • 消元法:除以已找到的根
    • 多个起始点
    • sympy_compute.py solve "f(x)" --var x 用于符号解
  5. 验证解决方案

    • 检查 |f(root)| < 容忍度
    • 验证根在预期域内
    • z3_solve.py prove "f(root) == 0"

工具命令

Scipy_Brentq

uv run python -c "from scipy.optimize import brentq; root = brentq(lambda x: x**2 - 2, 0, 2); print('根:', root)"

Scipy_Newton

uv run python -c "from scipy.optimize import newton; root = newton(lambda x: x**2 - 2, 1.0, fprime=lambda x: 2*x); print('根:', root)"

Sympy_Solve

uv run python -m runtime.harness scripts/sympy_compute.py solve "x**3 - x - 1" --var x

关键技术

来自索引教材:

  • [数值分析 (Burden R.L., Fair… (Z-Library)] 他的近似有多准确?第二章 单变量方程的解 2. 方法和软件概览 在本章中,我们考虑了求解方程 f (x) = 0 的问题,其中 f 是一个给定的连续函数。
  • [数值分析导论… (Z-Library)] 非线性算子方程的计算解。求解非线性方程组的方法。美国工业与应用数学学会,费城。
  • [数值分析导论… (Z-Library)] 一般多项式根求解方法 有大量专门为多项式设计的根查找算法。其中许多在书籍 Dejon 和 Henrici (1969), Henrici (1974, chap. 中有详细讨论。这里类型太多,无法全部描述。
  • [数值分析导论… (Z-Library)] J n 考虑乘积 a 0 a 1 ••• am,其中 a 0 , a1, ••• , am 是 m + 1 个数字,存储在计算机中使用 n 位基 fJ 算术。w 的严格界限是什么?w 大小的统计估计是什么?
  • [数值分析导论… (Z-Library)] 文献讨论 有大量关于计算单个方程根的方法的文献。参见 Householder (1970), Ostrowski (1973), 和 Traub (1964) 的书籍以获取更广泛的开发。牛顿法是最广泛使用的方法之一,其发展归功于许多人。

认知工具参考

参见 .claude/skills/math-mode/SKILL.md 获取完整工具文档。