Обыкновенное дифференциальное уравнение (ODE) содержит одну или несколько производных зависимой переменной, y, относительно одной независимой переменной, t, обычно называемого временем. Обозначение, используемое здесь для представления производных y относительно t, для первой производной, для второй производной, и так далее. Порядок ОДУ равен производной самого высокого порядка y, который появляется в уравнении.
Например, это ОДУ второго порядка:
В задаче с начальными значениями ОДУ решен путем запуска с начального состояния. Используя начальное условие, , а также промежуток времени, за который ответ должен быть получен, , решение получено итеративно. На каждом шаге решатель применяет конкретный алгоритм к результатам предыдущих шагов. На первом этапе начальное условие предоставляет необходимую информацию, которая позволяет продолжить интегрирование. Конечный результат состоит в том, что решатель ОДУ возвращает вектор времени а также соответствующее решение на каждом шаге .
Решатели ОДУ в MATLAB® решают эти типы ОДУ первого порядка:
Явные ОДУ формы .
Линейные неявные ОДУ формы , где несингулярная большая матрица. Большая матрица может быть время - или зависимый состояния, или это может быть постоянная матрица. Линейные неявные ОДУ включают линейные комбинации первой производной y, которые закодированы в большой матрице.
Линейные неявные ОДУ могут всегда преобразовываться к явной форме, . Однако определение большой матрицы непосредственно к решателю ОДУ избегает этого преобразования, которое является неудобным и может быть в вычислительном отношении дорогим.
Если некоторые компоненты отсутствуют, затем уравнения называются дифференциальными алгебраическими уравнениями или ДАУ, и система ДАУ содержит некоторые алгебраические переменные. Алгебраические переменные являются зависимыми переменными, производные которых не появляются в уравнениях. Система ДАУ может быть переписана как эквивалентная система ОДУ первого порядка путем взятия производных уравнений, чтобы устранить алгебраические переменные. Количество производных должно было переписать ДАУ, как ОДУ называется дифференциальным индексом. ode15s
и решатели ode23t
могут решить индексные 1 ДАУ.
Полностью неявные ОДУ формы . Полностью неявные ОДУ не могут быть переписаны в явной форме и могут также содержать некоторые алгебраические переменные. Решатель ode15i
разработан для полностью неявных проблем, включая индексные 1 ДАУ.
Можно предоставить дополнительную информацию к решателю для некоторых типов проблем при помощи функции odeset
, чтобы создать структуру опций.
Можно задать любое количество двойных уравнений ОДУ, чтобы решить, и в принципе количество уравнений только ограничивается доступной памятью компьютера. Если система уравнений имеет уравнения n,
затем функция, которая кодирует уравнения, возвращает вектор с элементами n, соответствуя значениям для . Например, рассмотрите систему двух уравнений
Функция, которая кодирует эти уравнения,
function dy = myODE(t,y)
dy(1) = y(2);
dy(2) = y(1)*y(2)-2;
Решатели ОДУ MATLAB только решают уравнения первого порядка. Необходимо переписать ОДУ высшего порядка как эквивалентную систему уравнений первого порядка с помощью типичных замен
Результатом этих замен является система уравнений первого порядка n
Например, рассмотрите ОДУ третьего порядка
Используя замены
результаты в эквивалентной системе первого порядка
Код для этой системы уравнений затем
function dydt = f(t,y)
dydt(1) = y(2);
dydt(2) = y(3);
dydt(3) = y(1)*y(3)-1;
Рассмотрите комплексное уравнение ОДУ
где . Чтобы решить его, разделите действительные и мнимые части на различные компоненты решения, затем повторно объедините результаты в конце. Концептуально, это похоже
Например, если ОДУ , затем можно представлять уравнение с помощью файла функции.
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
для проблем с более свободными или более высокими требованиями точности.
Некоторые проблемы ОДУ показывают жесткость или трудность при оценке. Жесткость является термином, который игнорирует точное определение, но в целом, жесткость происходит, когда существует различие в масштабировании где-нибудь в проблеме. Например, если ОДУ имеет два компонента решения, которые отличаются на решительно различных масштабах времени, затем уравнение может быть жестким. Можно идентифицировать проблему, столь же жесткую, если нежесткие решатели (такие как ode45
) не могут решить проблему или являются чрезвычайно медленными. Если вы замечаете, что нежесткий решатель является очень медленным, попытайтесь использовать жесткий решатель, такой как ode15s
вместо этого. При использовании жесткого решателя можно улучшить надежность и эффективность путем предоставления якобиевской матрицы или ее шаблона разреженности.
Эта таблица предоставляет общие руководящие принципы на том, когда использовать каждый из других решателей.
Решатель | Проблемный тип | Точность | Когда использовать |
---|---|---|---|
ode45 | Нежесткий | Носитель | Наиболее часто. |
ode23 | Низко |
| |
ode113 | Низко к высоко |
| |
ode15s | Жесткий | От низкой к высокой | Попробуйте |
ode23s | Низко |
Если существует большая матрица, это должно быть постоянно. | |
ode23t | Низко | Используйте
| |
ode23tb | Низко | Как | |
ode15i | Полностью неявный | Низко | Используйте |
Для получения дополнительной информации и дальнейшие рекомендации о том, когда использовать каждый решатель, см. [5].
Существует несколько файлов в качестве примера, доступных, которые служат превосходными отправными точками для большинства проблем ОДУ. Запускать приложение Дифференциальных уравнений В качестве примера, которое позволяет вам легко исследовать и запустить примеры, тип
odeexamples
Чтобы открыть отдельный файл в качестве примера для редактирования, ввести
edit exampleFileName.m
Чтобы запустить пример, ввести
exampleFileName
Эта таблица содержит список доступного ОДУ и файлов ДАУ в качестве примера, а также решателей и опций, которые они используют. Ссылки включены для подмножества примеров, которые также публикуются непосредственно в документации.
Файл в качестве примера | Используемый решатель | Заданные опции | Описание | Ссылка на документацию |
---|---|---|---|---|
amp1dae | ode23t |
| Жесткое ДАУ — электрическая схема с постоянной, сингулярной большой матрицей | Решение жесткого дифференциального алгебраического уравнения |
ballode | ode23 |
| Простое местоположение события — прыгающий мяч | Местоположение события ОДУ |
batonode | ode45 |
| ОДУ со временем - и большой матрицей состояния зависимой — движение маркера | — |
brussode | ode15s |
| Жесткая большая проблема — диффузия в химической реакции (Brusselator) | Решение жестких ОДУ |
burgersode | ode15s |
| ОДУ с большой матрицей строго состояния зависимой — уравнение Бургеров решило использование движущегося метода mesh | — |
fem1ode | ode15s |
| Жесткая проблема с зависящей от времени большой матрицей — метод конечных элементов | — |
fem2ode | ode23s |
| Жесткая проблема с постоянной большой матрицей — метод конечных элементов | — |
hb1ode | ode15s | — | Жесткая проблема ОДУ, решенная на очень длинном интервале — химическая реакция Робертсона | — |
hb1dae | ode15s |
| Жесткое, линейно неявное ДАУ от закона сохранения — химическая реакция Робертсона | Решение задачи Робертсона как полуявные дифференциальные алгебраические уравнения (ДАУ) |
ihb1dae | ode15i |
| Жесткое, полностью неявное ДАУ — химическая реакция Робертсона | Решение задачи Робертсона как неявные дифференциальные алгебраические уравнения (ДАУ) |
iburgersode | ode15i |
| Неявная система ОДУ — уравнение Бургеров | — |
kneeode | ode15s |
| “Проблема колена” с ограничениями неотрицательности | Неотрицательное решение для ОДУ |
orbitode | ode45 |
| Усовершенствованное местоположение события — ограниченная задача трех тел | Местоположение события ОДУ |
rigidode | ode45 | — | Нежесткая проблема — Эйлеровы уравнения твердого тела без внешних сил | Решение нестандартных ОДУ |
vdpode | ode15s |
| Уравнение Ван дер Поля Parameterizable (жесткий для большого μ) | Решение жестких ОДУ |
[1] Шемпин, L. F. и М. К. Гордон, компьютерное решение Обыкновенных дифференциальных уравнений: задача с начальными значениями, В. Х. Фримен, Сан-Франциско, 1975.
[2] Форсайт, G., М. Малкольм, и К. Молер, компьютерные методы для математических вычислений, Prentice Hall, Нью-Джерси, 1977.
[3] Kahaner, D., К. Молер, и С. Нэш, численные методы и программное обеспечение, Prentice Hall, Нью-Джерси, 1989.
[4] Шемпин, L. F. числовое решение Ordinary Differential Equations, Chapman & Hall, Нью-Йорк, 1994.
[5] Шемпин, L. F. и М. В. Рейчелт, “Пакет ODE MATLAB”, SIAM Journal на Научных вычислениях, Издании 18, 1997, стр 1–22.
[6] Шемпин, L. F. Глэдуэлл, я. и С. Томпсон, решая ОДУ с MATLAB, издательством Кембриджского университета, Кембриджем Великобритания, 2003.