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 имя аргумента и 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] = myEventsFcn(m,t,xmesh,umesh)

В обоих случаях, 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.

Диагностика

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

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

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

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

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

Примеры

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

Для 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 может использоваться в качестве четвертого входного параметра к ode45ode23ode113ode15sode23sode23tode23tb, или ode15i.

Советы

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

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