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

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

Обыкновенное дифференциальное уравнение (ODE) содержит одну или несколько производных зависимой переменной, 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'=M1(t,y)f(t,y). Однако определение большой матрицы непосредственно к решателю ОДУ избегает этого преобразования, которое является неудобным и может быть в вычислительном отношении дорогим.

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

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

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

Системы ОДУ

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

(y'1y'2y'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 y22 .

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

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

ОДУ высшего порядка

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

y1=yy2=y'y3=y''yn=y(n1).

Результатом этих замен является система уравнений первого порядка 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 y31.

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

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=[Действительный(y)     Imag(y)]fv=[Действительный(f(t,y))     Imag(f(t,y))].

Например, если ОДУ 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 для проблем с более свободными или более высокими требованиями точности.

Некоторые проблемы ОДУ показывают жесткость или трудность при оценке. Жесткость является термином, который игнорирует точное определение, но в целом, жесткость происходит, когда существует различие в масштабировании где-нибудь в проблеме. Например, если ОДУ имеет два компонента решения, которые отличаются на решительно различных масштабах времени, затем уравнение может быть жестким. Можно идентифицировать проблему, столь же жесткую, если нежесткие решатели (такие как ode45) не могут решить проблему или являются чрезвычайно медленными. Если вы замечаете, что нежесткий решатель является очень медленным, попытайтесь использовать жесткий решатель, такой как ode15s вместо этого. При использовании жесткого решателя можно улучшить надежность и эффективность путем предоставления якобиевской матрицы или ее шаблона разреженности.

Эта таблица предоставляет общие руководящие принципы на том, когда использовать каждый из других решателей.

РешательПроблемный типТочностьКогда использовать
ode45НежесткийНоситель

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

ode23Низко

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

ode113Низко к высоко

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

ode15sЖесткийОт низкой к высокой

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

ode23sНизко

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

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

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

ode23tНизко

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

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

ode23tbНизко

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

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

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

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

Сводные данные примеров ОДУ и файлов

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

odeexamples

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

edit exampleFileName.m

Чтобы запустить пример, ввести

exampleFileName

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

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

Жесткое ДАУ — электрическая схема с постоянной, сингулярной большой матрицей

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

  • 'OutputFcn'

  • 'OutputSel'

  • 'Refine'

  • 'InitialStep'

  • 'MaxStep'

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

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

ОДУ со временем - и большой матрицей состояния зависимой — движение маркера

brussodeode15s
  • 'JPattern'

  • 'Vectorized'

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

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

  • 'MStateDependence'

  • 'JPattern'

  • 'MvPattern'

  • 'RelTol'

  • 'AbsTol'

ОДУ с большой матрицей строго состояния зависимой — уравнение Бургеров решило использование движущегося метода mesh

fem1odeode15s
  • 'Mass'

  • 'MStateDependence'

  • 'Jacobian'

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

fem2odeode23s
  • 'Mass'

Жесткая проблема с постоянной большой матрицей — метод конечных элементов

hb1odeode15s

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

hb1daeode15s
  • 'Mass'

  • 'RelTol'

  • 'AbsTol'

  • 'Vectorized'

Жесткое, линейно неявное ДАУ от закона сохранения — химическая реакция Робертсона

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

  • 'AbsTol'

  • 'Jacobian'

Жесткое, полностью неявное ДАУ — химическая реакция Робертсона

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

  • 'AbsTol'

  • 'Jacobian'

  • 'JPattern'

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

kneeodeode15s
  • 'NonNegative'

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

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

  • 'AbsTol'

  • 'Events'

  • 'OutputFcn'

Усовершенствованное местоположение события — ограниченная задача трех тел

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

Нежесткая проблема — Эйлеровы уравнения твердого тела без внешних сил

Решение нестандартных ОДУ
vdpodeode15s
  • 'Jacobian'

Уравнение Ван дер Поля 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.

Смотрите также

|

Похожие темы

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