exponenta event banner

odeset

Создание или изменение структуры опций для решателей ODE и PDE

Описание

пример

options = odeset(Name,Value,...) создает структуру опций, которую можно передать в качестве аргумента решателям ODE и PDE. В структуре, options, именованные опции имеют указанные значения. Все неуказанные параметры имеют значения по умолчанию. Например, options = odeset('RelTol',1e-3) возвращает структуру опций с RelTol установить в значение 1e-3.

пример

options = odeset(oldopts,Name,Value,...) изменяет существующую структуру опций, oldopts, используя вновь заданные пары имя-значение. Это приведет к перезаписи всех старых значений указанных опций и добавлению в структуру значений для новых опций.

пример

options = odeset(oldopts,newopts) изменяет существующую структуру опций, oldopts, объединив его с новой структурой опций, newopts. Любые новые параметры, не равные [] перезаписать соответствующие опции в oldopts.

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

Примеры

свернуть все

Создание структуры опций, содержащей значения для RelTol и AbsTol.

options = odeset('RelTol',1e-8,'AbsTol',1e-10);

Обновить значение AbsTol в существующей структуре опций.

options = odeset(options,'AbsTol',1e-9)
options = struct with fields:
              AbsTol: 1.0000e-09
                 BDF: []
              Events: []
         InitialStep: []
            Jacobian: []
           JConstant: []
            JPattern: []
                Mass: []
        MassSingular: []
            MaxOrder: []
             MaxStep: []
         NonNegative: []
         NormControl: []
           OutputFcn: []
           OutputSel: []
              Refine: []
              RelTol: 1.0000e-08
               Stats: []
          Vectorized: []
    MStateDependence: []
           MvPattern: []
        InitialSlope: []

Создайте две структуры опций.

opts_1 = odeset('RelTol',1e-8,'AbsTol',1e-9,'OutputFcn',@odeplot,'Stats','on');
opts_2 = odeset('Mass',@(t) [t 0; 0 -t],'MStateDependence','none',...
    'MassSingular','no','OutputFcn',@odephas2);

Объединить структуры опций, отдавая предпочтение opts_2. Поскольку обе структуры содержат различные значения для OutputFcn, значение в opts_2 переопределяет значение в opts_1.

opts = odeset(opts_1,opts_2)
opts = struct with fields:
              AbsTol: 1.0000e-09
                 BDF: []
              Events: []
         InitialStep: []
            Jacobian: []
           JConstant: []
            JPattern: []
                Mass: @(t)[t,0;0,-t]
        MassSingular: 'no'
            MaxOrder: []
             MaxStep: []
         NonNegative: []
         NormControl: []
           OutputFcn: @odephas2
           OutputSel: []
              Refine: []
              RelTol: 1.0000e-08
               Stats: 'on'
          Vectorized: []
    MStateDependence: 'none'
           MvPattern: []
        InitialSlope: []

Входные аргументы

свернуть все

Старая структура опций, заданная как структура, ранее созданная с помощью odeset.

Типы данных: struct

Новая структура опций, заданная как структура, ранее созданная с помощью odeset.

Типы данных: struct

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: options = odeset('AbsTol',1e-3,'Reltol',1e-2,'Jacobian',@J,'Mass',M) задает пороговые значения для абсолютных и относительных допусков ошибок, функцию, возвращающую якобиан, и массовую матрицу.
Управление ошибками

свернуть все

Относительный допуск ошибки, указанный как разделенная запятыми пара, состоящая из 'RelTol' и положительный скаляр. Этот допуск измеряет ошибку относительно величины каждого компонента решения. Грубо говоря, он управляет количеством правильных цифр во всех компонентах решения, за исключением тех, которые меньше абсолютного допуска. AbsTol.

На каждом шаге решатель ОДУ оценивает локальную ошибку e в iТретий компонент раствора. Для успешного выполнения шаг должен иметь допустимую ошибку, определяемую как относительным, так и абсолютным допуском ошибки:

|e(i)| <= max(RelTol*abs(y(i)),AbsTol(i))

Пример: opts = odeset('RelTol',1e-5,'AbsTol',1e-7)

Типы данных: single | double

Абсолютный допуск ошибки, указанный как разделенная запятыми пара, состоящая из 'AbsTol' и положительный скаляр или вектор. Этот допуск является порогом, ниже которого значение решения становится неважным. Если решение |y| меньше, чем AbsTol, то решателю не нужно получать правильные цифры в |y|. По этой причине значение AbsTol должен учитывать масштаб компонентов раствора.

