calc: Root Finding

 
 11.7.1 Root Finding
 -------------------
 
 The ‘a R’ (‘calc-find-root’) [‘root’] command finds a numerical solution
 (or “root”) of an equation.  (This command treats inequalities the same
 as equations.  If the input is any other kind of formula, it is
 interpreted as an equation of the form ‘X = 0’.)
 
    The ‘a R’ command requires an initial guess on the top of the stack,
 and a formula in the second-to-top position.  It prompts for a solution
 variable, which must appear in the formula.  All other variables that
 appear in the formula must have assigned values, i.e., when a value is
 assigned to the solution variable and the formula is evaluated with ‘=’,
 it should evaluate to a number.  Any assigned value for the solution
 variable itself is ignored and unaffected by this command.
 
    When the command completes, the initial guess is replaced on the
 stack by a vector of two numbers: The value of the solution variable
 that solves the equation, and the difference between the lefthand and
 righthand sides of the equation at that value.  Ordinarily, the second
 number will be zero or very nearly zero.  (Note that Calc uses a
 slightly higher precision while finding the root, and thus the second
 number may be slightly different from the value you would compute from
 the equation yourself.)
 
    The ‘v h’ (‘calc-head’) command is a handy way to extract the first
 element of the result vector, discarding the error term.
 
    The initial guess can be a real number, in which case Calc searches
 for a real solution near that number, or a complex number, in which case
 Calc searches the whole complex plane near that number for a solution,
 or it can be an interval form which restricts the search to real numbers
 inside that interval.
 
    Calc tries to use ‘a d’ to take the derivative of the equation.  If
 this succeeds, it uses Newton’s method.  If the equation is not
 differentiable Calc uses a bisection method.  (If Newton’s method
 appears to be going astray, Calc switches over to bisection if it can,
 or otherwise gives up.  In this case it may help to try again with a
 slightly different initial guess.)  If the initial guess is a complex
 number, the function must be differentiable.
 
    If the formula (or the difference between the sides of an equation)
 is negative at one end of the interval you specify and positive at the
 other end, the root finder is guaranteed to find a root.  Otherwise,
 Calc subdivides the interval into small parts looking for positive and
 negative values to bracket the root.  When your guess is an interval,
 Calc will not look outside that interval for a root.
 
    The ‘H a R’ [‘wroot’] command is similar to ‘a R’, except that if the
 initial guess is an interval for which the function has the same sign at
 both ends, then rather than subdividing the interval Calc attempts to
 widen it to enclose a root.  Use this mode if you are not sure if the
 function has a root in your interval.
 
    If the function is not differentiable, and you give a simple number
 instead of an interval as your initial guess, Calc uses this widening
 process even if you did not type the Hyperbolic flag.  (If the function
 _is_ differentiable, Calc uses Newton’s method which does not require a
 bounding interval in order to work.)
 
    If Calc leaves the ‘root’ or ‘wroot’ function in symbolic form on the
 stack, it will normally display an explanation for why no root was
 found.  If you miss this explanation, press ‘w’ (‘calc-why’) to get it
 back.