Package com.imsl.math

Class ZeroSystem

java.lang.Object
com.imsl.math.ZeroSystem
All Implemented Interfaces:
Serializable, Cloneable

public class ZeroSystem extends Object implements Serializable, Cloneable
Solves a system of n nonlinear equations f(x) = 0 using a modified Powell hybrid algorithm.

ZeroSystem is based on the MINPACK subroutine HYBRDJ , which uses a modification of M.J.D. Powell's hybrid algorithm. This algorithm is a variation of Newton's method, which uses a finite-difference approximation to the Jacobian and takes precautions to avoid large step sizes or increasing residuals. For further description, see More et al. (1980).

A finite-difference method is used to estimate the Jacobian. Whenever the exact Jacobian can be easily provided, objectF should implement ZeroSystem.Jacobian.

Note that one can use the JDK 1.4 JAVA Logging API to generate intermediate output for the solver. Accumulated levels of detail correspond to JAVA's CONFIG, FINE, FINER, and FINEST logging levels with CONFIG yielding the smallest amount of information and FINEST yielding the most. The levels of output yield the following:

Level Output
CONFIG Iteration increments are printed.
FINE Prints convergnce tests.
FINER Intermediate solution values are provided.
FINEST Tracks progress through internal methods.
See Also:
  • Constructor Details

    • ZeroSystem

      public ZeroSystem(int n)
      Creates an object to find the zeros of a system of n equations.
      Parameters:
      n - an int indicating the number of equations to be solved and the number of unknowns.
  • Method Details

    • setGuess

      public void setGuess(double[] xguess)
      Sets the initial estimate of the root. The default is to set xguess to all zeros.
      Parameters:
      xguess - a double array containing the initial guess. The length of xguess must be equal to the number of equations.
    • setMaxIterations

      public void setMaxIterations(int maxIterations)
      Sets the maximum number of iterations allowed. The default value is 200.
      Parameters:
      maxIterations - an int specifying the maximum number of iterations allowed
      Throws:
      IllegalArgumentException - is thrown if maxIterations is less than or equal to zero.
    • setRelativeError

      public void setRelativeError(double errorRelative)
      Sets the relative error tolerance. The root is accepted if the relative error between two successive approximations to this root is within errorRelative. The default is the square root of the precision, about 1.0e-08.
      Parameters:
      errorRelative - a double specifying the relative error tolerance
      Throws:
      IllegalArgumentException - is thrown if errorRelative is less than 0 or greater than 1.
    • getLogger

      public Logger getLogger()
      Returns the logger object.
      Returns:
      a java.util.logging.Logger object, if present, or null.
    • solve

      Solve a system of nonlinear equations using the modified Powell hybrid algorithm
      Parameters:
      objectF - a ZeroSystem.Function that defines the function whose zero is to be found. If objectF implements a Jacobian then its Jacobian is used. Otherwise a finite difference is computed.
      Returns:
      a double array containing the solution
      Throws:
      ZeroSystem.TooManyIterationsException - is thrown if the maximum number of iterations is exceeded
      ZeroSystem.ToleranceTooSmallException - is thrown if the error tolerance is too small
      ZeroSystem.DidNotConvergeException - is thrown if the algorithm does not converge
      See Also: