24.3 Решатели, совместимые с Matlab
Octave также предоставляет набор решателей для задач с начальными условиями для обыкновенных дифференциальных уравнений (ОДУ), имеющих интерфейс, совместимый с MATLAB. Параметры этого класса методов задаются с помощью функций.
В настоящее время реализованы следующие решатели:
- Методы Рунге — Кутты
-
ode45 интегрирует систему нежёстких ОДУ или дифференциально-алгебраических уравнений (ДАУ) индекса 1 с помощью метода Дормана — Принса высокого порядка с переменным шагом. Для каждого шага интегрирования требуется шесть вычислений функции, однако на гладких задачах метод может использовать более крупные шаги, чем
ode23, что потенциально повышает эффективность при меньших допусках. - ode23 интегрирует систему нежёстких ОДУ или (или ДАУ индекса 1). Он использует метод Богакки — Шампина третьего порядка и адаптирует локальный шаг, чтобы удовлетворить заданный пользователем допуск. Для каждого шага интегрирования решателю требуются три вычисления функции.
- ode23s интегрирует систему жёстких ОДУ (или ДАУ индекса 1) с помощью модифицированного метода Розенброка второго порядка.
-
ode45 интегрирует систему нежёстких ОДУ или дифференциально-алгебраических уравнений (ДАУ) индекса 1 с помощью метода Дормана — Принса высокого порядка с переменным шагом. Для каждого шага интегрирования требуется шесть вычислений функции, однако на гладких задачах метод может использовать более крупные шаги, чем
- Линейные многошаговые методы
- ode15s интегрирует систему жёстких ОДУ (или ДАУ индекса 1) с помощью метода с переменным шагом и переменным порядком, основанного на формулах обратного дифференцирования (BDF).
-
ode15i интегрирует систему полностью неявных ОДУ (или ДАУ индекса 1) с помощью того же метода с переменным шагом и переменным порядком, что и
ode15s. Функцию decic можно использовать для вычисления согласованных начальных условий дляode15i.
Подробные сведения о решателях приведены в статье L. F. Shampine и M. W. Reichelt, Комплект ОДУ MATLAB, SIAM Journal on Scientific Computing, т. 18, 1997, с. 1–22, DOI: https://doi.org/10.1137/S1064827594276424.
-
:
[t, y] =ode45(fcn, trange, init) -
:
[t, y] =ode45(fcn, trange, init, ode_opt) -
:
[t, y, te, ye, ie] =ode45(…) -
:
solution =ode45(…) -
: ode45
(…) -
Решает систему нежёстких обыкновенных дифференциальных уравнений (нежёстких ОДУ) с помощью широко известного явного метода Дормана — Принса 4-го порядка.
fcn — дескриптор функции, встроенная функция или строка с именем функции, задающей ОДУ:
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(fcn, trange, init) -
:
[t, y] =ode23(fcn, trange, init, ode_opt) -
:
[t, y, te, ye, ie] =ode23(…) -
:
solution =ode23(…) -
: ode23
(…) -
Решает систему нежёстких обыкновенных дифференциальных уравнений (нежёстких ОДУ) с помощью широко известного явного метода Богакки — Шампина 3-го порядка.
fcn — дескриптор функции, встроенная функция или строка с именем функции, задающей ОДУ:
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(fcn, trange, init) -
:
[t, y] =ode23s(fcn, trange, init, ode_opt) -
:
[t, y] =ode23s(…, par1, par2, …) -
:
[t, y, te, ye, ie] =ode23s(…) -
:
solution =ode23s(…) -
Решает систему жёстких обыкновенных дифференциальных уравнений (жёстких ОДУ) с помощью метода Розенброка порядка (2,3).
fcn — дескриптор функции, встроенная функция или строка с именем функции, задающей ОДУ:
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(fcn, trange, y0) -
:
[t, y] =ode15s(fcn, trange, y0, ode_opt) -
:
[t, y, te, ye, ie] =ode15s(…) -
:
solution =ode15s(…) -
: ode15s
(…) -
Решает систему жёстких обыкновенных дифференциальных уравнений (ОДУ) или жёстких полуявных дифференциально-алгебраических уравнений (ДАУ) индекса 1.
ode15sиспользует метод BDF (формулы обратного дифференцирования) с переменным шагом и переменным порядком от 1 до 5.fcn — дескриптор функции, встроенная функция или строка с именем функции, задающей ОДУ:
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(fcn, trange, y0, yp0) -
:
[t, y] =ode15i(fcn, trange, y0, yp0, ode_opt) -
:
[t, y, te, ye, ie] =ode15i(…) -
:
solution =ode15i(…) -
: ode15i
(…) -
Решает систему полностью неявных обыкновенных дифференциальных уравнений (ОДУ) или дифференциально-алгебраических уравнений (ДАУ) индекса 1.
ode15iиспользует метод BDF (формулы обратного дифференцирования) с переменным шагом и переменным порядком от 1 до 5.fcn — дескриптор функции, встроенная функция или строка с именем функции, задающей ОДУ:
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(fcn, t0, y0, fixed_y0, yp0, fixed_yp0) -
:
[y0_new, yp0_new] =decic(fcn, 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.fcn — дескриптор функции. Функция должна принимать три аргумента: первый — время t, второй — вектор-столбец неизвестных y, третий — вектор-столбец неизвестных yp.
t0 — начальное время, такое что
fcn(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: вектор -
Вектор согласованных начальных производных для решателей DAE.
-
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" -
Указать, можно ли передавать
odefcnнесколько значений состояния за один раз.
Также принимаются имена полей, отсутствующие в приведённом выше списке; они добавляются в результирующую структуру.
См. также: odeget.
-
-
:
val =odeget(ode_opt, field) -
:
val =odeget(ode_opt, field, default) -
Запросить значение свойства field в структуре параметров ОДУ ode_opt.
При вызове с двумя входными аргументами, если первый входной аргумент ode_opt является структурой параметров ОДУ, а второй входной аргумент field — строкой с именем параметра, возвращает соответствующее полю field значение параметра val из 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 должен быть скаляром типа double или вектором, задающим моменты времени, для которых было вычислено решение во входном параметре 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"). Функция инициализирует внутренние переменные, создаёт новое окно рисунка и задаёт пределы оси x графика. Затем на каждом шаге интегрирования решатель ОДУ вызываетodeplot (t, y, []). По завершении вычисления решения решатель ОДУ вызываетodeplot ([], [], "done"), чтобы odeplot могла выполнить необходимые действия очистки.
© 1996–2026 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/v9.4.0/Matlab_002dcompatible-solvers.html