odeset

Создайте или измените структуру параметров решателей ОДУ

Синтаксис

options = odeset(Name,Value,...)
options = odeset(oldopts,Name,Value,...)
options = odeset(oldopts,newopts)
odeset

Описание

пример

options = odeset(Name,Value,...) создает структуру опций, которую можно передать в качестве аргумента любому из решателей ОДУ. В структуре, 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

Контроль ошибок

свернуть все

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

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

|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 th компонент решения. Чтобы быть успешным, шаг должен иметь приемлемую ошибку, как определено и допусками относительной и абсолютной погрешности:

|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' и указателя на функцию. Решатель ОДУ вызывает выходную функцию после каждого успешного временного шага. Если вы вызываете решатель ОДУ без выходных параметров, то значения по умолчанию выходной функции к @odeplot, который строит все компоненты решения, когда они вычисляются. В противном случае значением по умолчанию является [].

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

FunctionName Описание
odeplotПостройте все компоненты решения по сравнению со временем
odephas22D график плоскости фазы первых двух компонентов решения
odephas33-D график плоскости фазы первых трех компонентов решения
odeprintРаспечатайте решение и временной шаг

Если вы пишете пользовательскую выходную функцию, то она должна иметь форму

status = myOutputFcn(t,y,flag)

Выходная функция должна также соответственно ответить на эти флаги:

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

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

[]

Решатель вызывает status = myOutputFcn(t,y,[]) после каждого этапа интеграции, для которого требуют вывод. t содержит точки, где выведенный был сгенерирован во время шага, и y является числовым решением в точках в t. Если t является вектором, то i th столбец y соответствует i th элемент 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 был сформирован

  • Количество разложений LU

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

Пример: 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)

EventLocation

свернуть все

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

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

value, isterminal и direction являются векторами, i которых th элемент соответствует i th функция события:

  • value(i) является значением i th функция события.

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

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

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

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

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

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

Пример: файл ballode в качестве примера содержит функцию события, которая обнаруживает возвраты шара.

Пример: файл orbitode в качестве примера содержит функцию события, которая обнаруживает интересные места в орбите космического корабля.

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

Якобиевская матрица

свернуть все

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

J=fy=[f1y1f1y2f2y1f2y2]

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

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

[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' и разреженной матрицы. Разреженная матрица содержит 1 s, где могут быть ненулевые записи в якобиане. Решатель ОДУ использует шаблон разреженности, чтобы сгенерировать разреженную якобиевскую матрицу численно. Используйте эту опцию, чтобы улучшить время выполнения, когда система ОДУ является большой, и вы не можете обеспечить аналитический якобиан.

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

Примечание

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

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

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

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

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

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

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

  • Для проблем формы 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. Используйте эту опцию, чтобы задать максимальный порядок, используемый в числовых формулах дифференцирования (NDFs) или формулах дифференцирования назад (BDF), которые используются решателями переменного порядка ode15s и ode15i.

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

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

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

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

свернуть все

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

Советы

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

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