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 >> |