1

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

常微分方程积分

但是现在不推荐使用 2.2,最近的库 3.0+

阿帕奇公共数学 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 演示的示例之一重新编码相同的问题?

这是代码:

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);
4

1 回答 1

0

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

但我建议您在项目的用户邮件列表中询问开发人员通常会快速回答的问题。

于 2014-06-27T21:52:25.077 回答