ode_root
программа решения обыкновенных дифференциальных уравнений с поиском корней
Синтаксис
[y, rd, w, iw] = ode("root", y0, t0, t [,rtol [,atol]], f [,jac], ng, g [,w, iw])
Аргументы
- y0
вектор или матрица вещественных значений (начальные условия).
- t0
вещественный скаляр (начальное время).
- t
вектор вещественных значений (моменты времени, для которых вычисляется решение).
- f
внешняя функция, символьная строка или список.
- rtol, atol
вещественные константы или векторы того же размера, что и
y
.- jac
внешняя функция, символьная строка или список.
- ng
целое число.
- g
внешняя функция, символьная строка или список.
- y
вещественный вектор или матрица (ВЫХОДНАЯ).
- rd
вещественный вектор (ВЫХОДНОЙ).
- w, iw
векторы вещественных значений. 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.
Примеры
// Интегрирование дифференциального уравнения // dy/dt=y , y(0)=1, и поиск такого минимального времени t, что y(t)=2 deff("ydot = f(t,y)", "ydot = y") deff("z = g(t,y)", "z = y-2") y0 = 1; ng = 1; [y, rd] = ode("root", y0, 0, 2, f, ng, g) deff("z = g(t,y)", "z = y-[2;2;33]") [y, rd] = ode("root", 1, 0, 2, f, 3, g)
Смотрите также
- ode — программа решения обыкновенных дифференциальных уравнений
- ode_optional_output — описание необязательных выходных данных программы решения ОДУ
- ode_discrete — программа решения обыкновенных дифференциальных уравнений, моделирование дискретного времени
- dasrt — программа решения дифференциально-алгебраических уравнений (ДАУ) с пересечением нуля
- daskr — DAE solver with zero crossing
Report an issue | ||
<< ode_optional_output | Дифференциальное счисление, интегрирование | odedc >> |