Как вы используете Apache Commons Math 3.0+ для решения ODE с помощью Jacobian?
Что касается конкретной библиотеки Java для решения ODE с якобианским приближением, предыдущая библиотека 2.2 Apache Commons Math является интуитивно понятной, и есть также несколько наглядных примеров:
Интегрирование обыкновенных дифференциальных уравнений
Но 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 не очень информативна и выглядит неоднозначно.
Так что вместо того, чтобы звучать так, будто я жалуюсь на все, я задам конкретный вопрос: как бы вы перекодировали ту же проблему из одного из примеров, продемонстрированных с использованием 2.2 выше, с использованием библиотеки 3.0?
Вот код:
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 ответ
Пример BasicCircle был переведен на новый API в JacobianMatricesTest.
Но я бы посоветовал вам задать вопрос в списке рассылки пользователей проекта, где разработчики обычно отвечают быстро.