名称: 根求解 描述: “数值方法中根求解的问题解决策略” 允许工具: [Bash, Read]
根求解
使用时机
在数值方法中处理根求解问题时使用此技能。
决策树
-
问题特征
- 单个根还是多个根?
- 是否有括号区间(知道包含根的区间)?
- 导数是否可用?
-
方法选择
情况 方法 实现 括号区间,无导数 Bisection法,Brent法 scipy.optimize.brentq导数可用 Newton-Raphson法 scipy.optimize.newton无导数 Secant法 scipy.optimize.newton(no fprime)方程组 scipy.optimize.fsolve理想情况下需要Jacobian矩阵 -
实现根求解
scipy.optimize.brentq(f, a, b)- 如果有括号区间,保证收敛scipy.optimize.newton(f, x0, fprime=df)- 在根附近二次收敛- 对于系统:
scipy.optimize.fsolve(F, x0)
-
处理多个根
- 消元法:除以已找到的根
- 多个起始点
sympy_compute.py solve "f(x)" --var x用于符号解
-
验证解决方案
- 检查 |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 获取完整工具文档。