exponenta event banner

Выбор решателя ОДУ

Обыкновенные дифференциальные уравнения

Обыкновенное дифференциальное уравнение (ОДУ) содержит одну или более производных зависимой переменной, y, относительно единственной независимой переменной, t, обычно называемой временем. Обозначение, используемое здесь для представления производных y относительно t, является y 'для первой производной, y "для второй производной и так далее. Порядок ОДУ равен производной y высшего порядка, которая появляется в уравнении.

Например, это ОДУ второго порядка:

y "= 9y

В задаче начального значения ОДУ решают, начиная с начального состояния. Используя исходное условие y0, а также период времени, в течение которого должен быть получен ответ (t0, tf), решение получается итеративно. На каждом шаге решатель применяет определенный алгоритм к результатам предыдущих шагов. На первом таком этапе начальное условие предоставляет необходимую информацию, которая позволяет продолжить интеграцию. В результате решатель ОДУ возвращает вектор временных шагов t = [t0, t1, t2,..., tf], а также соответствующее решение на каждом шаге y = [y0, y1, y2,..., yf].

Типы ОДУ

Решатели ОДУ в MATLAB ® решают следующие типы ОДУ первого порядка:

  • Явные ОДУ вида y '= f (t, y).

  • Линейно неявные ОДУ формы M (t, y) y '= f (t, y), где M (t, y) - неингулярная массовая матрица. Массовая матрица может зависеть от времени или состояния или может быть постоянной матрицей. Линейно неявные ОДУ включают линейные комбинации первой производной y, которые кодируются в массовой матрице.

    Линейно неявные ОДУ всегда могут быть преобразованы в явную форму, y '= M 1 (t, y) f (t, y). Однако указание матрицы массы непосредственно решателю ОДУ позволяет избежать этого преобразования, которое неудобно и может быть дорогостоящим в вычислительном отношении.

  • Если некоторые компоненты y 'отсутствуют, то уравнения называются дифференциальными алгебраическими уравнениями, или DAE, а система DAE содержит некоторые алгебраические переменные. Алгебраические переменные - это зависимые переменные, производные которых не появляются в уравнениях. Система дисковых полок может быть переписана как эквивалентная система ОДУ первого порядка путём взятия производных уравнений для исключения алгебраических переменных. Количество производных, необходимых для перезаписи дисковой полки в качестве ОДУ, называется дифференциальным индексом. ode15s и ode23t решатели могут решать дисковые полки с индексом 1.

  • Полностью неявные ОДУ вида f (t, y, y ') = 0. Полностью неявные ОДУ не могут быть переписаны в явной форме, а также могут содержать некоторые алгебраические переменные. ode15i решатель предназначен для полностью неявных проблем, включая дисковые полки с индексом 1.

Дополнительную информацию о некоторых типах проблем можно предоставить решателю с помощью odeset для создания структуры опций.

Системы ОДУ

Можно задать любое количество связанных уравнений ОДУ для решения, и в принципе число уравнений ограничено только доступной компьютерной памятью. Если система уравнений имеет n уравнений,

(y'1y'2⋮y'n) = (f1 (t, y1, y2,..., yn) f2 (t, y1, y2,..., yn) ⋮fn (t, y1, y2,..., yn)),

затем функция, которая кодирует уравнения, возвращает вектор с n элементами, соответствующими значениям для y '1, y' 2,..., y 'n. Например, рассмотрим систему двух уравнений

{y '1 = y2y' 2 = y1 y2 − 2.

Функция, которая кодирует эти уравнения

function dy = myODE(t,y)
dy(1) = y(2);
dy(2) = y(1)*y(2)-2;

ODE более высокого порядка

Решатели ODE MATLAB решают только уравнения первого порядка. Необходимо переписать ODE более высокого порядка как эквивалентную систему уравнений первого порядка с использованием общих замен.

y1 = yy2 = y 'y3 = y "⋮yn=y (n 1).

Результатом этих замен является система n уравнений первого порядка

{y '1 = y2y' 2 = y3 ⋮y'n=f (t, y1, y2,..., yn).

Например, рассмотрим ОДУ третьего порядка

y «'y» y + 1 = 0.

Использование замен

y1 = yy2 = y 'y3 = y "

результаты в эквивалентной системе первого порядка

{y '1 = y2y' 2 = y3y '3 = y1 y3 − 1.

Код для этой системы уравнений

function dydt = f(t,y)
dydt(1) = y(2);
dydt(2) = y(3);
dydt(3) = y(1)*y(3)-1;

Комплексные ОДУ

Рассмотрим комплексное уравнение ОДУ

y '= f (t, y),

где y = y1 + iy2. Чтобы решить его, разделите действительную и мнимую части на различные компоненты решения, а затем рекомбинируйте результаты в конце. Концептуально это выглядит как

yv = [Real (y) Imag (y)] fv = [Real (f (t, y)) Imag (f (t, y))].

Например, если значение ODE равно y '= yt + 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НежесткийСреда

Большую часть времени. ode45 должен быть первым решателем, который вы пытаетесь.

ode23Низко

ode23 может быть более эффективным, чем ode45 при проблемах с грубыми допусками или при наличии умеренной жесткости.

ode113От низкого до высокого

ode113 может быть более эффективным, чем ode45 при проблемах со строгими допусками ошибок или когда функцию ОДУ оценить дорого.

ode15sЖесткийОт низкого до среднего

Попробуй ode15s когда ode45 не работает или неэффективно, и вы подозреваете, что проблема жесткая. Также использовать ode15s при решении дифференциальных алгебраических уравнений (DAE).

ode23sНизко

ode23s может быть более эффективным, чем ode15s при проблемах с грубыми допусками ошибок. Это может решить некоторые жесткие проблемы, для которых ode15s не является эффективным.

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

Если существует массовая матрица, она должна быть постоянной.

ode23tНизко

Использовать ode23t если проблема только умеренно жесткая и вам нужно решение без численного демпфирования. 

ode23t может решать дифференциальные алгебраические уравнения (DAE).

ode23tbНизко

Как ode23s, ode23tb решатель может быть более эффективным, чем ode15s при проблемах с грубыми допусками ошибок.

ode15iПолностью неявныйНизко

Использовать ode15i для полностью неявных задач f (t, y, y ") = 0 и для дифференциальных алгебраических уравнений (DAE) индекса 1.

Для получения дополнительной информации и рекомендаций относительно использования каждого решателя см. [5].

Резюме примеров и файлов ОДУ

Существует несколько примеров файлов, которые служат отличными отправными точками для большинства проблем с ОДУ. Чтобы запустить приложение «Примеры дифференциальных уравнений», которое позволяет легко просматривать и запускать примеры, введите

odeexamples

Чтобы открыть отдельный файл примера для редактирования, введите

edit exampleFileName.m

Для запуска примера введите

exampleFileName

В этой таблице содержится список доступных файлов примеров ODE и дисковых полок, а также используемых ими решателей и опций. Ссылки включены для подмножества примеров, которые также публикуются непосредственно в документации.

Пример файлаИспользуемый решательПараметры указаныОписаниеСсылка на документацию
amp1daeode23t
  • 'Mass'

Жесткая полка - электрическая цепь с постоянной, сингулярной массовой матрицей

Решите жесткое дифференциальное алгебраическое уравнение транзистора
ballodeode23
  • 'Events'

  • 'OutputFcn'

  • 'OutputSel'

  • 'Refine'

  • 'InitialStep'

  • 'MaxStep'

Простое расположение события - подпрыгивающий мяч

Местоположение события ОДУ
batonodeode45
  • 'Mass'

ОДУ с зависящей от времени и состояния массовой матрицей - движение дубинки

Решить уравнения движения для дубинки, выброшенной в воздух
brussodeode15s
  • 'JPattern'

  • 'Vectorized'

Жесткая большая проблема - диффузия в химической реакции (Брусселатор)

Решение жестких ОДУ
burgersodeode15s
  • 'Mass'

  • 'MStateDependence'

  • 'JPattern'

  • 'MvPattern'

  • 'RelTol'

  • 'AbsTol'

ОДУ с сильно зависимой от состояния массовой матрицей - уравнение Бургера, решенное с помощью метода движущейся сетки

Решение ОДУ с помощью сильно зависящей от состояния матрицы масс
fem1odeode15s
  • 'Mass'

  • 'MStateDependence'

  • 'Jacobian'

Жесткая проблема с зависящей от времени массовой матрицей - метод конечных элементов

fem2odeode23s
  • 'Mass'

Жесткая задача с матрицей постоянной массы - метод конечных элементов

hb1odeode15s

Жесткая проблема ОДУ решена на очень длинном интервале - химическая реакция Робертсона

hb1daeode15s
  • 'Mass'

  • 'RelTol'

  • 'AbsTol'

  • 'Vectorized'

Жесткая, линейно неявная DAE из закона о сохранении - химическая реакция Робертсона

Решение задачи Робертсона как полуявных дифференциальных алгебраических уравнений (DAE)
ihb1daeode15i
  • 'RelTol'

  • 'AbsTol'

  • 'Jacobian'

Жесткая, полностью неявная химическая реакция DAE - Робертсона

Решение задачи Робертсона как неявных дифференциальных алгебраических уравнений (DAE)
iburgersodeode15i
  • 'RelTol'

  • 'AbsTol'

  • 'Jacobian'

  • 'JPattern'

Неявная система ОДУ - уравнение Бургеров

kneeodeode15s
  • 'NonNegative'

«Проблема колена» с ограничениями неотрицательности

Неотрицательное решение ОДУ
orbitodeode45
  • 'RelTol'

  • 'AbsTol'

  • 'Events'

  • 'OutputFcn'

Расширенное расположение события - ограниченная проблема с тремя телами

Местоположение события ОДУ
rigidodeode45

Задача Nonstiff - уравнения Эйлера жёсткого тела без внешних сил

Решить некомпетентные ОДУ
vdpodeode15s
  • 'Jacobian'

Параметризуемое уравнение ван дер Пола (жесткое для больших λ)

Решение жестких ОДУ

Ссылки

[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.

См. также

|

Связанные темы

Внешние веб-сайты