added a section for the ODE package in the user guide
git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/math/trunk@517840 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
9bcae682df
commit
642cf40deb
|
@ -0,0 +1,161 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<?xml-stylesheet type="text/xsl" href="./xdoc.xsl"?>
|
||||
<!-- $Revision: 480435 $ $Date: 2006-11-29 08:06:35 +0100 (mer., 29 nov. 2006) $ -->
|
||||
<document url="ode.html">
|
||||
|
||||
<properties>
|
||||
<title>The Commons Math User Guide - Ordinary Differential Equations Integration</title>
|
||||
</properties>
|
||||
|
||||
<body>
|
||||
<section name="14 Ordinary Differential Equations Integration">
|
||||
<subsection name="14.1 Overview" href="overview">
|
||||
<p>
|
||||
The ode package provides classes to solve Ordinary Differential Equations problems.
|
||||
</p>
|
||||
<p>
|
||||
This package solves Initial Value Problems of the form y'=f(t,y) with t<sub>0</sub>
|
||||
and y(t<sub>0</sub>)=y<sub>0</sub> known. The provided integrators compute an estimate
|
||||
of y(t) from t=t<sub>0</sub> to t=t<sub>1</sub>.
|
||||
</p>
|
||||
<p>
|
||||
All integrators provide dense output. This means that besides computing the state vector
|
||||
at discrete times, they also provide a cheap mean to get the state between the time steps.
|
||||
They do so through classes extending the
|
||||
<a href="../apidocs/org/apache/commons/math/ode/StepInterpolator.html">StepInterpolator</a>
|
||||
abstract class, which are made available to the user at the end of each step.
|
||||
</p>
|
||||
<p>
|
||||
All integrators handle multiple switching functions. This means that the integrator can be
|
||||
driven by discrete events (occurring when the signs of user-supplied
|
||||
<a href="../apidocs/org/apache/commons/math/ode/SwitchingFunction.html">switching functions</a>
|
||||
change). The steps are shortened as needed to ensure the events occur at step boundaries (even
|
||||
if the integrator is a fixed-step integrator). When the events are triggered, integration can
|
||||
be stopped (this is called a G-stop facility), the state vector can be changed, or integration
|
||||
can simply go on. The latter case is useful to handle discontinuities in the differential
|
||||
equations gracefully and get accurate dense output even close to the discontinuity. The events
|
||||
are detected when the functions signs are different at the beginning and end of the current step,
|
||||
or at several equidistant points inside the step if its length becomes larger than the maximal
|
||||
checking interval specified for the given switching function. This time interval should be set
|
||||
appropriately to avoid missing some switching function sign changes (it is possible to set it
|
||||
to <code>Double.POSITIVE_INFINITY</code> if the sign changes cannot be missed).
|
||||
</p>
|
||||
<p>
|
||||
The user should describe his problem in his own classes which should implement the
|
||||
<a href="../apidocs/org/apache/commons/math/ode/FirstOrderDifferentialEquations.html">FirstOrderDifferentialEquations</a>
|
||||
interface. Then he should pass it to the integrator he prefers among all the classes that implement
|
||||
the <a href="../apidocs/org/apache/commons/math/ode/FirstOrderIntegrator.html">FirstOrderIntegrator</a>
|
||||
interface.
|
||||
</p>
|
||||
<p>
|
||||
The solution of the integration problem is provided by two means. The first one is aimed towards
|
||||
simple use: the state vector at the end of the integration process is copied in the y array of the
|
||||
<code>FirstOrderIntegrator.integrate</code> method. The second one should be used when more in-depth
|
||||
information is needed throughout the integration process. The user can register an object implementing
|
||||
the <a href="../apidocs/org/apache/commons/math/ode/StepHandler.html">StepHandler</a> interface or a
|
||||
<a href="../apidocs/org/apache/commons/math/ode/StepNormalizer.html">StepNormalizer</a> object wrapping
|
||||
a user-specified object implementing the
|
||||
<a href="../apidocs/org/apache/commons/math/ode/FixedStepHandler.html">FixedStepHandler</a> interface
|
||||
into the integrator before calling the <code>FirstOrderIntegrator.integrate</code> method. The user object
|
||||
will be called appropriately during the integration process, allowing the user to process intermediate
|
||||
results. The default step handler does nothing.
|
||||
</p>
|
||||
<p>
|
||||
<a href="../apidocs/org/apache/commons/math/ode/ContinuousOutputModel.html">ContinuousOutputModel</a>
|
||||
is a special-purpose step handler that is able to store all steps and to provide transparent access to
|
||||
any intermediate result once the integration is over. An important feature of this class is that it
|
||||
implements the <code>Serializable</code> interface. This means that a complete continuous model of the
|
||||
integrated function througout the integration range can be serialized and reused later (if stored into
|
||||
a persistent medium like a filesystem or a database) or elsewhere (if sent to another application).
|
||||
Only the result of the integration is stored, there is no reference to the integrated problem by itself.
|
||||
</p>
|
||||
<p>
|
||||
Other default implementations of the <a href="../apidocs/org/apache/commons/math/ode/StepHandler.html">StepHandler</a>
|
||||
interface are available for general needs
|
||||
(<a href="../apidocs/org/apache/commons/math/ode/DummyStepHandler.html">DummyStepHandler</a>,
|
||||
<a href="../apidocs/org/apache/commons/math/ode/StepNormalizer.html">StepNormalizer</a>) and custom
|
||||
implementations can be developped for specific needs. As an example, if an application is to be
|
||||
completely driven by the integration process, then most of the application code will be run inside a
|
||||
step handler specific to this application.
|
||||
</p>
|
||||
<p>
|
||||
Some integrators (the simple ones) use fixed steps that are set at creation time. The more efficient
|
||||
integrators use variable steps that are handled internally in order to control the integration error
|
||||
with respect to a specified accuracy (these integrators extend the
|
||||
<a href="../apidocs/org/apache/commons/math/ode/AdaptiveStepsizeIntegrator.html">AdaptiveStepsizeIntegrator</a>
|
||||
abstract class). In this case, the step handler which is called after each successful step shows up
|
||||
the variable stepsize. The <a href="../apidocs/org/apache/commons/math/ode/StepNormalizer.html">StepNormalizer</a>
|
||||
class can be used to convert the variable stepsize into a fixed stepsize that can be handled by classes
|
||||
implementing the <a href="../apidocs/org/apache/commons/math/ode/FixedStepHandler.html">FixedStepHandler</a>
|
||||
interface. Adaptive stepsize integrators can automatically compute the initial stepsize by themselves,
|
||||
however the user can specify it if he prefers to retain full control over the integration or if the
|
||||
automatic guess is wrong.
|
||||
</p>
|
||||
</subsection>
|
||||
<subsection name="14.2 ODE Problems" href="problems">
|
||||
<p>
|
||||
First order ODE problems are defined by implementing the
|
||||
<a href="../apidocs/org/apache/commons/math/ode/FirstOrderDifferentialEquations.html">FirstOrderDifferentialEquations</a>
|
||||
interface before they can be handled by the integrators <code>FirstOrderIntegrator.integrate</code>
|
||||
method.
|
||||
</p>
|
||||
<p>
|
||||
A first order differential equations problem, as seen by an integrator is the time
|
||||
derivative <code>dY/dt</code> of a state vector <code>Y</code>, both being one
|
||||
dimensional arrays. From the integrator point of view, this derivative depends
|
||||
only on the current time <code>t</code> and on the state vector <code>Y</code>.
|
||||
</p>
|
||||
<p>
|
||||
For real world problems, the derivative depends also on parameters that do not
|
||||
belong to the state vector (dynamical model constants for example). These
|
||||
constants are completely outside of the scope of this interface, the classes
|
||||
that implement it are allowed to handle them as they want.
|
||||
</p>
|
||||
</subsection>
|
||||
<subsection name="14.3 Integrators" href="integrators">
|
||||
<p>
|
||||
The tables below show the various integrators available.
|
||||
</p>
|
||||
<p>
|
||||
<table border="1" align="center">
|
||||
<tr BGCOLOR="#CCCCFF"><td colspan=2><font size="+2">Fixed Step Integrators</font></td></tr>
|
||||
<tr BGCOLOR="#EEEEFF"><font size="+1"><td>Name</td><td>Order</td></font></tr>
|
||||
<tr><td><a href="../apidocs/org/apache/commons/math/ode/EulerIntegrator.html">Euler</a></td><td>1</td></tr>
|
||||
<tr><td><a href="../apidocs/org/apache/commons/math/ode/MidpointIntegrator.html">Midpoint</a></td><td>2</td></tr>
|
||||
<tr><td><a href="../apidocs/org/apache/commons/math/ode/ClassicalRungeKuttaIntegrator.html">Classical Runge-Kutta</a></td><td>4</td></tr>
|
||||
<tr><td><a href="../apidocs/org/apache/commons/math/ode/GillIntegrator.html">Gill</a></td><td>4</td></tr>
|
||||
<tr><td><a href="../apidocs/org/apache/commons/math/ode/ThreeEighthesIntegrator.html">3/8</a></td><td>4</td></tr>
|
||||
</table>
|
||||
</p>
|
||||
<p>
|
||||
<table border="1" align="center">
|
||||
<tr BGCOLOR="#CCCCFF"><td colspan=3><font size="+2">Adaptive Stepsize Integrators</font></td></tr>
|
||||
<tr BGCOLOR="#EEEEFF"><font size="+1"><td>Name</td><td>Integration Order</td><td>Error Estimation Order</td></font></tr>
|
||||
<tr><td><a href="../apidocs/org/apache/commons/math/ode/HighamHall54Integrator.html">Higham and Hall</a></td><td>5</td><td>4</td></tr>
|
||||
<tr><td><a href="../apidocs/org/apache/commons/math/ode/DormandPrince54Integrator.html">Dormand-Prince 5(4)</a></td><td>5</td><td>4</td></tr>
|
||||
<tr><td><a href="../apidocs/org/apache/commons/math/ode/DormandPrince853Integrator.html">Dormand-Prince 8(5,3)</a></td><td>8</td><td>5 and 3</td></tr>
|
||||
<tr><td><a href="../apidocs/org/apache/commons/math/ode/GraggBulirschStoerIntegrator.html">Gragg-Bulirsch-Stoer</a> variable (up to 18 by default)</td><td>variable</td></tr>
|
||||
</table>
|
||||
</p>
|
||||
</subsection>
|
||||
</section>
|
||||
</body>
|
||||
</document>
|
Loading…
Reference in New Issue