程序包 org.hipparchus.ode
该程序包提供了用于解决普通微分方程问题的类。
该程序包解决形式为y'=f(t,y)
的初值问题,其中t0
和y(t0)=y0
已知。提供的积分器从t=t0
到t=t1
计算y(t)
的估计值。还可以获得相对于初始状态dy(t)/dy(t0)
或相对于某些ODE参数dy(t)/dp
的导数。
所有积分器都提供密集输出。这意味着除了在离散时间计算状态向量外,它们还提供了一种廉价的方法来获取时间步长之间的状态。它们通过扩展ODEStateInterpolator
抽象类的类来实现,这些类在每个步骤结束时提供给用户使用。
所有积分器都处理基于切换函数的多个离散事件检测。这意味着积分器可以由用户指定的离散事件驱动。必要时缩短步骤以确保事件发生在步骤边界上(即使积分器是固定步长积分器)。当触发事件时,积分可以停止(这称为G-stop功能),状态向量可以更改,或者积分可以继续进行。后一种情况对于优雅处理微分方程中的不连续性并在接近不连续性时获得准确的密集输出非常有用。有关事件处理的更多信息,请参见org.hipparchus.ode.events
。
用户应该在自己的类中描述问题(在下面的图表中为UserProblem
),这些类应该实现OrdinaryDifferentialEquation
接口。然后,用户应该将其传递给他在所有实现ODEIntegrator
接口的类中选择的积分器。
积分问题的解决方案通过两种方式提供。第一种针对简单使用:在积分过程结束时,状态向量被复制到ODEIntegrator.integrate
方法的y
数组中。第二种应该在整个积分过程中需要更深入的信息时使用。用户可以在调用ODEIntegrator.integrate
方法之前将实现ODEStepHandler
接口或将实现ODEFixedStepHandler
接口的用户指定对象包装成StepNormalizer
对象注册到积分器中。在积分过程中将适当调用用户对象,允许用户处理中间结果。默认的步骤处理程序什么也不做。
DenseOutputModel
是一个特殊用途的步骤处理程序,能够存储所有步骤并在积分结束后提供对任何中间结果的透明访问。该类的一个重要特点是它实现了Serializable
接口。这意味着可以将整个积分范围内的集成函数的完整连续模型序列化并在以后重用(如果存储在持久介质如文件系统或数据库中)或在其他地方(如果发送到另一个应用程序)。仅存储积分的结果,没有对积分问题本身的引用。
可以为特定需求开发自定义实现。例如,如果一个应用程序完全由积分过程驱动,则该应用程序的大部分代码将在专门针对该应用程序的步骤处理程序中运行。
一些积分器(简单的积分器)使用在创建时设置的固定步长。更高效的积分器使用内部处理的可变步长,以控制积分误差与指定精度的关系(这些积分器扩展了AdaptiveStepsizeIntegrator
抽象类)。在这种情况下,每个成功步骤后调用的步骤处理程序显示可变步长。可以使用StepNormalizer
类将可变步长转换为可以由实现ODEFixedStepHandler
接口的类处理的固定步长。自适应步长积分器可以自动计算初始步长,但是如果用户更喜欢保留对积分的完全控制或自动猜测错误,则用户可以指定它。
名称 | 阶数 |
Euler |
1 |
Midpoint |
2 |
经典龙格-库塔 |
4 |
Gill |
4 |
3/8 |
4 |
Luther |
6 |
名称 | 积分阶数 | 误差估计阶数 |
Higham and Hall |
5 | 4 |
多姆和普林斯 5(4) |
5 | 4 |
多姆和普林斯 8(5,3) |
8 | 5和3 |
格雷格-布利尔施-斯托尔 |
可变(默认最多18个) | 可变 |
亚当斯-巴什福斯 |
可变 | 可变 |
亚当斯-穆尔顿 |
可变 | 可变 |
在上表中,亚当斯-巴什福斯
和亚当斯-穆尔顿
积分器显示为可变步长积分器。这是对使用Nordsieck向量表示的经典算法的扩展。
-
类说明AbstractFieldIntegrator<T extends CalculusFieldElement<T>>为所有积分器管理通用样板的基类。为所有积分器管理通用样板的基类。该抽象类提供了样板参数列表。该类将
复杂普通微分方程
转换为实数
。时间、主要状态向量和次要状态向量的容器。时间、主要状态向量和次要状态向量以及它们的导数的容器。该接口表示复杂状态
的一阶微分方程集。该接口允许用户向主要微分方程集添加次要微分方程。该类在积分过程中存储由ODE积分器提供的所有信息,并从中构建解的连续模型。该类映射完整状态或导数的部分,涉及特定微分方程。该类表示一组组合的一阶微分方程,至少有一个主要方程集,可以通过一些次要方程集进行扩展。FieldDenseOutputModel<T extends CalculusFieldElement<T>>该类在积分过程中存储ODE积分器提供的所有信息,并从中构建解的连续模型。FieldEquationsMapper<T extends CalculusFieldElement<T>>该类映射完整状态或导数的部分,涉及一组微分方程。FieldExpandableODE<T extends CalculusFieldElement<T>>该类表示一组组合的一阶微分方程,至少有一个主要方程集,可以通过一些次要方程集进行扩展。FieldODEIntegrator<T extends CalculusFieldElement<T>>该接口表示微分方程的一阶积分器。FieldODEState<T extends CalculusFieldElement<T>>时间、主状态向量和次要状态向量的容器。FieldODEStateAndDerivative<T extends CalculusFieldElement<T>>时间、主状态向量和次要状态向量以及它们的导数的容器。FieldOrdinaryDifferentialEquation<T extends CalculusFieldElement<T>>该接口表示一组一阶微分方程。FieldSecondaryODE<T extends CalculusFieldElement<T>>该接口允许用户向主要微分方程集添加次要微分方程。该类将二阶微分方程转换为一阶微分方程。用于异常消息中使用的本地化消息格式的枚举。MultistepFieldIntegrator<T extends CalculusFieldElement<T>>这个类是普通微分方程的多步积分器的基类。这个类是普通微分方程的多步积分器的基类。用于在计算偏导数方程时为某个参数精确计算雅可比矩阵的接口。该接口表示微分方程的一阶积分器。扩展一阶微分方程以精确计算偏导数方程的雅可比矩阵的接口。时间、主状态向量和次要状态向量的容器。时间、主状态向量和次要状态向量以及它们的导数的容器。该接口表示一组一阶微分方程。将参数名称与步骤配对,以便通过有限差分计算相关的雅可比矩阵的简单容器。该接口使得能够处理任何可参数化对象。用于在计算偏导数方程时通过有限差分计算某个参数的雅可比矩阵的接口。该接口允许用户向主要微分方程集添加次要微分方程。该接口表示一组二阶微分方程。TestFieldProblem1<T extends CalculusFieldElement<T>>该类用于ODE积分器的junit测试中。TestFieldProblem2<T extends CalculusFieldElement<T>>该类用于ODE积分器的junit测试中。TestFieldProblem3<T extends CalculusFieldElement<T>>该类用于ODE积分器的junit测试中。TestFieldProblem4<T extends CalculusFieldElement<T>>该类用于ODE积分器的junit测试中。TestFieldProblem5<T extends CalculusFieldElement<T>>该类用于ODE积分器的junit测试中。TestFieldProblem6<T extends CalculusFieldElement<T>>该类用于ODE积分器的junit测试中。TestFieldProblem7<T extends CalculusFieldElement<T>>该类用于ODE积分器的junit测试中。TestFieldProblem8<T extends CalculusFieldElement<T>>该类用于ODE积分器的junit测试中。TestFieldProblem8.Inertia<T extends CalculusFieldElement<T>>三维物体的惯性容器。TestFieldProblem8.InertiaAxis<T extends CalculusFieldElement<T>>惯性矩和相关惯性轴的容器。TestFieldProblemAbstract<T extends CalculusFieldElement<T>>该类用作在ODE积分器的junit测试期间进行积分的问题的基类。TestFieldProblemHandler<T extends CalculusFieldElement<T>>该类用于处理在ODE积分器的junit测试期间集成的测试问题的步骤。该类用于ODE积分器的junit测试中。该类用于ODE积分器的junit测试中。该类用于ODE积分器的junit测试中。该类用于ODE积分器的junit测试中。该类用于ODE积分器的junit测试中。该类用于ODE积分器的junit测试中。该类用于ODE积分器的junit测试中。该类用于ODE积分器的junit测试中。三维物体的惯性容器。惯性矩和相关惯性轴的容器。该类用作在ODE积分器的junit测试期间进行积分的问题的基类。该类用于处理在ODE积分器的junit测试期间集成的测试问题的步骤。该类定义了一组用于计算相对于初始状态向量和主ODE集的某些参数的全局雅可比矩阵的次要方程。用于方程不匹配的特殊异常。