24.3 Решатели, совместимые с MATLAB
Octave также предоставляет набор решателей для задач Коши для обыкновенных дифференциальных уравнений (ОДУ), имеющих интерфейс, совместимый с MATLAB. Параметры для этого класса методов задаются с помощью функций.
В настоящее время реализованы следующие решатели:
- Методы Рунге-Кутты
- ode45 интегрирует систему нежестких ОДУ или дифференциально-алгебраических уравнений (ДАУ) индекса 1, используя метод Дорманда-Принса переменного шага высокого порядка. Он требует шести вычислений функции на каждом шаге интегрирования, но может делать более крупные шаги на гладких задачах, чем
ode23: потенциально обеспечивая лучшую эффективность при меньших допусках. - ode23 интегрирует систему нежестких ОДУ или (или ДАУ индекса 1). Он использует метод Богацки-Шампина третьего порядка и адаптирует локальный шаг, чтобы удовлетворить заданному пользователем допуску. Решатель требует трех вычислений функции на каждом шаге интегрирования.
- ode23s интегрирует систему жестких ОДУ (или ДАУ индекса 1) с помощью модифицированного метода Розенброка второго порядка.
- ode45 интегрирует систему нежестких ОДУ или дифференциально-алгебраических уравнений (ДАУ) индекса 1, используя метод Дорманда-Принса переменного шага высокого порядка. Он требует шести вычислений функции на каждом шаге интегрирования, но может делать более крупные шаги на гладких задачах, чем
- Многошаговые методы
- ode15s интегрирует систему жестких ОДУ (или ДАУ индекса 1) с помощью метода переменного шага и порядка, основанного на формулах обратных разниц (BDF).
- ode15i интегрирует систему полностью неявных ОДУ (или ДАУ индекса 1) с использованием того же метода переменного шага и порядка, что и
ode15s. decic может быть использован для вычисления согласованных начальных условий дляode15i.
Подробная информация о решателях приведена в статье Л. Ф. Шампина и М. В. Рейхельта, MATLAB ODE Suite, SIAM Journal on Scientific Computing, том 18, 1997, стр. 1–22, DOI: https://doi.org/10.1137/S1064827594276424.
- : [t, y] = ode45 (fun, trange, init) ¶
- : [t, y] = ode45 (fun, trange, init, ode_opt) ¶
- : [t, y, te, ye, ie] = ode45 (…) ¶
- : solution = ode45 (…) ¶
- : ode45 (…) ¶
-
Решает систему обыкновенных дифференциальных уравнений (ОДУ) с помощью известного явного метода Дорманда-Принса четвёртого порядка.
fun — это указатель на функцию, встроенная функция или строка, содержащая имя функции, определяющей ОДУ:
y' = f(t,y). Функция должна принимать два входных значения, где первое — время t, а второе — столбец неизвестных y.trange задаёт временной интервал, на котором будет оцениваться ОДУ. Обычно это двухэлементный вектор, задающий начальное и конечное время (
[tinit, tfinal]). Если элементов больше двух, то решение также будет вычислено в эти промежуточные моменты времени.По умолчанию
ode45использует адаптивный шаг времени с алгоритмомintegrate_adaptive. Допуск для вычисления шага времени можно изменить, используя параметры"RelTol"и"AbsTol".init содержит начальное значение для неизвестных. Если это строка, то решение y будет матрицей, в которой каждый столбец — решение для соответствующего начального значения в init.
Необязательный четвёртый аргумент ode_opt задаёт нестандартные параметры для решателя ОДУ. Это структура, сгенерированная
odeset.Функция обычно возвращает два результата. Переменная t — это столбец, содержащий моменты времени, где было найдено решение. Выход y — это матрица, в которой каждый столбец относится к разным неизвестным задачи, а каждая строка соответствует времени в t.
Результат также может быть возвращён в виде структуры solution, имеющей поле x с вектором строк времен, где было вычислено решение, и поле y с матрицей решения, где каждый столбец соответствует времени в x. Используйте
fieldnames (solution)для просмотра других полей и дополнительной информации, возвращаемой функцией.Если не указаны аргументы вывода и в ode_opt не указан
"OutputFcn", то"OutputFcn"устанавливается вodeplot, и результаты работы решателя отображаются сразу.Если используется опция
"Events", то могут быть возвращены три дополнительных результата. te содержит время, когда функция события вернула ноль. ye содержит значение решения в момент времени te. ie содержит индекс, указывающий, какая функция событий была активирована в случае множества функций событий.Пример: Решение уравнения Ван дер Поля
fvdp = @(t,y) [y(2); (1 - y(1)^2) * y(2) - y(1)]; [t,y] = ode45 (fvdp, [0, 20], [2, 0]);
- : [t, y] = ode23 (fun, trange, init) ¶
- : [t, y] = ode23 (fun, trange, init, ode_opt) ¶
- : [t, y, te, ye, ie] = ode23 (…) ¶
- : solution = ode23 (…) ¶
- : ode23 (…) ¶
-
Решает систему нежестких обыкновенных дифференциальных уравнений (ОДУ) с помощью известного явного метода Богацки-Шампина третьего порядка.
fun — это указатель на функцию, встроенная функция или строка, содержащая имя функции, определяющей ОДУ:
y' = f(t,y). Функция должна принимать два входных значения, где первое — время t, а второе — столбец неизвестных y.trange задаёт временной интервал, на котором будет оцениваться ОДУ. Обычно это двухэлементный вектор, задающий начальное и конечное время (
[tinit, tfinal]). Если элементов больше двух, то решение также будет вычислено в эти промежуточные моменты времени.По умолчанию
ode23использует адаптивный шаг времени с алгоритмомintegrate_adaptive. Допуск для вычисления шага времени можно изменить, используя параметры"RelTol"и"AbsTol".init содержит начальное значение для неизвестных. Если это строка, то решение y будет матрицей, в которой каждый столбец — решение для соответствующего начального значения в init.
Необязательный четвёртый аргумент ode_opt задаёт нестандартные параметры для решателя ОДУ. Это структура, сгенерированная
odeset.Функция обычно возвращает два результата. Переменная t — это столбец, содержащий моменты времени, где было найдено решение. Выход y — это матрица, в которой каждый столбец относится к разным неизвестным задачи, а каждая строка соответствует времени в t.
Результат также может быть возвращён в виде структуры solution, имеющей поле x с вектором строк времен, где было вычислено решение, и поле y с матрицей решения, где каждый столбец соответствует времени в x. Используйте
fieldnames (solution)для просмотра других полей и дополнительной информации, возвращаемой функцией.Если не указаны аргументы вывода и в ode_opt не указан
"OutputFcn", то"OutputFcn"устанавливается вodeplot, и результаты работы решателя отображаются сразу.Если используется опция
"Events", то могут быть возвращены три дополнительных результата. te содержит время, когда функция событий вернула ноль. ye содержит значение решения в момент времени te. ie содержит индекс, указывающий, какая функция событий была активирована в случае множества функций событий.Пример: Решение уравнения Ван дер Поля
fvdp = @(t,y) [y(2); (1 - y(1)^2) * y(2) - y(1)]; [t,y] = ode23 (fvdp, [0, 20], [2, 0]);
Ссылка: Для определения этого метода см. https://en.wikipedia.org/wiki/List_of_Runge%E2%80%93Kutta_methods.
- : [t, y] = ode23s (fun, trange, init) ¶
- : [t, y] = ode23s (fun, trange, init, ode_opt) ¶
- : [t, y] = ode23s (…, par1, par2, …) ¶
- : [t, y, te, ye, ie] = ode23s (…) ¶
- : solution = ode23s (…) ¶
-
Решить систему жёстких обыкновенных дифференциальных уравнений (жёстких ОДУ) методом Розенброка порядка (2,3).
fun — это обработчик функций, встроенная функция или строка, содержащая имя функции, которая определяет ОДУ:
M y' = f(t,y). Функция должна принимать два входных параметра, где первый — время t, а второй — столбец неизвестных y. M — постоянная матрица масс, невырожденная и, возможно, разреженная. Установите поле"Mass"в odeopts с помощью odeset, чтобы указать матрицу масс.trange задаёт временной интервал, на котором будет вычисляться ОДУ. Обычно это вектор из двух элементов, задающий начальное и конечное время (
[tinit, tfinal]). Если элементов больше двух, решение также будет вычислено в эти промежуточные моменты времени с использованием процедуры интерполяции того же порядка, что и у решателя.По умолчанию,
ode23sиспользует адаптивный шаг времени с алгоритмомintegrate_adaptive. Допуск для вычисления шага времени можно изменить, используя опции"RelTol"и"AbsTol".init содержит начальное значение для неизвестных. Если это строка, то решение y будет матрицей, в которой каждый столбец является решением для соответствующего начального значения в init.
Необязательный четвёртый аргумент ode_opt задаёт нестандартные опции для решателя ОДУ. Это структура, сгенерированная
odeset.ode23sпроигнорирует следующие опции:"BDF","InitialSlope","MassSingular","MStateDependence","MvPattern","MaxOrder","Non-negative".Функция обычно возвращает два выхода. Переменная t — это столбец, содержащий моменты времени, где было найдено решение. Выход y — это матрица, в которой каждый столбец относится к разным неизвестным задачи, а каждая строка соответствует времени в t. Если trange задаёт промежуточные шаги времени, будут возвращены только они.
Выход также может быть возвращён как структура solution, которая имеет поле x, содержащее строку моментов времени, где было вычислено решение, и поле y, содержащее матрицу решения, так что каждый столбец соответствует времени в x. Используйте
fieldnames (solution)для просмотра других полей и дополнительной информации, возвращаемой функцией.Если используется опция
"Events", то могут быть возвращены три дополнительных выхода. te содержит время, когда функция события вернула ноль. ye содержит значение решения в момент времени te. ie содержит индекс, указывающий, какая функция события была активирована в случае нескольких функций событий.Пример: Решение жёсткого уравнения Ван дер Поля
f = @(t,y) [y(2); 1000*(1 - y(1)^2) * y(2) - y(1)]; opt = odeset ('Mass', [1 0; 0 1], 'MaxStep', 1e-1); [vt, vy] = ode23s (f, [0 2000], [2 0], opt);
- : [t, y] = ode15s (fun, trange, y0) ¶
- : [t, y] = ode15s (fun, trange, y0, ode_opt) ¶
- : [t, y, te, ye, ie] = ode15s (…) ¶
- : solution = ode15s (…) ¶
- : ode15s (…) ¶
-
Решает систему жёстких обыкновенных дифференциальных уравнений (ОДУ) или жёстких полуявных дифференциально-алгебраических уравнений (ДАУ) индекса 1.
ode15sиспользует метод ВФС (обратная формула разложения) с переменным шагом и переменным порядком, который варьируется от 1 до 5.fun — это обработчик функций, встроенная функция или строка, содержащая имя функции, которая определяет ОДУ:
y' = f(t,y). Функция должна принимать два входных параметра, где первый — время t, а второй — столбец неизвестных y.trange задаёт временной интервал, на котором будет вычисляться ОДУ. Обычно это вектор из двух элементов, задающий начальное и конечное время (
[tinit, tfinal]). Если элементов больше двух, решение также будет вычислено в эти промежуточные моменты времени.init содержит начальное значение для неизвестных. Если это строка, то решение y будет матрицей, в которой каждый столбец является решением для соответствующего начального значения в init.
Необязательный четвёртый аргумент ode_opt задаёт нестандартные опции для решателя ОДУ. Это структура, сгенерированная
odeset.Функция обычно возвращает два выхода. Переменная t — это столбец, содержащий моменты времени, где было найдено решение. Выход y — это матрица, в которой каждый столбец относится к разным неизвестным задачи, а каждая строка соответствует времени в t.
Выход также может быть возвращён как структура solution, которая имеет поле x, содержащее строку моментов времени, где было вычислено решение, и поле y, содержащее матрицу решения, так что каждый столбец соответствует времени в x. Используйте
fieldnames (solution)для просмотра других полей и дополнительной информации, возвращаемой функцией.Если аргументы выхода не запрошены и
"OutputFcn"не указано в ode_opt, то"OutputFcn"устанавливается вodeplotи результаты решателя отображаются сразу.Если используется опция
"Events", то могут быть возвращены три дополнительных выхода. te содержит время, когда функция события вернула ноль. ye содержит значение решения в момент времени te. ie содержит индекс, указывающий, какая функция события была активирована в случае нескольких функций событий.Пример: Решение уравнений Робертсона:
function r = robertson_dae (t, y) r = [ -0.04*y(1) + 1e4*y(2)*y(3) 0.04*y(1) - 1e4*y(2)*y(3) - 3e7*y(2)^2 y(1) + y(2) + y(3) - 1 ]; endfunction opt = odeset ("Mass", [1 0 0; 0 1 0; 0 0 0], "MStateDependence", "none"); [t,y] = ode15s (@robertson_dae, [0, 1e3], [1; 0; 0], opt);
- : [t, y] = ode15i (fun, trange, y0, yp0) ¶
- : [t, y] = ode15i (fun, trange, y0, yp0, ode_opt) ¶
- : [t, y, te, ye, ie] = ode15i (…) ¶
- : solution = ode15i (…) ¶
- : ode15i (…) ¶
-
Решить систему полностью неявных обыкновенных дифференциальных уравнений (ОДУ) или дифференциально-алгебраических уравнений (ДАУ) первого порядка.
ode15iиспользует метод переменного шага и переменного порядка BDF (формула обратного дифференцирования), который изменяется от порядка 1 до 5.fun — это дескриптор функции, встроенная функция или строка, содержащая имя функции, определяющей ОДУ:
0 = f(t,y,yp). Функция должна принимать три входных параметра: первый — время t, второй — значение функции y (вектор-столбец), а третий — значение производной yp (вектор-столбец).trange задаёт временной интервал, на котором будут вычисляться ОДУ. Как правило, это вектор из двух элементов, задающий начальное и конечное время (
[tinit, tfinal]). Если элементов больше двух, то решение также будет вычислено в эти промежуточные временные моменты.y0 и yp0 содержат начальные значения для неизвестных y и yp. Если это векторы-строки, то решение y будет матрицей, в которой каждый столбец — решение для соответствующего начального значения в y0 и yp0.
y0 и yp0 должны быть согласованными начальными условиями, то есть
f(t,y0,yp0) = 0выполняется. Функцияdecicможет быть использована для вычисления согласованных начальных условий на основе начальных предположений.Необязательный пятый аргумент ode_opt задаёт параметры решения ОДУ, отличные от стандартных. Это структура, созданная функцией
odeset.Функция обычно возвращает два выходных значения. Переменная t — это вектор-столбец, содержащий моменты времени, где было найдено решение. Выходное значение y — это матрица, в которой каждый столбец относится к различной неизвестной задачи, а каждая строка соответствует времени в t.
Результат также может быть возвращён как структура solution, которая имеет поле x, содержащее вектор-строку времен, где было вычислено решение, и поле y, содержащее матрицу решения, при которой каждый столбец соответствует времени в x. Используйте
fieldnames (solution)для просмотра других полей и дополнительной информации, возвращаемой функцией.Если не указаны выходные аргументы и в ode_opt не задан
"OutputFcn", то"OutputFcn"устанавливается наodeplot, и результаты работы решателя отображаются немедленно.Если используется
"Events"опция, то могут быть возвращены три дополнительных выходных значения. te содержит время, когда функция события вернула ноль. ye содержит значение решения в момент времени te. ie содержит индекс, указывающий, какая функция события была активирована в случае нескольких функций событий.Пример: Решить уравнения Робертсона:
function r = robertson_dae (t, y, yp) r = [ -(yp(1) + 0.04*y(1) - 1e4*y(2)*y(3)) -(yp(2) - 0.04*y(1) + 1e4*y(2)*y(3) + 3e7*y(2)^2) y(1) + y(2) + y(3) - 1 ]; endfunction [t,y] = ode15i (@robertson_dae, [0, 1e3], [1; 0; 0], [-1e-4; 1e-4; 0]);
- : [y0_new, yp0_new] = decic (fun, t0, y0, fixed_y0, yp0, fixed_yp0) ¶
- : [y0_new, yp0_new] = decic (fun, t0, y0, fixed_y0, yp0, fixed_yp0, options) ¶
- : [y0_new, yp0_new, resnorm] = decic (…) ¶
-
Вычислить согласованные начальные условия неявных ОДУ y0_new и yp0_new на основе начальных предположений y0 и yp0.
Максимум
length (y0)компонентов между fixed_y0 и fixed_yp0 может быть выбран в качестве фиксированных значений.fun — это дескриптор функции. Функция должна принимать три входных значения: первое — время t, второе — вектор-столбец неизвестных y, а третье — вектор-столбец неизвестных yp.
t0 — начальное время, такое что
fun(t0, y0_new, yp0_new) = 0, задаётся как скаляр.y0 — вектор, используемый в качестве начального предположения для y.
fixed_y0 — вектор, который задаёт компоненты y0, которые должны оставаться неизменными. Выберите максимум
length (y0)компонентов между fixed_y0 и fixed_yp0 в качестве фиксированных значений. Установите компонент fixed_y0(i) равным 1, если вы хотите зафиксировать значение y0(i). Установите компонент fixed_y0(i) равным 0, если вы хотите позволить значению y0(i) меняться.yp0 — вектор, используемый в качестве начального предположения для yp.
fixed_yp0 — вектор, который задаёт компоненты yp0, которые должны оставаться неизменными. Выберите максимум
length (yp0)компонентов между fixed_y0 и fixed_yp0 в качестве фиксированных значений. Установите компонент fixed_yp0(i) равным 1, если вы хотите зафиксировать значение yp0(i). Установите компонент fixed_yp0(i) равным 0, если вы хотите позволить значению yp0(i) меняться.Необязательный седьмой аргумент options — это массив структур. Используйте
odesetдля создания этой структуры. Соответствующие опции —RelTolиAbsTol, которые задают пороги ошибок, используемые для вычисления начальных условий.Функция обычно возвращает два выходных значения. Переменная y0_new — это вектор-столбец, содержащий согласованное начальное значение y. Выходное значение yp0_new — это вектор-столбец, содержащий согласованное начальное значение yp.
Необязательное третье выходное значение resnorm — это норма вектора остатков. Если resnorm мало,
decicуспешно вычислил начальные условия. Если значение resnorm велико, используйтеRelTolиAbsTolдля его корректировки.Пример: Вычислить начальные условия для уравнений Робертсона:
function r = robertson_dae (t, y, yp) r = [ -(yp(1) + 0.04*y(1) - 1e4*y(2)*y(3)) -(yp(2) - 0.04*y(1) + 1e4*y(2)*y(3) + 3e7*y(2)^2) y(1) + y(2) + y(3) - 1 ]; endfunction [y0_new,yp0_new] = decic (@robertson_dae, 0, [1; 0; 0], [1; 1; 0], [-1e-4; 1; 0], [0; 0; 0]);
- : odestruct = odeset () ¶
- : odestruct = odeset ("field1", value1, "field2", value2, …) ¶
- : odestruct = odeset (oldstruct, "field1", value1, "field2", value2, …) ¶
- : odestruct = odeset (oldstruct, newstruct) ¶
- : odeset () ¶
-
Создать или изменить структуру параметров ODE.
При вызове без входных аргументов и с одним выходным аргументом возвращает новую структуру параметров ODE, содержащую все возможные поля, инициализированные их значениями по умолчанию. Если выходной аргумент не требуется, отображается список общих параметров решателя ODE вместе с их значениями по умолчанию.
Если вызывается с парами входных аргументов имя-значение "field1", "value1", "field2", "value2", …, возвращает новую структуру параметров ODE со всеми наиболее распространёнными полями параметров, и устанавливает значения полей "field1", "field2", … на значения value1, value2, ….
Если вызывается со входной структурой oldstruct, то переопределяет значения параметров "field1", "field2", … новыми значениями value1, value2, … и возвращает изменённую структуру.
При вызове с двумя входными структурами параметров ODE oldstruct и newstruct переопределяет все значения из структуры oldstruct новыми значениями из структуры newstruct. Пустые значения в newstruct не переопределяют значения в oldstruct.
Наиболее часто используемые параметры ODE, которые всегда получают значение с помощью
odeset, следующие:AbsTol: положительное скалярное | векторное значение, по умолчанию1e-6-
Абсолютная погрешность.
BDF: {"off"} |"on"-
Использовать формулы BDF в неявных методах многошаговой итерации. Примечание: Этот параметр пока не реализован.
Events: function_handle-
Функция события. Функция события должна иметь вид
[value, isterminal, direction] = my_events_f (t, y) InitialSlope: вектор-
Согласованный начальный вектор наклона для решателей ДУ.
InitialStep: положительное скалярное значение-
Начальный размер шага.
Jacobian: матрица | function_handle-
Матрица Якоби, заданная как постоянная матрица или как функция времени и состояния.
JConstant: {"off"} |"on"-
Указать, является ли матрица Якоби постоянной матрицей или зависит от состояния.
JPattern: разреженная матрица-
Если матрица Якоби разреженная и не постоянная, но сохраняет постоянную структуру разреженности, задайте структуру разреженности.
Mass: матрица | function_handle-
Матрица масс, заданная как постоянная матрица или как функция времени и состояния.
MassSingular: {"maybe"} |"yes"|"on"-
Указать, является ли матрица масс сингулярной.
MaxOrder: {5} |4|3|2|1-
Максимальный порядок формулы.
MaxStep: положительное скалярное значение-
Максимальное значение шага по времени.
MStateDependence: {"weak"} |"none"|"strong"-
Указать, зависит ли матрица масс от состояния или только от времени.
MvPattern: разреженная матрица-
Если матрица масс разреженная и не постоянная, но сохраняет постоянную структуру разреженности, задайте структуру разреженности. Примечание: Этот параметр пока не реализован.
NonNegative: скаляр | вектор-
Указать элементы вектора состояния, которые, как ожидается, останутся неотрицательными во время моделирования.
NormControl: {"off"} |"on"-
Управление относительной погрешностью по отношению к 2-норме решения, а не к его абсолютному значению.
OutputFcn: function_handle-
Функция мониторинга состояния во время моделирования. Формат функции см. в
odeplot. OutputSel: скаляр | вектор-
Индексы элементов вектора состояния, которые должны передаваться в функцию мониторинга вывода.
Refine: положительное скалярное значение-
Укажите, должен ли вывод возвращаться только в конце каждого шага по времени или также в промежуточные моменты времени. Значение должно быть скаляром, указывающим количество равномерно распределённых точек времени, которые следует использовать в каждом шаге по времени, чтобы вернуть вывод. Примечание: Этот параметр пока не реализован.
RelTol: положительное скалярное значение-
Относительная погрешность.
Stats: {"off"} |"on"-
Печать статистики решателя после моделирования.
Vectorized: {"off"} |"on"-
Укажите, можно ли передавать
odefunсразу несколько значений состояния.
Имена полей, которые не находятся в вышеперечисленном списке, также принимаются и добавляются в результирующую структуру.
См. также: odeget.
- : val = odeget (ode_opt, field) ¶
- : val = odeget (ode_opt, field, default) ¶
-
Запрос значения свойства field в структуре параметров ODE ode_opt.
Если вызывается с двумя входными аргументами и первый входной аргумент ode_opt — структура параметров ODE, а второй входной аргумент field — строка, определяющая имя параметра, то возвращает значение параметра val, соответствующее field из ode_opt.
Если вызывается с необязательным третьим входным аргументом и field не задано в структуре ode_opt, то вместо этого возвращается значение по умолчанию default.
См. также: odeset.
- : stop_solve = odeplot (t, y, flag) ¶
-
Открывает новое окно фигуры и строит график решения задачи ODE на каждом шаге по времени во время интегрирования.
Типы и значения входных параметров t и y зависят от входного параметра flag, который имеет тип строка. Допустимые значения flag:
"init"-
Входной t должен быть столбцовым вектором длиной 2 с первым и последним шагом по времени (
[tfirst tlast]. Входной y содержит начальные условия для задачи ODE (y0). ""-
Входной t должен быть скалярным значением типа double, определяющим время, для которого было вычислено решение в входном y.
"done"Входные данные должны быть пустыми, но игнорируются, если они присутствуют.
odeplotвсегда возвращает false, т.е. не останавливает решатель ODE.Пример: решение анонимной реализации уравнения
"Van der Pol"и отображение результатов во время решения.fvdp = @(t,y) [y(2); (1 - y(1)^2) * y(2) - y(1)]; opt = odeset ("OutputFcn", @odeplot, "RelTol", 1e-6); sol = ode45 (fvdp, [0 20], [2 0], opt);Справочная информация: Эта функция вызывается функцией решателя ODE, если она была указана в свойстве
"OutputFcn"структуры параметров, созданной с помощьюodeset. Решатель ODE сначала вызовет функцию с синтаксисомodeplot ([tfirst, tlast], y0, "init"). Функция инициализирует внутренние переменные, создаёт новое окно фигуры и устанавливает пределы оси x графика. Далее, на каждом шаге по времени во время интегрирования решатель ODE вызываетodeplot (t, y, []). В конце решения решатель ODE вызываетodeplot ([], [], "done"), чтобы odeplot смог выполнить необходимые действия по очистке.
© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v7.2.0/Matlab_002dcompatible-solvers.html