关于使用雅可比近似求解ODE的特定Java库,以前的Apache Commons Math库2.2很直观,也有一些明显的例子:
Ordinary Differential Equations Integration
但2.2现已弃用,最近的库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);
答案 0 :(得分:0)
BasicCircle示例已转换为JacobianMatricesTest中的新API。
但我建议您在项目的用户mailinglist上提出问题,开发人员通常会快速回答。