你如何使用Apache Commons Math 3.0+来解决Jacobian的ODE?

时间:2014-04-09 06:26:36

标签: java apache api ode apache-commons-math

关于使用雅可比近似求解ODE的特定Java库,以前的Apache Commons Math库2.2很直观,也有一些明显的例子:

Ordinary Differential Equations Integration

但2.2现已弃用,最近的库3.0 +

Apache Commons Math 3.0

特别是包裹:

org.apache.commons.math3.ode

org.apache.commons.math3.ode.events

org.apache.commons.math3.ode.nonstiff

是替代品,但似乎要复杂得多。我认为新的ODE版本是通过推广数据结构和方法来激发的,但是很难理解一些类是如何一起使用的(例如MainStateJacobianProvider,ExpandableStatefulODE,ParameterizedODE),并且在任何地方都没有它的例子。 Apache没有更新他们的信息页面。 API文档的信息量不大,看起来也不明确。

因此,听起来像是在抱怨我将提出一个具体的问题,如何使用3.0库从上面的2.2中演示的一个示例重新编码同样的问题? < / p>

以下是代码:

public class BasicCircleODE implements ParameterizedODE {

    private double[] c;
    private double omega;

    public BasicCircleODE(double[] c, double omega) {
        this.c = c;
        this.omega = omega;
    }

    public int getDimension() {
        return 2;
    }

    public void computeDerivatives(double t, double[] y, double[] yDot) {
        yDot[0] = omega * (c[1] - y[1]);
        yDot[1] = omega * (y[0] - c[0]);
    }   

    public int getParametersDimension() {
        // we are only interested in the omega parameter
        return 1;
    }

    public void setParameter(int i, double value) {
        omega = value;
    }

}

double[] hY = new double[] { 0.001, 0.001 };
double[] hP = new double[] { 1.0e-6 };
FirstOrderIntegratorWithJacobians integrator = new FirstOrderIntegratorWithJacobians(dp853, ode, hY, hP);
integrator.integrate(t0, y0, dy0dp, t, y, dydy0, dydp);

1 个答案:

答案 0 :(得分:0)

BasicCircle示例已转换为JacobianMatricesTest中的新API。

但我建议您在项目的用户mailinglist上提出问题,开发人员通常会快速回答。