Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2023.1.0 - Русский


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

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon May 22 12:41:12 CEST 2023