Condizioni iniziali con un'ODE non lineare in Mathematica
-
28-09-2019 - |
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
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}]