Runge Kutta di J.R.Cash, A.H.Karp codificato in Javascript

Una delle migliori e più moderne (si fa per dire) versioni di algoritmo di Runge Kutta con possibilità di controllo della precisione e dunque con possibilità di variazione automatica del passo di integrazione nella soluzione di un sistema di equazioni alle derivate ordinarie ( ODE ), è quello di Cash e Karp.
Qui ne propongo una versione a coefficienti interi ( il che elimina qualsiasi possibilità di errore di troncamento nella specifica dell'algoritmo stesso ).
Il linguaggio di programmazione è Javascript ma è facile trasformare il sorgente in C o in Fortran.



Vedere: ck.htm e la versione con la libreria esterna.

Tradotto in Javascript ottengo:

...

Si è fatto in modo da usare interi rappresentabili con 32 bit ma in pratica, per risparmiare moltiplicazioni, viene usata questa funzione:

...

Test elementare

Provo questo sistema:
y``+ π2·y = 0
che si splitta nel seguente sistema doppio :
v`= −π2·y
y`= v
ovvero
   y[1]` = y[2];
   y[2]` = -Math.PI*Math.PI*y[1];
   y[3]` = 1;
Con la condizione iniziale y[1]=1; y[2]=y[3]=0. Dato che il periodo vale 2 il passo di integrazione sia di 1/20 in modo che ogni 40 passi si debba riottenere la condizione iniziale.
Il valore di h deve essere dunque 1/(20*979292160.0).

Risultati...

...