Решите систему дифференциальных уравнений со встроенными недифференциальными уравнениями, используя Octave / Matlab (см. Рисунок) - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть следующая система уравнений (нажмите, чтобы увидеть рисунок) , и я хотел бы решить для X (t), Y (t), Z (t), возможно, используя Octave / Matlab, который Я знаком с, но я не возражаю против решения его любым другим необходимым способом.

Теперь Fsolve полезен для систем регулярных уравнений, а Ode45, Lsode полезны для дифференциальных уравнений. Но как насчет этой конкретной системы? Обратите внимание, что дифференциальное уравнение внизу содержит не только Y, но также и X и Z, и они зависят от двух недифференциальных уравнений выше.

Если честно, я не совсем уверен, как подойти к основному c коду для решения этой системы, и, потратив некоторое время на размышления, я решил обратиться за помощью. Я действительно ценю любые рекомендации, чтобы решить эту проблему несколько эффективнее, если это возможно. Почти любой ответ был бы полезен мне прямо сейчас.

1 Ответ

0 голосов
/ 15 февраля 2020

Если вы знаете y, вы можете решить для x, и это даже безоговорочно как второе уравнение в монотонном в x

x = fsolve(@(x) y^2-1413.7*x-1095.2*cos(x)+2169, 0)

Затем, когда вы знаете x, вы может решить для z, используя известный обратный косинус

z = acos(0.20978-cos(x))

Это может фактически не дать результата, если cos(x) приближается к -1. Можно искусственно вырезать эту ошибку, введя, возможно, неправильное решение

z = acos(min(1,0.20978-cos(x)))

Для простоты соберите эти операции в вспомогательную функцию

function [x,z] = solve_xz(y)
    x = fsolve(@(x) y^2-1413.7*x-1095.2*cos(x)+2169, 0);
    z = acos(min(1,0.20978-cos(x)));
end

Теперь используйте это, чтобы получить ODE для y

function dy = ode_y(t,y)
    [x,z] = solve_xz(y(1));
    dy = [ y(2); y(3); 6666.6667*(z-x)-333.3333*y(1)-33.3333*y(2)-5*y(3) ];
end

и примените решатель ODE по вашему выбору. Вполне вероятно, что система жесткая, поэтому ode45 может быть не лучшим решением.

...