Обыкновенное дифференциальное уравнение (ОДУ) содержит одну или более производных зависимой переменной, y, относительно единственной независимой переменной, t, обычно называемой временем. Обозначение, используемое здесь для представления производных y относительно t, является 'для первой производной, для второй производной и так далее. Порядок ОДУ равен производной y высшего порядка, которая появляется в уравнении.
Например, это ОДУ второго порядка:
9y
В задаче начального значения ОДУ решают, начиная с начального состояния. Используя исходное условие , а также период времени, в течение которого должен быть получен ответ (t0, ), решение получается итеративно. На каждом шаге решатель применяет определенный алгоритм к результатам предыдущих шагов. На первом таком этапе начальное условие предоставляет необходимую информацию, которая позволяет продолжить интеграцию. В результате решатель ОДУ возвращает вектор временных шагов ., tf], а также соответствующее решение на каждом y2,..., yf].
Решатели ОДУ в MATLAB ® решают следующие типы ОДУ первого порядка:
Явные ОДУ вида , y).
Линейно неявные ОДУ формы (t, y), M (t, y) - неингулярная массовая матрица. Массовая матрица может зависеть от времени или состояния или может быть постоянной матрицей. Линейно неявные ОДУ включают линейные комбинации первой производной y, которые кодируются в массовой матрице.
Линейно неявные ОДУ всегда могут быть преобразованы в явную форму, f (t, y). Однако указание матрицы массы непосредственно решателю ОДУ позволяет избежать этого преобразования, которое неудобно и может быть дорогостоящим в вычислительном отношении.
Если некоторые компоненты 'отсутствуют, то уравнения называются дифференциальными алгебраическими уравнениями, или DAE, а система DAE содержит некоторые алгебраические переменные. Алгебраические переменные - это зависимые переменные, производные которых не появляются в уравнениях. Система дисковых полок может быть переписана как эквивалентная система ОДУ первого порядка путём взятия производных уравнений для исключения алгебраических переменных. Количество производных, необходимых для перезаписи дисковой полки в качестве ОДУ, называется дифференциальным индексом. ode15s и ode23t решатели могут решать дисковые полки с индексом 1.
Полностью неявные ОДУ вида ') = 0. Полностью неявные ОДУ не могут быть переписаны в явной форме, а также могут содержать некоторые алгебраические переменные. ode15i решатель предназначен для полностью неявных проблем, включая дисковые полки с индексом 1.
Дополнительную информацию о некоторых типах проблем можно предоставить решателю с помощью odeset для создания структуры опций.
Можно задать любое количество связанных уравнений ОДУ для решения, и в принципе число уравнений ограничено только доступной компьютерной памятью. Если система уравнений имеет n уравнений,
y1, y2,..., yn)),
затем функция, которая кодирует уравнения, возвращает вектор с n элементами, соответствующими значениям для y 'n. Например, рассмотрим систему двух уравнений
y2 − 2.
Функция, которая кодирует эти уравнения
function dy = myODE(t,y)
dy(1) = y(2);
dy(2) = y(1)*y(2)-2;Решатели ODE MATLAB решают только уравнения первого порядка. Необходимо переписать ODE более высокого порядка как эквивалентную систему уравнений первого порядка с использованием общих замен.
).
Результатом этих замен является система n уравнений первого порядка
).
Например, рассмотрим ОДУ третьего порядка
= 0.
Использование замен
= y "
результаты в эквивалентной системе первого порядка
y1 y3 − 1.
Код для этой системы уравнений
function dydt = f(t,y)
dydt(1) = y(2);
dydt(2) = y(3);
dydt(3) = y(1)*y(3)-1;Рассмотрим комплексное уравнение ОДУ
y),
где iy2. Чтобы решить его, разделите действительную и мнимую части на различные компоненты решения, а затем рекомбинируйте результаты в конце. Концептуально это выглядит как
y))].
Например, если значение ODE равно + 2i, то уравнение можно представить с помощью файла функции.
function f = complexf(t,y) % Define function that takes and returns complex values f = y.*t + 2*i;
Затем код для разделения действительной и мнимой частей
function fv = imaginaryODE(t,yv) % Construct y from the real and imaginary components y = yv(1) + i*yv(2); % Evaluate the function yp = complexf(t,y); % Return real and imaginary in separate components fv = [real(yp); imag(yp)];
При запуске решателя для получения решения начальное условие y0 также разделена на действительную и мнимую части для обеспечения начального условия для каждого компонента решения.
y0 = 1+i; yv0 = [real(y0); imag(y0)]; tspan = [0 2]; [t,yv] = ode45(@imaginaryODE, tspan, yv0);
Как только вы получите решение, объедините вещественные и мнимые компоненты вместе, чтобы получить конечный результат.
y = yv(:,1) + i*yv(:,2);
ode45 хорошо работает с большинством проблем ОДУ и, как правило, должен быть первым выбором решателя. Однако ode23 и ode113 может быть более эффективным, чем ode45 для проблем с меньшими или более жесткими требованиями к точности.
Некоторые проблемы ОДУ проявляют жесткость или затрудняют оценку. Жесткость - это термин, который бросает вызов точному определению, но в целом жесткость возникает, когда существует разница в масштабировании где-то в проблеме. Например, если ОДУ имеет два компонента решения, которые изменяются в резко различных временных масштабах, то уравнение может быть жестким. Можно определить проблему как жесткую, если решатели nonstiff (например, ode45) не могут решить проблему или работают крайне медленно. Если вы видите, что некомпетентный решатель работает очень медленно, попробуйте использовать жесткий решатель, такой как ode15s вместо этого. При использовании жесткого решателя можно повысить надежность и эффективность, предоставив матрицу Якобиана или ее узор разреженности.
В этой таблице приведены общие рекомендации по использованию каждого из различных решателей.
| Решающее устройство | Тип проблемы | Точность | Когда использовать |
|---|---|---|---|
ode45 | Нежесткий | Среда | Большую часть времени. |
ode23 | Низко |
| |
ode113 | От низкого до высокого |
| |
ode15s | Жесткий | От низкого до среднего | Попробуй |
ode23s | Низко |
Если существует массовая матрица, она должна быть постоянной. | |
ode23t | Низко | Использовать
| |
ode23tb | Низко | Как | |
ode15i | Полностью неявный | Низко | Использовать |
Для получения дополнительной информации и рекомендаций относительно использования каждого решателя см. [5].
Существует несколько примеров файлов, которые служат отличными отправными точками для большинства проблем с ОДУ. Чтобы запустить приложение «Примеры дифференциальных уравнений», которое позволяет легко просматривать и запускать примеры, введите
odeexamples
Чтобы открыть отдельный файл примера для редактирования, введите
edit exampleFileName.mДля запуска примера введите
exampleFileName
В этой таблице содержится список доступных файлов примеров ODE и дисковых полок, а также используемых ими решателей и опций. Ссылки включены для подмножества примеров, которые также публикуются непосредственно в документации.
| Пример файла | Используемый решатель | Параметры указаны | Описание | Ссылка на документацию |
|---|---|---|---|---|
amp1dae | ode23t |
| Жесткая полка - электрическая цепь с постоянной, сингулярной массовой матрицей | Решите жесткое дифференциальное алгебраическое уравнение транзистора |
ballode | ode23 |
| Простое расположение события - подпрыгивающий мяч | Местоположение события ОДУ |
batonode | ode45 |
| ОДУ с зависящей от времени и состояния массовой матрицей - движение дубинки | Решить уравнения движения для дубинки, выброшенной в воздух |
brussode | ode15s |
| Жесткая большая проблема - диффузия в химической реакции (Брусселатор) | Решение жестких ОДУ |
burgersode | ode15s |
| ОДУ с сильно зависимой от состояния массовой матрицей - уравнение Бургера, решенное с помощью метода движущейся сетки | Решение ОДУ с помощью сильно зависящей от состояния матрицы масс |
fem1ode | ode15s |
| Жесткая проблема с зависящей от времени массовой матрицей - метод конечных элементов | — |
fem2ode | ode23s |
| Жесткая задача с матрицей постоянной массы - метод конечных элементов | — |
hb1ode | ode15s | — | Жесткая проблема ОДУ решена на очень длинном интервале - химическая реакция Робертсона | — |
hb1dae | ode15s |
| Жесткая, линейно неявная DAE из закона о сохранении - химическая реакция Робертсона | Решение задачи Робертсона как полуявных дифференциальных алгебраических уравнений (DAE) |
ihb1dae | ode15i |
| Жесткая, полностью неявная химическая реакция DAE - Робертсона | Решение задачи Робертсона как неявных дифференциальных алгебраических уравнений (DAE) |
iburgersode | ode15i |
| Неявная система ОДУ - уравнение Бургеров | — |
kneeode | ode15s |
| «Проблема колена» с ограничениями неотрицательности | Неотрицательное решение ОДУ |
orbitode | ode45 |
| Расширенное расположение события - ограниченная проблема с тремя телами | Местоположение события ОДУ |
rigidode | ode45 | — | Задача Nonstiff - уравнения Эйлера жёсткого тела без внешних сил | Решить некомпетентные ОДУ |
vdpode | ode15s |
| Параметризуемое уравнение ван дер Пола (жесткое для больших λ) | Решение жестких ОДУ |
[1] Шампин, Л. Ф. и М. К. Гордон, Компьютерное решение обычных дифференциальных уравнений: задача начального значения, В. Х. Фриман, Сан-Франциско, 1975.
[2] Форсайт, Г., М. Малкольм и К. Молер, компьютерные методы математических вычислений, Прентис-Холл, Нью-Джерси, 1977.
[3] Kahaner, D., C. Moler и S. Nash, Numerical Methods and Software, Prentice-Hall, New Jersey, 1989.
[4] Шампин, Л. Ф., Численное решение обыкновенных дифференциальных уравнений, Чепмен и Холл, Нью-Йорк, 1994.
[5] Шампин, Л. Ф. и М. У. Райхельт, «The MATLAB ODE Suite», SIAM Journal on Scientific Computing, Vol. 18, 1997, pp. 1-22.
[6] Shampine, L.F., Gladwell, I. and S. Thompson, Solving ODE with MATLAB, Cambridge University Press, Cambridge UK, 2003.