Если AbsTol является вектором, то он должен быть той же длины, что и решение. Если AbsTol является скаляром, то значение применяется ко всем компонентам решения.

На каждом шаге решатель ОДУ оценивает локальную ошибку e в iТретий компонент раствора. Для успешного выполнения шаг должен иметь допустимую ошибку, определяемую как относительным, так и абсолютным допуском ошибки:

|e(i)| <= max(RelTol*abs(y(i)),AbsTol(i))

Пример: opts = odeset('RelTol',1e-5,'AbsTol',1e-7)

Типы данных: single | double

Ошибка управления относительно нормы решения, определяемая как разделенная запятыми пара, состоящая из 'NormControl' и 'on' или 'off'. Когда NormControl является 'on', решатели управляют ошибкой e на каждом этапе с использованием нормы раствора, а не его абсолютного значения:

norm(e(i)) <= max(RelTol*norm(y(i)),AbsTol(i))

Пример: opts = odeset('NormControl','on')

Типы данных: char | string

Вывод решателя

свернуть все

Компоненты неотрицательного раствора, указанные как пара, разделенная запятыми, состоящая из 'NonNegative' и скаляр или вектор. Скаляр или вектор выбирает, какие компоненты решения должны быть неотрицательными.

Примечание

NonNegative недоступен для ode23s или ode15i. Дополнительно, для ode15s, ode23t, и ode23tb он недоступен для проблем, когда имеется массовая матрица.

Пример: opts = odeset('NonNegative',1) указывает, что первый компонент решения должен быть неотрицательным.

Типы данных: single | double

Функция вывода, заданная как разделенная запятыми пара, состоящая из 'OutputFcn' и дескриптор функции. Решатель ODE вызывает функцию вывода после каждого успешного шага времени. При вызове решателя ODE без выходных данных функция вывода по умолчанию имеет значение @odeplot, который отображает все компоненты решения по мере их вычисления. В противном случае значение по умолчанию - [].

Это встроенные функции вывода, которые можно использовать с OutputFcn:

Имя функцииОписание
odeplotПостройте график между всеми компонентами решения и временем
odephas22-й сюжет самолета фазы первых двух компонентов решения
odephas33D сюжет самолета фазы первых трех компонентов решения
odeprintПечать решения и шаг времени

При записи пользовательской функции вывода она должна иметь вид

status = myOutputFcn(t,y,flag)

Функция вывода также должна соответствующим образом реагировать на эти флаги:

ФлагОписание
'init'

Вызовы решателя myOutputFcn([tspan(1) tspan(end)],y0,'init') перед началом интеграции для инициализации функции вывода. tspan и y0 являются входными аргументами для решателя ОДУ.

[]

Вызовы решателя status = myOutputFcn(t,y,[]) после каждого шага интеграции, для которого запрашиваются выходные данные. t содержит точки, в которых вывод был сгенерирован во время шага, и y - числовое решение в точках в t. Если t является вектором, то i4-я колонна y соответствует i-й элемент t.

  • Если length(tspan) > 2, то вывод производится в каждой точке в tspan.

  • Если length(tspan) = 2, то выход производится в соответствии с Refine вариант.

myOutputFcn должен возвращать статус  0 или 1. Если status = 1затем решатель останавливает интеграцию. Этот механизм можно использовать, например, для реализации  кнопки Stop.

'done'

Вызовы решателя myOutputFcn([],[],'done') после завершения интеграции, что позволит функции вывода выполнять задачи очистки.

Типы данных: function_handle

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

Пример: opts = odeset('OutputFcn',@myFcn,'OutputSel',[1 3]) передает первую и третью компоненты решения в выходную функцию.

Коэффициент уточнения решения, указанный как разделенная запятыми пара, состоящая из 'Refine' и скаляр. Скаляр задает коэффициент, на который количество выходных точек должно увеличиваться в каждом шаге.

  • Если коэффициент уточнения равен 1, то решатель возвращает решения только в конце каждого шага.

  • Если коэффициент уточнения равен n>1, то решатель подразделяет каждый шаг на n уменьшение интервалов и возврат решений в каждой точке.

Значение по умолчанию для большинства решателей: 1, но ode45 использует значение по умолчанию 4 для компенсации больших размеров ступеней.

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

Примечание

Refine не применяется, когда length(tspan) > 2или когда решатель ОДУ возвращает решение в виде структуры.

Пример: opts = odeset('Refine',5) увеличивает количество выходных точек в пять раз.

