Решение ОДУ часто требует параметров подстройки, корректировка ошибочных допусков или передача дополнительной информации к решателю. Эта тема показывает, как задать опции, и с какими решателями для дифференциальных уравнений каждая опция совместима.
Используйте функцию odeset
, чтобы создать структуру опций, которую вы затем передаете решателю как четвертый входной параметр. Например, чтобы настроить допуски относительной и абсолютной погрешности:
opts = odeset('RelTol',1e-2,'AbsTol',1e-5); [t,y] = ode45(@odefun,tspan,y0,opts);
Если вы используете команду odeset
без входных параметров, то MATLAB® отображает список возможных значений для каждой опции со значениями по умолчанию, обозначенными фигурными скобками {}
.
Функция odeget
запрашивает значение опции в существующей структуре, которую можно использовать, чтобы динамически изменить значения опции на основе условий. Например, этот код обнаруживает, установлен ли Stats
в 'on'
и изменяет значение при необходимости:
if isempty(odeget(opts,'Stats')) odeset(opts,'Stats','on') end
Некоторые опции в odeset
типичны и совместимы с любым решателем, в то время как другие специфичны для решателя. Эта таблица суммирует совместимость каждой опции с другими решателями.
Опция | ode45 | ode23 | ode113 | ode15s | ode23s | ode23t | ode23tb | ode15i |
---|---|---|---|---|---|---|---|---|
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ✓ | ✓ | ✓ | ✓* | — | ✓* | ✓* | — |
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓** |
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| — | — | — | ✓ | ✓ | ✓ | ✓ | ✓ |
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — |
| — | — | — | ✓ | — | ✓ | — | — |
| — | — | — | ✓ | — | — | — | ✓ |
* Использование параметр NonNegative
с ode15s
, ode23t
и ode23tb
только для тех проблем, в которых нет никакой большой матрицы.
** Функция событий для ode15i
должна принять третий входной параметр для yp
.
MATLAB включает несколько файлов в качестве примера, которые показывают, как использовать различные варианты. Например, введите edit ballode
, чтобы видеть пример, который использует 'Events'
, чтобы задать функцию событий или edit batonode
, чтобы видеть пример, который использует 'Mass'
, чтобы задать большую матрицу. Для полных сводных данных файлов в качестве примера и какие опции они используют, см. Сводные данные Примеров ОДУ и Файлов.