Я пытаюсь научиться использовать библиотеку GSL, и я застрял в чем-то с функцией "gsl_odeiv2_system" (см. https://www.gnu.org/software/gsl/doc/html/ode-initval.html#c.gsl_odeiv2_system)
. Говорят, что не каждая шаговая функция нуждается в матрице Якобичтобы вычислить интеграцию, поэтому я пытаюсь пересоздать пример, который они приводят без него, но я не понимаю, что делать, когда они говорят: «Якобианский элемент структуры может быть заменен нулевым указателем для этих алгоритмов)».
функция написана так:
gsl_odeiv2_system sys = {func, jac, 2, &mu};
, а аргумент Jac написан так:
int
jac (double t, const double y[], double *dfdy,
double dfdt[], void *params) {
(void)(t); /* avoid unused parameter warning */
double mu = *(double *)params;
gsl_matrix_view dfdy_mat = gsl_matrix_view_array (dfdy, 2, 2);
gsl_matrix * m = &dfdy_mat.matrix;
gsl_matrix_set (m, 0, 0, 0.0);
gsl_matrix_set (m, 0, 1, 1.0);
gsl_matrix_set (m, 1, 0, -2.0*mu*y[0]*y[1] - 1.0);
gsl_matrix_set (m, 1, 1, -mu*(y[0]*y[0] - 1.0));
dfdt[0] = 0.0;
dfdt[1] = 0.0;
return GSL_SUCCESS;
}