программа решения обыкновенных дифференциальных уравнений с поиском корней
[y, rd, w, iw] = ode("root", y0, t0, t [,rtol [,atol]], f [,jac], ng, g [,w, iw])
вектор или матрица вещественных значений (начальные условия).
вещественный скаляр (начальное время).
вектор вещественных значений (моменты времени, для которых вычисляется решение).
внешняя функция, символьная строка или список.
вещественные константы или векторы того же размера, что и y
.
внешняя функция, символьная строка или список.
целое число.
внешняя функция, символьная строка или список.
вещественный вектор или матрица (ВЫХОДНАЯ).
вещественный вектор (ВЫХОДНОЙ).
векторы вещественных значений. See ode() optional output
С таким синтаксисом (первый аргумент равен "root"
) ode
вычисляет решение дифференциального уравнения dy/dt=f(t,y)
до тех пор, пока состояние y(t)
не пересечёт поверхность g(t,y)=0
.
g
должно задавать уравнение поверхности. Это внешняя функция, то есть функция с определённым синтаксисом или имя процедуры Fortran или функции C (символьная строка) с определённой последовательностью вызова или список.
Если g
является функцией, то её синтаксис должен быть следующим:
z = g(t,y)
где t
-- вещественный скаляр (время) и y
-- вещественный вектор (состояние). Она возвращает вектор размером ng
, который соответствует ng
ограничениям. Если g
-- символьная строка, то она ссылается на имя процедуры Fortran или функции C со следующей последовательностью вызова: g(n,t,y,ng,gout)
, где ng
-- количество ограничений, а gout
-- значение g
(на выходе программы). Если g
является списком, то применяются те же договорённости, что и для f
(см. справку ode).
Выходное значение rd
-- это вектор размером 1 x k
.
Первый элемент хранит время остановки. Остальные элементы указывают какие элементы g
сменили знак. k
больше 2 указывает, что одновременно было пересечено более одной поверхности ((k-1)
поверхностей).
Другие аргументы и другие опции те же самые, что и для ode
, см. справку по ode.