Skip to content
Back to skills

Root Finding

ASecurity

Use when a task asks for a root finder, zero finding, nonlinear equation solving, compressible flow Mach number solution, or implicit performance equation inversion in aerospace analysis. Determine the root of a nonlinear scalar equation f(x) = 0 numerically with the bisection method, Newton-Raphson, the secant method, or fixed-point iteration: bracket the root or supply an initial guess, apply the iteration, and produce the root to a specified tolerance under function tolerance, step toleran...

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 27, 2026
ai-agentspythonrustgitperformance

Works with

  • claude code
  • cli

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned September 27, 2026

npx -y skills add ashfordeOU/aero-agent-skills --skill root-finding --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Root Finding?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Root Finding
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ashfordeou-root-finding/badge)](https://www.skillsdirectory.com/skills/ashfordeou-root-finding)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: root-finding
description: "Use when a task asks for a root finder, zero finding, nonlinear equation solving, compressible flow Mach number solution, or implicit performance equation inversion in aerospace analysis. Determine the root of a nonlinear scalar equation f(x) = 0 numerically with the bisection method, Newton-Raphson, the secant method, or fixed-point iteration: bracket the root or supply an initial guess, apply the iteration, and produce the root to a specified tolerance under function tolerance, step tolerance, and max iteration convergence criteria. Produces the root, the method, and the iteration count. Trigger: root-finding, bisection, newton-raphson, secant-method, fixed-point iteration, mach number root, nonlinear equation, zero finding."
license: Apache-2.0
compliance: STANDARDS-REF
standards:
  - id: naca-tr-824
    reference-only: true
gated: false
domain: cross-cutting
pack: cross-cutting
compatibility: "agentskills.io SKILL.md; any SKILL.md host (Claude Code, Hermes, OpenClaw)"
metadata:
  domain: cross-cutting
  subdomain: numerics
  tags: [root-finding, bisection, newton-raphson, secant-method, secant, fixed-point-iteration, mach-number, nonlinear-equation, zero-finding, convergence-criteria, initial-guess, bracket]
  version: 0.1.0
  author: Aero Agent Skills
---

# Root Finding (cross-cutting/numerics/root-finding)

Use when the task is solving a nonlinear scalar equation f(x) = 0
numerically: choosing the bracketing or iteration method, supplying
the bracket or initial guess, and reporting the root to a specified
tolerance.

## Domain quick reference

All worked numbers are for f(x) = x**2 - 2, whose positive root is
sqrt(2) = 1.4142135623730951.

- Bisection: with f(a) * f(b) < 0 (a sign change is bracketed),
  evaluate the midpoint c = (a + b) / 2 and halve the interval on
  the side that keeps the sign change. Linear convergence: one
  binary digit per step, error bounded by the interval half-width,
  so about 34 steps take [1, 2] to sqrt(2) at tol = 1e-10. Robust
  and derivative-free; needs only sign information.
- Newton-Raphson: x_{k+1} = x_k - f(x_k) / f'(x_k). Quadratic
  convergence for a simple root when the initial guess is close
  enough; needs the derivative f'. From x0 = 1.5 on x**2 - 2 the
  iterate reaches 1.41421356237 in three steps. Fails when f'(x) is
  zero at a step (the update is undefined).
- Secant method: x_{k+1} = x_k - f(x_k) * (x_k - x_{k-1}) /
  (f(x_k) - f(x_{k-1})). Approximates the derivative with the secant
  slope, so no analytic derivative is needed; superlinear convergence
  of order about 1.618 for a simple root. Fails when the two function
  values are equal (the slope is zero).
- Fixed-point iteration: rewrite f(x) = 0 as x = g(x) and iterate
  x_{k+1} = g(x_k). Converges when g is a contraction at the fixed
  point, in practice when abs(g'(x*)) < 1; a repelling fixed point
  with abs(g'(x*)) > 1 diverges.
- Bracketing and initial guess requirements: bisection needs a
  bracket whose endpoints straddle zero; Newton-Raphson and the
  secant method need initial guesses near the root; fixed-point
  iteration needs a contractive rewrite. There is no global method
  for arbitrary nonlinear equations.
- Convergence criteria: the function tolerance abs(f(x)) < tol
  declares convergence for Newton-Raphson and the secant method; the
  step tolerance (interval half-width, or abs(x_{k+1} - x_k) for
  fixed-point iteration) declares convergence for bisection and
  fixed-point iteration; every method stops with an error after
  max_iter iterations.
- Non-monotonic and ill-conditioned behavior: bisection still
  converges on a non-monotonic function as long as the endpoints
  straddle zero, but a double root (f touches zero without a sign
  change, e.g. x**2 = 0) has no straddle; Newton-Raphson can
  overshoot on non-convex functions or converge to a different root;
  a near-zero derivative amplifies function error and makes the
  problem ill-conditioned; the secant method can blow up when
  f(x_k) is close to f(x_{k-1}).
- Aerospace application: the isentropic area-Mach relation
  A/A* = (1/M) * ((2/(gamma+1)) * (1 + (gamma-1)/2 * M**2)) **
  ((gamma+1)/(2*(gamma-1))) with gamma = 1.4 is solved for M given
  A/A*; A/A* = 1.2 gives the subsonic root M = 0.59024876099 and the
  supersonic root M = 1.53414976720. Implicit performance equations
  (range, climb, thrust balance) are inverted the same way.
- All functions are deterministic and stdlib-only; no network, no
  third-party numerical libraries.

## Workflow

1. Write the problem as f(x) = 0 and record the tolerance and the
   max iteration budget.
2. Bracket the root when possible: find a and b with f(a) * f(b) < 0
   and call bisection(f, a, b, tol, max_iter); otherwise pick initial
   guesses for the derivative-based methods.
3. Pick the method: bisection for robustness and guaranteed
   convergence on a bracket, newton_raphson when the derivative is
   cheap, secant when it is not, fixed_point_iteration when a
   contractive rewrite x = g(x) is natural.
4. Call the method; a ValueError means the bracket did not straddle
   zero, the derivative or secant slope was zero, or the iteration
   did not converge within max_iter.
5. Verify the result: evaluate f(root) and confirm it is below the
   function tolerance, and report the root, the method, and the
   iteration count together.

## Pitfalls

- Confusing root finding with ODE solving: ode-solvers marches a
  state y(t) forward in time from an initial condition; root finding
  solves f(x) = 0 for a single scalar. A task that says "solve the
  equation" without time marching is a root-finding problem and
  routes here, not to ode-solvers.
- Confusing root finding with numerical integration: quadrature
  returns a definite integral, a single number, in one pass; root
  finding locates where a function vanishes. Integrals route to
  numerical-integration.
- Confusing root finding with interpolation: interpolation fits a
  curve through given data points; root finding locates zeros of a
  given function. Fitting questions route to interpolation.
- Confusing root finding with convergence verification: that leaf
  estimates discretization error with Richardson extrapolation, it
  does not locate zeros. Error estimation routes to
  convergence-verification.
- Calling bisection without a straddle: f(a) * f(b) >= 0 raises
  ValueError, never silently searches. A double root (x**2 = 0)
  touches zero without changing sign and cannot be bracketed by
  bisection alone.
- Calling newton_raphson where the derivative vanishes: f'(x) = 0 at
  a step raises ValueError; the update x - f/f' is undefined there.
- Trusting a root without the residual check: always evaluate f(root)
  against the function tolerance; a non-converged or wrong-branch
  root is caught by the residual, not by the iteration count.
- Using a loose max_iter with a tight tol: bisection needs about
  log2((b - a) / tol) steps; a max_iter below that raises
  ValueError on convergence failure, which is the contract, not a
  bug.
- Expecting one method to work everywhere: no method is global.
  Newton-Raphson and the secant method converge locally and can
  diverge or land on a different root; fixed-point iteration needs a
  contractive rewrite. Report the bracket or initial guess so the
  result is reproducible.
- Routing compressible-flow Mach table lookups here: closed-form
  property tables and airfoil data stay with their data leaves; the
  inversion of a compressible-flow relation for a Mach root is the
  root-finding task and routes here.

## Behavior contract (gate 3)

The bisection, Newton-Raphson, secant, and fixed-point iteration
logic, the bracket and initial guess requirements, the convergence
criteria, and the ValueError contracts (non-straddling bracket, zero
derivative or secant slope, convergence failure) are exercised by the
gate 3 contract test: scripts/test_root_finding_logic.py against
scripts/root_finding_logic.py (stdlib unittest, offline). Run:
python3 scripts/test_root_finding_logic.py

## Compliance

- Standards referenced, not reproduced: NACA TR-824 anchors the
  compressible-flow tables and isentropic area-Mach relations that
  these root-finding methods invert; the numerical methods themselves
  are classical numerical-analysis methodology, summary-only per
  standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.

Files in this skill

  • SKILL.md8.2 KB
  • scripts/root_finding_logic.py7.8 KB
  • scripts/test_root_finding_logic.py9.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…