Class RungeKuttaIntegrator
- java.lang.Object
-
- org.spaceroots.mantissa.ode.RungeKuttaIntegrator
-
- All Implemented Interfaces:
- FirstOrderIntegrator
- Direct Known Subclasses:
- ClassicalRungeKuttaIntegrator, EulerIntegrator, GillIntegrator, MidpointIntegrator, ThreeEighthesIntegrator
public abstract class RungeKuttaIntegrator extends java.lang.Object implements FirstOrderIntegrator
This class implements the common part of all fixed step Runge-Kutta integrators for Ordinary Differential Equations.These methods are explicit Runge-Kutta methods, their Butcher arrays are as follows :
0 | c2 | a21 c3 | a31 a32 ... | ... cs | as1 as2 ... ass-1 |-------------------------- | b1 b2 ... bs-1 bsSome methods are qualified as fsal (first same as last) methods. This means the last evaluation of the derivatives in one step is the same as the first in the next step. Then, this evaluation can be reused from one step to the next one and the cost of such a method is really s-1 evaluations despite the method still has s stages. This behaviour is true only for successful steps, if the step is rejected after the error estimation phase, no evaluation is saved. For an fsal method, we have cs = 1 and asi = bi for all i.
-
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method and Description voidaddSwitchingFunction(SwitchingFunction function, double maxCheckInterval, double convergence)Add a switching function to the integrator.doublegetCurrentStepsize()Get the current value of the integration stepsize.doublegetCurrentStepStart()Get the current value of the step start time ti.abstract java.lang.StringgetName()Get the name of the method.StepHandlergetStepHandler()Get the step handler for this integrator.voidintegrate(FirstOrderDifferentialEquations equations, double t0, double[] y0, double t, double[] y)Integrate the differential equations up to the given time.voidsetStepHandler(StepHandler handler)Set the step handler for this integrator.
-
-
-
Method Detail
-
getName
public abstract java.lang.String getName()
Get the name of the method.- Specified by:
getNamein interfaceFirstOrderIntegrator- Returns:
- name of the method
-
setStepHandler
public void setStepHandler(StepHandler handler)
Set the step handler for this integrator. The handler will be called by the integrator for each accepted step.- Specified by:
setStepHandlerin interfaceFirstOrderIntegrator- Parameters:
handler- handler for the accepted steps
-
getStepHandler
public StepHandler getStepHandler()
Get the step handler for this integrator.- Specified by:
getStepHandlerin interfaceFirstOrderIntegrator- Returns:
- the step handler for this integrator
-
addSwitchingFunction
public void addSwitchingFunction(SwitchingFunction function, double maxCheckInterval, double convergence)
Add a switching function to the integrator.- Specified by:
addSwitchingFunctionin interfaceFirstOrderIntegrator- Parameters:
function- switching functionmaxCheckInterval- maximal time interval between switching function checks (this interval prevents missing sign changes in case the integration steps becomes very large)convergence- convergence threshold in the event time search
-
integrate
public void integrate(FirstOrderDifferentialEquations equations, double t0, double[] y0, double t, double[] y) throws DerivativeException, IntegratorException
Description copied from interface:FirstOrderIntegratorIntegrate the differential equations up to the given time.This method solves an Initial Value Problem (IVP).
Since this method stores some internal state variables made available in its public interface during integration (
FirstOrderIntegrator.getCurrentStepsize()), it is not thread-safe.- Specified by:
integratein interfaceFirstOrderIntegrator- Parameters:
equations- differential equations to integratet0- initial timey0- initial value of the state vector at t0t- target time for the integration (can be set to a value smaller thant0for backward integration)y- placeholder where to put the state vector at each successful step (and hence at the end of integration), can be the same object as y0- Throws:
DerivativeException- this exception is propagated to the caller if the underlying user function triggers oneIntegratorException- if the integrator cannot perform integration
-
getCurrentStepStart
public double getCurrentStepStart()
Description copied from interface:FirstOrderIntegratorGet the current value of the step start time ti.This method can be called during integration (typically by the object implementing the
differential equationsproblem) if the value of the current step that is attempted is needed.The result is undefined if the method is called outside of calls to
FirstOrderIntegrator.integrate(org.spaceroots.mantissa.ode.FirstOrderDifferentialEquations, double, double[], double, double[])- Specified by:
getCurrentStepStartin interfaceFirstOrderIntegrator- Returns:
- current value of the step start time ti
-
getCurrentStepsize
public double getCurrentStepsize()
Description copied from interface:FirstOrderIntegratorGet the current value of the integration stepsize.This method can be called during integration (typically by the object implementing the
differential equationsproblem) if the value of the current stepsize that is tried is needed.The result is undefined if the method is called outside of calls to
FirstOrderIntegrator.integrate(org.spaceroots.mantissa.ode.FirstOrderDifferentialEquations, double, double[], double, double[])- Specified by:
getCurrentStepsizein interfaceFirstOrderIntegrator- Returns:
- current value of the stepsize
-
-
DataMelt 3.0 © DataMelt by jWork.ORG