Domanda

Sto cercando di utilizzare NDSolve[] di Mathematica per calcolare una geodetica lungo una sfera utilizzando l'ODE accoppiato:

x" - (x" . x) x = 0

Il problema è che posso inserire solo le condizioni iniziali per x(0) e x'(0) e il risolutore è soddisfatto della soluzione dove x" = 0.Il problema è che la mia geodetica sulla sfera ha la condizione iniziale che x"(0) = -x(0), cosa che non ho idea di come spiegare alla matematica.Se lo aggiungo come condizione, dice che sto aggiungendo True all'elenco delle condizioni.

Ecco il mio codice:

s1 = NDSolve[{x1''[t] - (x1[t] * x1''[t] + x2[t] * x2''[t] + x3[t]*x3''[t]) * x1[t] == 0, x2''[t] -  (x1[t] * x1''[t] + x2[t] * x2''[t] + x3[t]*x3''[t]) * x2[t] == 0, x3''[t] - (x1[t] * x1''[t] + x2[t] * x2''[t] + x3[t]*x3''[t]) * x3[t] == 0, x1[0] == 1, x2[0] == 0, x3[0] == 0, x1'[0] == 0, x2'[0] == 0, x3'[0] == 1} , { x1, x2, x3}, {t, -1, 1}][[1]]

Vorrei modificarlo in modo che l'accelerazione iniziale non sia zero ma -x(0).

Grazie

È stato utile?

Soluzione 2

ho risolto questo problema attraverso un riarrangiamento matematica piuttosto che affrontare il mio problema originale:

Sia V (t) un campo vettoriale lungo x (t).

x. V = 0 implica d / dt (x. V) = (x 'V) + (x. V') = 0

Quindi l'equazione D / dt V = V - '(. V '(. X V') x = V x) +' x stive Questo significa l'equazione geodetica diventa:. X" + ( 'x' x) x = 0 e quindi può essere risolto utilizzando le condizioni iniziali Inizialmente avevo

Grazie mille Janus per passare attraverso e sottolineando i vari problemi che ho avuto tra cui il layout codice orribile, ho imparato molto attraverso il vostro ri-scrittura pure.

Altri suggerimenti

Ebbene, come dice il messaggio di errore, NDSolve accetta solo condizioni iniziali per derivati ​​di ordini strettamente inferiori all'ordine massimo che appare nell'ODE.
Ho la sensazione che questa sia più una questione di matematica.Matematicamente, {x''[0]=-x0, x[0]==x0}, non definisce una soluzione unica: dovresti fare qualcosa sulla falsariga di {x0.x''[0]==-1, x[0]==x0, x'[0]-x0 x0.x'[0]==v0} affinché funzioni (NDSolve fallirebbe comunque con lo stesso errore).Ti rendi conto che otterrai semplicemente un cerchio massimo sulla sfera unitaria, vero?

A proposito, ecco come avrei codificato il tuo esempio:

x[t_] = Table[Subscript[x, j][t], {j, 3}];
s1 = NDSolve[Flatten[Thread /@ #] &@{
       x''[t] - (x''[t].x[t]) x[t] == {0, 0, 0},
       x[0] == {1, 0, 0}, 
       x'[0] == {0, 0, 1}
     }, x[t], {t, -1, 1}]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top