Обыкновенное дифференциальное уравнение (ОДУ) содержит одну или несколько производных зависимой переменной, 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 ODE решают только уравнения первого порядка. Необходимо переписать ОДУ более высокого порядка как эквивалентную систему уравнений первого порядка с помощью обобщенных замен
Результатом этих замен является система 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].
Существует несколько доступных примерных файлов, которые служат отличными начальными точками для большинства задач ОДУ. Чтобы запустить приложение Дифференциальные Уравнения Examples, которое позволяет легко исследовать и запускать примеры, введите
odeexamples
Чтобы открыть отдельный файл примера для редактирования, введите
edit exampleFileName.m
Чтобы запустить пример, введите
exampleFileName
Эта таблица содержит список доступных файлов примеров ОДУ и ДАУ, а также используемых ими решателей и опций. Ссылки включены для подмножества примеров, которые также публикуются непосредственно в документации.
Пример файла | Используемый решатель | Заданные опции | Описание | Ссылка на документацию |
---|---|---|---|---|
amp1dae | ode23t |
| Жесткая ДАУ - электрическая схема с постоянными, сингулярными большими матрицами | Решение жесткого дифференциального алгебраического уравнения транзистора |
ballode | ode23 |
| Простое место события - прыгающий мяч | Место проведения мероприятия ОДУ |
batonode | ode45 |
| ОДУ с зависящей от времени и состояния большой матрицей - движение дубинки | Решите уравнения движения для Батона, брошенного в воздух |
brussode | ode15s |
| Жесткая большая задача - диффузия в химической реакции (Брюсселатор) | Решение жестких ОДУ |
burgersode | ode15s |
| ОДУ с сильно зависящей от состояния большой матрицей - уравнение Бургерса, решенное с помощью метода движущейся сетки | Решение ОДУ с сильно зависящими от состояния Большими матрицами |
fem1ode | ode15s |
| Жесткая задача с зависящей от времени большой матрицей - метод конечного элемента | — |
fem2ode | ode23s |
| Жесткая задача с постоянным методом большой матрицы - конечного элемента | — |
hb1ode | ode15s | — | Жесткая задача ОДУ, решенная на очень длительном интервале - химическая реакция Робертсона | — |
hb1dae | ode15s |
| Жесткая, линейно неявная ДАУ из закона сохранения - химическая реакция Робертсона | Решите задачу Робертсона как полу-явные дифференциальные алгебраические уравнения (ДАУ) |
ihb1dae | ode15i |
| Жесткая, полностью неявная ДАУ - химическая реакция Робертсона | Решите задачу Робертсона как неявные дифференциальные алгебраические уравнения (ДАУ) |
iburgersode | ode15i |
| Неявная система ОДУ - уравнение Бургеров | — |
kneeode | ode15s |
| «Проблема колена» с ограничениями неотрицательности | Решение неотрицательной ОДУ |
orbitode | ode45 |
| Расширенное местоположение события - ограничено задачами трех тел | Место проведения мероприятия ОДУ |
rigidode | ode45 | — | Нежесткая задача - уравнения Эйлера твердого тела без внешних сил | Решение нежестких ОДУ |
vdpode | ode15s |
| Параметризуемое уравнение Ван дер Поля (жесткое для больших μ) | Решение жестких ОДУ |
[1] Шемпин, Л. Ф. и М. К. Гордон, компьютерное решение обыкновенных дифференциальных уравнений: задача начального значения, У. Х. Фриман, Сан-Франциско, 1975.
[2] Forsythe, G., M. Malcolm, and C. Moler, Computer Methods for Mathematical Computations, Prentice Hall, New Jersey, 1977.
[3] Kahaner, D., C. Moler, and S. Nash, Numerical Methods and Software, Prentice Hall, New Jersey, 1989.
[4] шемпин, L. F., Numerical Solution of Обыкновенные Дифференциальные Уравнения, Chapman & Hall, New York, 1994.
[5] шемпин, L. F. and M. W. Reichelt, «The MATLAB ODE Suite», SIAM Journal on Scientific Computing, Vol. 18, 1997, pp. 1-22.
[6] шемпин, L. F., Gladwell, I. and S. Thompson, Solving ODEs with MATLAB, Cambridge University Press, Cambridge UK, 2003.