Статистика решателя, указанная как разделенная запятыми пара, состоящая из 'Stats' и 'on' или 'off'. Когда 'on', решатель отображает информацию после завершения решения:

  • Количество успешных шагов

  • Число неудачных попыток

  • Количество вызовов функции ОДУ для оценки f (t, y)

Неявные решатели отображают дополнительную информацию о решении:

  • Количество операций формирования матрицы частных производных ∂f/∂y

  • Количество разложений логической единицы

  • Количество решений линейных систем

Пример: opts = odeset('Stats','on')

Типы данных: char | string

Размер шага

свернуть все

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

Если начальный размер шага не указан, то решатель основывает начальный размер шага на наклоне решения в начальный момент времени. tspan(1). Если наклон всех компонентов решения равен нулю, решатель может попробовать слишком большой размер шага. Если вы знаете, что это происходит, или если вы хотите быть уверены, что решатель разрешает важное поведение в начале интеграции, то используйте InitialStep для обеспечения подходящего размера начального этапа.

Пример: opts = odeset('InitialStep',1e-3) устанавливает верхнюю границу 1e-3 на размер начального шага.

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

  • Не использовать MaxStep просто для получения большего количества выходных точек, поскольку это может значительно замедлить интеграцию. Вместо этого используйте Refine возможность вычисления дополнительных точек при низких вычислительных затратах.

  • Не использовать MaxStep повышение точности решения. Если решение недостаточно точное, уменьшите значение RelTol и использовать решение для определения подходящего значения для AbsTol.

  • Избегайте использования MaxStep для обеспечения того, чтобы решатель не переходил через некоторое поведение, которое происходит только один раз в интервале интеграции. Если известно время, в которое происходит поведение, разбейте интервал на две части и дважды вызовите решатель. Если вы не знаете время, в которое происходит изменение, попробуйте сократить RelTol и AbsTol. Использовать MaxStep только в качестве крайней меры в данном случае.

Пример: opts = odeset('MaxStep',1e-2)

Расположение события

свернуть все

Функция события, заданная как разделенная запятыми пара, состоящая из 'Events' и дескриптор функции, такой как @myEventsFcn.

Подпись функции

Для ОДУ: Функция события, указанная дескриптором функции, должна иметь общий вид

[value,isterminal,direction] = myEventsFcn(t,y)

Для PDE: Функция события, указанная дескриптором функции, должна иметь общий вид

[value,isterminal,direction] = myEventsFcn(m,t,xmesh,umesh)

В обоих случаях value, isterminal, и direction являются векторами, i-й элемент соответствует iФункция события:

  • value(i) - значение iФункция «-е событие».

  • isterminal(i) = 1 если интеграция должна завершиться в нуле этой функции события. В противном случае это 0.

  • direction(i) = 0 если должны быть найдены все нули (по умолчанию). Значение +1 находит только нули, где увеличивается функция события, и -1 находит только нули, где функция события уменьшается.

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

Выходные данные событий

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

[t,y,te,ye,ie] = odeXY(odefun,tspan,y0,options)

Три дополнительных выхода, возвращаемых решателем, соответствуют обнаруженным событиям:

  • te - вектор столбца времени возникновения событий.

  • ye - значение решения, соответствующее времени события в te.

  • ie - индексы в векторе, возвращаемые функцией событий. Значения указывают, какое событие обнаружил решатель.

Кроме того, можно вызвать решатель с одним выводом как

sol = odeXY(odefun,tspan,y0,options)

В этом случае информация о событии сохраняется в структуре как sol.te, sol.ye, и sol.ie.

Диагностика

Механизм поиска корня, используемый решателем ODE/PDE в сочетании с функцией события, имеет следующие ограничения:

  • Если событие терминала происходит во время первого шага интеграции, то решатель регистрирует событие как нетерминальное и продолжает интеграцию.

  • Если во время первого шага происходит более одного события терминала, то регистрируется только первое событие, и решатель продолжает интеграцию.

  • Нули определяются пересечениями знаков между ступенями. Поэтому нули с четным числом переходов между шагами могут быть пропущены.

Если решатель выполняет шаги после событий, попробуйте уменьшить RelTol и AbsTol повышение точности. Также можно задать MaxStep для размещения верхней границы размера шага. Наладка tspan не изменяет шаги, выполняемые решателем.

Примеры

Типы данных: function_handle

Матрица Якобиана

свернуть все

матрица Якобиана, указанная как разделенная запятыми пара, состоящая из 'Jacobian' и матрица или функция, которая вычисляет якобиан. Якобиан - матрица частных производных функции, определяющая дифференциальные уравнения.

J=∂f∂y=[∂f1∂y1∂f1∂y2⋯∂f2∂y1∂f2∂y2⋯⋮⋮]

