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...
...