24.3 Решатели, совместимые с Matlab
Octave также предоставляет набор решателей для задач Коши обыкновенных дифференциальных уравнений (ОДУ), имеющих интерфейс, совместимый с MATLAB. Параметры для этого класса методов устанавливаются с помощью функций.
В настоящее время реализованы следующие решатели:
- Методы Рунге-Кутты
- ode45 интегрирует систему нежестких ОДУ или дифференциально-алгебраических уравнений (ДАУ) первого порядка, используя метод Дорманда-Принса переменного шага высокого порядка. Он требует шести вычислений функции за один шаг интегрирования, но может делать более крупные шаги на гладких задачах, чем
ode23: потенциально обеспечивая улучшенную эффективность при меньших допусках. - ode23 интегрирует систему нежестких ОДУ или (или ДАУ первого порядка). Он использует метод Богацки-Шампина третьего порядка и адаптирует локальный шаг для удовлетворения заданного пользователем допуска. Решатель требует трех вычислений функции за один шаг интегрирования.
- ode23s интегрирует систему жестких ОДУ (или ДАУ первого порядка) с использованием модифицированного метода Розенброка второго порядка.
- ode45 интегрирует систему нежестких ОДУ или дифференциально-алгебраических уравнений (ДАУ) первого порядка, используя метод Дорманда-Принса переменного шага высокого порядка. Он требует шести вычислений функции за один шаг интегрирования, но может делать более крупные шаги на гладких задачах, чем
- Методы линейной многошаговой интегрирования
- ode15s интегрирует систему жестких ОДУ (или ДАУ первого порядка) с использованием метода переменного шага и переменного порядка, основанного на формулах обратных разностных отношений (BDF).
- ode15i интегрирует систему полностью неявных ОДУ (или ДАУ первого порядка) с использованием того же метода переменного шага и переменного порядка, что и
ode15s. decic может быть использован для вычисления согласованных начальных условий дляode15i.
Подробная информация о решателях приводится в работе Л. Ф. Шампина и М. В. Рейхельта, The 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 (…)
-
Решает систему нежестких обыкновенных дифференциальных уравнений (ОДУ) с помощью известного явного метода Дорманда-Принса 4-го порядка.
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)для просмотра других полей и дополнительной информации, возвращаемой функцией.Если не указаны выходные аргументы и нет
"OutputFcn"в ode_opt, то"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 (…)
-
Решает систему нежестких обыкновенных дифференциальных уравнений (ОДУ) с помощью известного явного метода Богацки-Шампина 3-го порядка.
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)для просмотра других полей и дополнительной информации, возвращаемой функцией.Если не указаны выходные аргументы и нет
"OutputFcn"в ode_opt, то"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)для просмотра других полей и дополнительной информации, возвращаемой функцией.Если аргументы вывода не затребованы и в ode_opt не указан
"OutputFcn", то"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 (…)
-
Решить систему полностью неявных обыкновенных дифференциальных уравнений (ОДУ) или дифференциально-алгебраических уравнений (ДАУ) индекса 1.
ode15iиспользует метод ВДФ (обратной разностной формулы) с переменным шагом и порядком, который варьируется от 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 ()
-
Создать или изменить структуру параметров ОДУ.
При вызове без входных аргументов и с одним выходным аргументом вернуть новую структуру параметров ОДУ, содержащую все возможные поля, инициализированные их значениями по умолчанию. Если выходной аргумент не запрашивается, отобразить список общих параметров решателя ОДУ вместе с их значениями по умолчанию.
При вызове с парами имя-значение "field1", "value1", "field2", "value2", … вернуть новую структуру параметров ОДУ со всеми общими полями параметров, инициализированными, и установить значения полей "field1", "field2", … на значения value1, value2, ….
При вызове со структурой ввода oldstruct перезаписать значения параметров "field1", "field2", … новыми значениями value1, value2, … и вернуть изменённую структуру.
При вызове с двумя структурами параметров ОДУ oldstruct и newstruct перезаписать все значения из структуры oldstruct новыми значениями из структуры newstruct. Пустые значения в newstruct не перезапишут значения в oldstruct.
Наиболее часто используемые параметры ОДУ, которым всегда присваивается значение
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_opt.
При вызове с двумя входными аргументами и первым входным аргументом ode_opt — структурой параметров ОДУ и вторым входным аргументом field — строкой, задающей имя параметра, вернуть значение параметра val, соответствующее field из ode_opt.
При вызове с необязательным третьим входным аргументом и если field не установлен в структуре ode_opt, вернуть значение по умолчанию default вместо этого.
См. также: odeset.
- : stop_solve = odeplot (t, y, flag)
-
Открыть новое окно фигуры и построить решение задачи КЭ при каждом шаге интегрирования.
Типы и значения входных параметров t и y зависят от входного параметра flag, который имеет тип строка. Допустимые значения flag:
"init"-
Входной параметр t должен быть столбцом длиной 2 с начальным и конечным шагом времени (
[tfirst tlast]. Входной параметр y содержит начальные условия для задачи КЭ (y0). ""-
Входной параметр t должен быть скалярным двойным значением, определяющим время, для которого было вычислено решение в входном параметре y.
"done"Входы должны быть пустыми, но игнорируются, если они присутствуют.
odeplotвсегда возвращает false, т.е. не останавливает решатель КЭ.Пример: решить анонимную реализацию уравнения
"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);Справочная информация: Эта функция вызывается функцией решателя КЭ, если она была указана в свойстве
"OutputFcn"структуры опций, созданной с помощьюodeset. Решатель КЭ первоначально вызовет функцию со синтаксисомodeplot ([tfirst, tlast], y0, "init"). Функция инициализирует внутренние переменные, создает новое окно фигуры и устанавливает пределы оси х графика. Впоследствии, на каждом шаге интегрирования, решатель КЭ вызываетodeplot (t, y, []). По окончании решения решатель КЭ вызывает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/v6.4.0/Matlab_002dcompatible-solvers.html