Для жестких решателей ОДУ (ode15s, ode23s, ode23t, ode23tb, и ode15i), предоставление информации о матрице Якобиана имеет решающее значение для надежности и эффективности. Если якобиан не указан, то решатель ОДУ аппроксимирует его численно с помощью конечных разностей.

Для ode15i только: Jacobian параметр должен указывать матрицы как для ∂f∂y, так и для ∂f∂y '. Можно предоставить эти матрицы как массив ячеек из двух постоянных матриц {∂f∂y, ∂f∂y '} или как функцию, которая вычисляет матрицы и имеет общий вид

[dfdy, dfdp] = Fjac(t,y,yp)

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

Пример: opts = odeset('Jacobian',@J) определяет функцию J вычисляет матрицу Якобиана.

Пример: opts = odeset('Jacobian',[0 1; -2 1]) задает постоянную матрицу якобиана.

Пример: opts = odeset('Jacobian',{A,Ap}) задает две постоянные матрицы якобиана для использования с ode15i.

Типы данных: single | double | cell | function_handle

Узор якобианской разреженности, определяемый как разделенная запятыми пара, состоящая из 'JPattern' и разреженную матрицу. Разреженная матрица содержит 1s, где могут быть ненулевые записи в Jacobian. Решатель ОДУ использует шаблон разреженности для численной генерации разреженной матрицы якобиана. Используйте эту опцию, чтобы увеличить время выполнения, когда система ОДУ большая и вы не можете предоставить аналитический якобиан.

Для ode15i только: Установка JPattern использование массива ячеек, содержащего две разреженные матрицы {dfdyPattern, dfdypPattern}, которые являются узорами разреженности для ∂f∂y и ∂f∂y '.

Примечание

При указании матрицы якобиана с помощью Jacobian, то решатель игнорирует любые настройки для JPattern.

Пример: opts = odeset('JPattern',S) задает узор разреженности якобиана с использованием разреженной матрицы S.

Пример: opts = odeset('JPattern',{dFdy, dFdyp}) задает два постоянных шаблона разреженности якобиана для использования с ode15i.

Типы данных: double | cell

Переключатель векторизованной функции, заданный как разделенная запятыми пара, состоящая из 'Vectorized' и либо 'off' или 'on'. Используйте эту опцию, чтобы сообщить решателю ODE, что функция закодирована так, что она принимает и возвращает векторы для второго аргумента. То есть f(t,[y1 y2 y3...]) прибыль [f(t,y1) f(t,y2) f(t,y3) ...]. По сравнению с оценкой значений по одному, эта векторизация позволяет решателю уменьшить количество оценок функций, необходимых для вычисления всех столбцов матрицы Якобиана, и может значительно сократить время решения. Описание операторов, поддерживающих векторизацию, см. в разделе Операции с массивом и матрицей.

Для ode15i только: Установка Vectorized с использованием двухэлементного массива ячеек. Задайте для первого элемента значение 'on' если f(t,[y1,y2,...],yp) прибыль [f(t,y1,yp), f(t,y2,yp), ...]. Задайте для второго элемента значение 'on' если f(t,y,[yp1,yp2,...]) прибыль [f(t,y,yp1), f(t,y,yp2), ...]. Значение по умолчанию Vectorized в этом случае {'off','off'}.

Примечание

При указании матрицы якобиана с помощью Jacobian, то решатель игнорирует установку 'on' для Vectorized.

Пример: opts = odeset('JPattern',S,'Vectorized','on') указывает, что функция векторизируется, и задает шаблон якобианской разреженности.

Пример: opts = odeset('JPattern',{dy,dyp},'Vectorized',{'on','on'}) указывает, что функция векторизована относительно y и yp, а также задает шаблон якобийской разреженности для использования с ode15i.

Типы данных: char | cell | string

Массовая матрица и дисковые полки (не применяются к ode15i)

свернуть все

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

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

  • Когда M (t, y) является сингулярной матрицей, то задача состоит в системе дифференциальных алгебраических уравнений (DAE). Дисковая полка имеет решение только тогда, когдаy0 является непротиворечивым; то есть существует начальный уклон yp0 такой, что M(t0,y0)yp0 = f(t0,y0), где yp0 задается с помощью InitialSlope вариант. Для дисковых полок характерен их дифференциальный индекс или количество производных, необходимых для упрощения системы до эквивалентной системы ОДУ. Для дисковых полок с индексом 1 решение задачи начального значения с согласованными начальными условиями во многом аналогично решению ОДУ. ode15s и ode23t решатели могут решать дисковые полки индекса 1. При решении дисковых полок выгодно формулировать задачу так, чтобы массовая матрица была диагональной матрицей (полукликтовой DAE).

