g ++를 사용하여 ODE 해석기와 관련된 예제 코드 gsl/gsl_odeiv2
을 컴파일하려고합니다. 아래의 코드는 자신의 웹 사이트에서입니다 :g ++로 GSL odeiv2 컴파일
http://www.gnu.org/software/gsl/manual/html_node/ODE-Example-programs.html
및 GCC에서 잘 컴파일하지만, g는 ++ 코드에서 오류
invalid conversion from 'void*' to 'int (*)(double, const double*, double*, double*, void*)' [-fpermissive]
를 던졌습니다 :
#include <stdio.h>
#include <gsl/gsl_errno.h>
#include <gsl/gsl_matrix.h>
#include <gsl/gsl_odeiv2.h>
int func (double t, const double y[], double f[], void *params)
{
double mu = *(double *)params;
f[0] = y[1];
f[1] = -y[0] - mu*y[1]*(y[0]*y[0] - 1);
return GSL_SUCCESS;
}
int * jac;
int main()
{
double mu = 10;
gsl_odeiv2_system sys = {func, jac, 2, &mu};
gsl_odeiv2_driver * d = gsl_odeiv2_driver_alloc_y_new (&sys, gsl_odeiv2_step_rkf45, 1e-6, 1e-6, 0.0);
int i;
double t = 0.0, t1 = 100.0;
double y[2] = { 1.0, 0.0 };
for (i = 1; i <= 100; i++)
{
double ti = i * t1/100.0;
int status = gsl_odeiv2_driver_apply (d, &t, ti, y);
if (status != GSL_SUCCESS)
{
printf ("error, return value=%d\n", status);
break;
}
printf ("%.5e %.5e %.5e\n", t, y[0], y[1]);
}
gsl_odeiv2_driver_free (d);
return 0;
}
오류 줄에 주어진다
gsl_odeiv2_system sys = {func, jac, 2, &mu};
이 문제를 해결하는 데 도움이되는 내용은 환상적입니다. 일부 stdlib 요소를 포함하여 C++로 컴파일하려고합니다. 또한 g ++ (4.7)을 사용하여 컴파일 할 수 있다면 C++ 11을 사용하여 언어에 쉽게 멀티 스레드 할 수 있습니다. 고맙습니다.
정말로 고맙습니다. 나는 아무것도하지 않은 관련 인수의 함수로 자 코비안을 선언했지만, 다음 번에는 NULL로 처리 할 것이다. – Quentin
도와 줘서 기뻤습니다 :-) –