Как использовать ODE45 для решения системы дифференциальных уравнений со сложным конечным условием?

#matlab #solver #ode45

#matlab #решатель #ode45

Вопрос:

Моя система уравнений может быть записана как-

y1′ = F_1(x, y1, y2)

y2′ = F_2(x, y1, y2)

где F1 и F2 — некоторые функции от x, y1, y2. y1 и y2 — функции от x и y1’= dy1_dx и y2’= dy2_dx.

Начальное условие равно x = 0, y1 = y2 = 0. Однако мне нужно решение при y1 = 1, т.Е. Как только будет достигнуто y1 = 1, итерация должна быть остановлена. Я хочу решить это с помощью правильного решателя, такого как ODE45 или ODE15s в MATLAB. Однако я не уверен, как установить x_span, т.Е. Начальное и конечное значения x. Пожалуйста, направьте меня.

Обратите внимание, что установка x на большое значение, скажем, 1000, не поможет, потому что я не знаю, где y1 = 1.

Комментарии:

1. этот вопрос кажется немного странным, поскольку система уравнений не определена. У вас есть два дифференциальных уравнения, но три переменные. Или y1 и y2 являются функциями x, а предоставленная вами система уравнений является результатом изменения переменных для уменьшения порядка дифференциального уравнения?

2. Извините, забыл упомянуть, что y1 и y2 действительно являются функциями x и y1’= dy1_dx и y2’= dy2_dx . Я обновляю вопрос.

3. не могли бы вы предоставить дифференциальное уравнение, которое вы пытаетесь решить? это может быть полезно для разработки ответа на вопрос.

4. @Thales Функции F1 и F2 указывают функции. Я не могу написать уравнения, потому что они почти по 35 строк каждое, но вы можете добавить их за функциями F1 и F2.

Ответ №1:

Используйте функцию события (обычно равную y1-1), которую вы предоставляете решателю ODE: https://fr.mathworks.com/help/matlab/math/ode-event-location.html

Как только решатель обнаруживает изменение знака вашей функции события, он останавливается.