Во всех случаях массовые матрицы, зависящие от времени или состояния (вместо константы), требуют использования дополнительных опций:

  • Для задач вида M (t) y '= f (t, y) установитеMStateDependence опция для 'none'. Это гарантирует, что решатель вызовет функцию массовой матрицы с одним входным аргументом для t.

  • Если массовая матрица зависит от y, затем установить MStateDependence к также 'weak' (по умолчанию) или 'strong'. В обоих случаях решатель вызывает функцию матрицы масс с двумя входами (t,y), но 'weak' опция приводит к неявным решателям, использующим аппроксимации при решении алгебраических уравнений.

  • Если система содержит множество уравнений с сильно зависимой от состояния массовой матрицей M (t, y), то установитеMvPattern к разреженной матрице S для задания шаблона разреженности.

Пример: Файлы примеров fem2ode и batonode иллюстрируют различные виды использования матрицы масс.

Типы данных: single | double | function_handle

Зависимость состояния матрицы масс, определяемая как разделенная запятыми пара, состоящая из 'MStateDependence и 'weak', 'strong', или 'none'.

  • Для задач вида M (t) y '= f (t, y) установитеMStateDependence опция для 'none'. Это гарантирует, что решатель вызовет функцию массовой матрицы с одним входным аргументом для t.

  • Если массовая матрица зависит от y, затем установить MStateDependence к также 'weak' (по умолчанию) или 'strong'. В обоих случаях решатель вызывает функцию матрицы масс с двумя входами (t,y), но 'weak' опция приводит к неявным решателям, использующим аппроксимации при решении алгебраических уравнений.

Пример: opts = odeset('Mass',@M,'MStateDependence','none') указывает, что массовая матрица M зависит только от t.

Типы данных: char | string

Массовая матрица разреженности, заданная как разделенная запятыми пара, состоящая из 'MvPattern' и разреженную матрицу. Эта опция используется для задания шаблона разреженности матрицы ∂∂y[M (t, y) v]. Разреженная матрицаS имеет S(i,j) = 1 если для любого k, (i,k) компонент M (t, y) зависит от компонентаj из y.

Примечание

MvPattern предназначен для использования ode15s, ode23t, и ode23tb когда MStateDependence является 'strong'.

Пример: opts = odeset('MStateDependence','strong','MvPattern',S)

Переключатель сингулярной матрицы масс, заданный как разделенная запятыми пара, состоящая из 'MassSingular' и 'maybe', 'yes', или 'no'. Значение по умолчанию 'maybe' заставляет решатель проверять, является ли проблема дисковой полкой, проверяя, является ли массовая матрица сингулярной. Избежать этой проверки, указав 'yes' если вы знаете, что система является дисковой полкой, или 'no' если это не так.

Типы данных: char | string

Согласованный начальный наклон, указанный как разделенная запятыми пара, состоящая из 'InitialSlope' и вектор. Используйте эту опцию с ode15s и ode23t решатели при решении дисковых полок. Указанный вектор представляет собой начальный наклон y '0, так что M (t0, y0) y' 0 = f (t0, y0). Если указанные начальные условия не согласованы, то решатель рассматривает их как догадки, пытается вычислить согласованные значения, близкие к догадкам, и продолжает решать проблему.

Типы данных: single | double

Только для ode15s и ode15i

свернуть все

Максимальный порядок формулы, определяемый как разделенная запятыми пара, состоящая из 'MaxOrder' и целое число между 1 и 5. Эта опция используется для указания максимального порядка, используемого в формулах числового дифференцирования (NDF) или формулах обратного дифференцирования (BDF), которые используются решателями переменного порядка. ode15s и ode15i.

Переключение для использования формул обратного дифференцирования (BDF) с ode15s, указанная как пара, разделенная запятыми, состоящая из 'BDF' и либо 'off' или 'on'. Формулы численного дифференцирования по умолчанию (NDF) обычно более эффективны, чем BDF, но они тесно связаны.

Пример: opts = odeset('BDF','on','MaxOrder',4) позволяет использовать BDF по ode15s с максимальным порядком 4.

Типы данных: char | string

Выходные аргументы

свернуть все

Структура опций. options может использоваться в качестве четвертого входного аргумента для ode45, ode23, ode113, ode15s, ode23s, ode23t, ode23tb, или ode15i.

Совет

Расширенные возможности

.
Представлен до R2006a