Esperimenti d'uso della libreria Runge Kutta di Dormand e Prince

Orbita ellittica

L'asteroide sta sull'asse minore e quindi la sua velocità è la velocità media e la distanza dall'astro è il semiasse maggiore.

Oltre alla posizione ed al versore della velocità va assegnato il periodo di rivoluzione voluto da cui si ricava il prodotto di G per la massa M dell'astro.

Si possono anche assegnare i cicli voluti in modo da verificare che, anche dopo parecchi cicli, l'asteroide torna al punto di partenza e si possono indicare quante iterazioni al massimo possono essere fatte per completare ciascuno dei 360 passi del ciclo globale.
Se, in base al criterio di tolleranza prefissato, non si riesce ad ottenere la precisione voluta, compare una segnalazione di errore ed il calcolo viene interrotto ( per cui si deve o aumentare la tolleranza o aumentare il numero massimo di iterazioni fatte ad ogni passo ).

Px [m]=
Py [m]=
Pz [m]=
Vx [m/s]=
Vy [m/s]=
Vz [m/s]=
Periodo [s] =
N. periodi =
Iterazioni max. =
Tolleranza =
   

X AVVISI

!Javascript non attivato!

.?.?.?.?.

0

Qua sta il secondo gruppo di dati ( approfondimento )
Scegliere con i pulsanti qua sotto quale intervallo si vuole suddividere in altri 360 passettini
Partendo dall'istante prescelto che nel raffinamento viene indicato come 0 si va fino al 359 intervallo del raffinamento che dovrebbe coincidere con l'istante successivo a quello prescelto. Dunque si tratta di fare una verifica interna dell'algoritmo qui usato.

!Javascript non attivato!

Ecco il sistema di equazioni che viene integrato qui

In pratica si tratta di sei equazioni differenziali di cui tre banalissime ossia che la derivata della posizione è la velocitè e le altre tre meno banali ma... semplicemente la legge di Newton ossia la derivata dell'accelerazione per mla massa è la forza e, in questo caso, la massa dell'accelerazione si semplifica con la massa che moltiplicherebbe il gradiente del potenziale gravitazionale generato dallo pseudo Sole...

//
// L'asteroide si muove nelle tre dimensioni
//
function fdiff(t,v,c){
   var x,y,z,vx,vy,vz,mu,rq,rr,den,x_,y_,z_,vx_,vy_,vz_;
   x=v[1];
   y=v[2];
   z=v[3];
   vx=v[4];
   vy=v[5];
   vz=v[6];
   mu=c[1];
   x_=vx;
   y_=vy;
   z_=vz;
   rq=x*x+y*y+z*z;
   rr=Math.sqrt(rq);
   den=1/(rr*rq);
   vx_=-mu*x*den;
   vy_=-mu*y*den;
   vz_=-mu*z*den;
   return [0,x_,y_,z_,vx_,vy_,vz_];
   };

Ovviamente questo è solo un calcolo di verifica della corretta programmazione del solutore del sistema di equazioni differenziali alle derivate rispetto al tempo.

Qualche libro sull'argomento