Buonasera, devo realizzare un programma in C che integri posizione e velocità di un oscillatore armonico con il metodo di Runge Kutta del quarto ordine. Io ho provato cosi con questa funzione:
double RungeKuttaFourth (double y, double dt, double dy) {
double y1, y2, y3, y4;
y1 = dy*dt;
y2 = (y + y1/2)*dt;
y3 = (y + y2/2)*dt;
y4 = (y + y3)*dt;
return y + 1.0/6.0*(y1 + 2*y2 + 2*y3 + y4);
}
Successivamente nel main ho:
printf("\nHai scelto il metodo d'integrazione Runge-Kutta del quarto ordine");
for (i = 0; i <= N; i++) {
fprintf(f,"%lf %lf %lf\n", t, xANDv.x, xANDv.v);
xANDv.x = RungeKuttaFourth(xANDv.x,dt,xANDv.v);
xANDv.v = RungeKuttaFourth(xANDv.v,dt,-k/m*xANDv.x);
t+=dt;
}
A me sembra giusto questo codice ma ottengo risultati completamente sballati, per esempio per la posizone:
Qualcuno sa dirmi come mai?