Pergunta

Estou tentando usar o nddsolve da Mathematica [] para calcular um geodésico ao longo de uma esfera usando o ODE acoplado:

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

O problema é que eu só posso inserir as condições iniciais para x (0) e x '(0) e o solucionador está feliz com a solução em que x "= 0. O problema é que meu geodésico na esfera tem a condição inicial de que x "(0) = -x (0), que não tenho idéia de como dizer a Mathematica. Se eu adicionar isso como condição, ele diz que estou adicionando fiel à lista de condições.

Aqui está o meu código:

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

Eu gostaria de modificar isso para que a aceleração inicial não seja zero, mas -x(0).

Obrigado

Foi útil?

Solução 2

Corrigi esse problema através de um rearranjo matemático, em vez de abordar meu problema original:

Seja v (t) um campo vetorial ao longo de x (t).

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

Portanto, a equação d/dt v = v ' - (x. V') x = v ' + (x'. V) x mantém isso significa que a equação geodésica se torna: x " + (x '. X') x = 0 E assim pode ser resolvido usando as condições iniciais que tive originalmente.

Muito obrigado Janus por passar e apontar os vários problemas que eu estava tendo, incluindo o horrível layout de código, aprendi muito com sua reescrita também.

Outras dicas

Bem, como diz a mensagem de erro - o NDSOLVE aceita apenas condições iniciais para derivados de ordens estritamente menos do que a ordem máxima que aparece na ODE.
Tenho a sensação de que isso é mais uma questão de matemática. Matematicamente, {x''[0]=-x0, x[0]==x0}, não define uma solução única - você teria que fazer algo como {x0.x''[0]==-1, x[0]==x0, x'[0]-x0 x0.x'[0]==v0} Para que isso funcione (o NDSOLVE ainda falharia com o mesmo erro). Você percebe que terá um ótimo círculo na esfera da unidade, certo?

A propósito, aqui está como eu teria codificado seu exemplo:

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}]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top