Как я могу решить эту систему из 5 уравнений, используя ODE45 (включая алгебраические уравнения)? - PullRequest
0 голосов
/ 09 февраля 2019

Я опытный Matlab программист, но я не знаю, как решить эту (на первый взгляд) простую проблему.У меня есть система из 5 уравнений и 5 неизвестных:

system

Я знаю, как решать ОДУ, используя ode45, когда алгебраические уравнения не задействованы.В приведенной выше системе V (скорость) и C (ускорение) являются постоянными и известными. C - поперечное ускорение космического корабля.

Эта проблема должна быть решена следующим образом:

  1. При t = 0 мы знаем Theta (0), x (0) и y (0).Помните, что V и C являются постоянными и известными.
  2. Учитывая Тета (0) и C / V, мы получаем Тета (t1), интегрирующую 4-е уравнение.С этим новым значением Theta мы сможем вычислить новые Vx (t1) и Vy (t1), что даст нам новые значения для x (t1) и y (t2).
  3. Повтор

Важно решить проблему, используя ODE45 от Matlab, потому что это в конечном итоге будет довольно трудно решить, когда я добавлю ветер, изменяющуюся плотность и плотность, массу и геометрию космического корабля (и инерции и так далее!).Итак, я получу систему из десятков уравнений, которые все будут связаны.Если я узнаю, как решить эту простую проблему в Matlab, я пойму, как решить более сложные проблемы в будущем.

Я копался в Интернете, чтобы найти какую-то помощь, но это было внапрасно.Ваша помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

С исправленной системой у вас есть только 3 переменные состояния для интеграции

function dotu = f(t,u)
    theta = y(1); 
    dotu = [ C/V, -V*cos(theta), V*sin(theta) ];
end

, и вы можете затем напрямую вставить их в решатель

[ T,U ] = ode45(f, [t0, tf], [ theta0, x0, y0])

, используя соответствующие значения для начальнойусловие и конец интеграции.

0 голосов
/ 09 февраля 2019

Мне кажется, что ваша система недостаточно детерминирована в том смысле, что y_1 не ограничен вашими уравнениями, кроме как должен быть положительным.Что касается остальной части системы, она на самом деле разъединяет.Вот как бы я это сделал:

1) Первое уравнение подразумевает, что y_1 положительно.Имея это в виду, если вы замените y_2 и y_3 в первом уравнении, вы получите тождество y_1 = y_1.Так что эта точка y_1 может быть любой функцией времени, подчиняясь только тому ограничению, что при t = 0 она удовлетворяет начальному условию.В дальнейшем я буду считать его постоянным во времени.

2) С этим условием C / y_1 - произвольная постоянная, назовем ее B, из чего следует, что y_4 = Bt + y0_4, y0_4 - постоянная интегрирования.

3) Подставьте y_2 в 5-е уравнение и y_3 в 6-е.Теперь у вас есть два ОДУ с зависимой от времени правой частью. Уравнения достаточно просты, чтобы их можно было решить аналитически.Например, последнее уравнение дает y_6 = -y_1 / B cos (Bt + y0_4) + y0_6.

В общем, предположим, что у вас была проблема, которая не была ограничена.Тогда вы всегда можете вовремя дифференцировать алгебраические уравнения и получить связанную систему ОДУ.

В качестве последнего комментария я бы сказал, что перед тем, как спешить к Matlab (или Python, или R, или C ++, ...), всегда полезно поработать над проблемой с бумагой и карандашом, чтобыпосмотрите, можно ли это упростить или, как в случае выше, это можно решить.

...