Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語 -
Справка Scilab >> Дифференциальное счисление, интегрирование > ode_roots

ode_roots

программа решения обыкновенных дифференциальных уравнений с поиском корней

Синтаксис

[y, rd, w, iw] = ode("roots", 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

Описание

С таким синтаксисом (первый аргумент равен "roots") 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("roots",y0,0,2,f,ng,g)

deff("[z]=g(t,y)","z=y-[2;2;33]")
[y,rd]=ode("roots",1,0,2,f,3,g)

Смотрите также

  • ode — программа решения обыкновенных дифференциальных уравнений
  • ode_optional_output — описание необязательных выходных данных программы решения ОДУ
  • ode_discrete — программа решения обыкновенных дифференциальных уравнений, моделирование дискретного времени
  • dasrt — программа решения дифференциально-алгебраических уравнений (ДАУ) с пересечением нуля
  • daskr — DAE solver with zero crossing
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Feb 14 15:13:21 CET 2017