Начальные условия с нелинейным одом в Mathematica

StackOverflow https://stackoverflow.com/questions/3061981

  •  28-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать NDSVELT [] NDSVEL Mathematica [], чтобы вычислить геодезию вдоль сферы, используя связанную оду:

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

Проблема в том, что я могу ввести только начальные условия для x (0) и x '(0), и решатель доволен решением, где x "= 0. Проблема в том, что мой геодезический на сфере имеет начальное состояние, которое X (0) = -x (0), который я понятия не имею, как сказать Mathematica. Если я добавлю это как условие, он говорит, что я добавляю true в список условий.

Вот мой код:

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

Я хотел бы изменить это, чтобы исходное ускорение не ноль, но -x(0).

Спасибо

Это было полезно?

Решение 2

Я исправил эту проблему с помощью математической перестройки, а не обращаясь к моей оригинальной проблеме:

Пусть v (t) - векторное поле вдоль x (t).

Икс . V = 0 подразумевает d / dt (x. V) = (x '. V) + (x. V') = 0

Таким образом, уравнение d / dt v = v '- (x. V') x = v '+ (x'. V) x Удерживает это означает, что геодезическое уравнение становится: x "+ (x '. X') x = 0 И поэтому его можно решить, используя первоначальные условия, которые я первоначально имел.

Спасибо большое Янус за прохождение и указывая на различные проблемы, которые я имел в том числе ужасную макет кода, я многому научился через ваше повторное письмо.

Другие советы

Ну, поскольку сообщение об ошибке гласит, - NDSLOVE принимает только начальные условия для производных заказов, строго меньше, чем максимальный заказ, появляющийся в ODE.
У меня есть ощущение, что это больше математического вопроса. Математически, {x''[0]=-x0, x[0]==x0}, не определяет уникальное решение - вам придется что-то сделать по линии {x0.x''[0]==-1, x[0]==x0, x'[0]-x0 x0.x'[0]==v0} Для этого для работы (NDSLIVE все равно будет терпеть неудачу с той же ошибкой). Вы понимаете, что вы просто получите отличный круг на единице сферы, верно?

Кстати, вот как я бы закодировал ваш пример:

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}]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top