Ошибка компиляции типа указателя в решении GSL ODE

Я работаю с кодом на странице примеров GSL, чтобы попытаться решить систему из четырех дифференциальных уравнений. Я боролся с передачей пяти параметров в систему ODE и пришел к одной последней (надеюсь!) Ошибке во время компиляции. Далее следует фрагмент кода, сообщающий мне об ошибке.

114:57: error: invalid conversion from ‘int (*)(double, const double*,
double*, double**, void*)’ to ‘int (*)(double, const double*, double*,
double*, void*)’ [-fpermissive]

которая соответствует строке, начинающейся с gsl_odeiv2_system:

int main()
{
double t = 0.0;
double y[4] = { 0.0, 0.0, 1.0, 1.0 };
int i, s;

struct pendula_params * info;
info->m2 = 1.0;
info->m1 = 1.0;
info->l1 = 1.0;
info->l2 = 1.0;
info->g  = 1.0;

gsl_odeiv2_system sys = { pendula, jacobian, 4, &info };

gsl_odeiv2_driver *d =
gsl_odeiv2_driver_alloc_y_new (&sys, gsl_odeiv2_step_msadams,
1e-3, 1e-8, 1e-8);

Есть мысли о том, что может происходить?

Большое спасибо,

Марк С.

0

Решение

Вы можете увидеть, что это за ошибка, сравнив два типа функций, которые появляются в сообщении об ошибке.

gsl_odeiv2_system структура ожидает jacobian член быть указателем на функцию, которая принимает double* в качестве четвертого параметра. Но твой jacobian функция занимает double** в качестве четвертого параметра, что делает его несовместимым.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]