impl
дифференциальное алгебраическое уравнение
Синтаксис
y = impl([type],y0,ydot0,t0,t [,atol, [rtol]],res,adda [,jac])
Аргументы
- y0, ydot0
вещественные векторы или матрицы (начальные условия)
- t0
вещественный скаляр (начальное время)
- t
вещественный вектор (моменты времени, в которые вычисляется решение)
- res, adda
внешние (функция или символьная строка или спискок)
- type
строка
'adams'
или'stiff'
- atol, rtol
вещественный скаляр или вещественный вектор того же размера что и
y
- jac
внешние (функция или символьная строка или спискок)
Описание
Решение линейного неявного дифференциального уравнения
A(t,y) dy/dt=g(t,y), y(t0)=y0
t0
-- начальный момент времени, y0
--
вектор исходных условий. Должен быть задан вектор ydot0
-- производная y
по времени
в момент времени t0
. Входное значение res
является внешним,
т.е. функцией с особым синтаксисом или именем процедуры Fortran или функцией C (символьная строка) с определённой
последовательностью вызова или списком.
Если res
является функцией, у неё должен быть следующий синтаксис:
r = res(t,y,ydot)
где t
-- вещественный скаляр (время), а y
и ydot
являются вещественными векторами (состояние и производная состояния). Эта функция должна возвращать
r=g(t,y)-A(t,y)*ydot
.
Если res
-- символьная строка, то она ссылается на имя процедуры Fortran или функции C.
В качестве примера как это сделать смотрите SCI/modules/differential_equations/sci_gateway/fortran/Ex-impl.f
.
res
может быть также списком: см. помощь по ode.
Входное значение adda
также является внешним.
Если adda
-- функция, то у неё должен быть следующий синтаксис:
r = adda(t,y,p)
и она должна возвращать r=A(t,y)+p
, где p
-- матрица, которую прибавляют к
A(t,y)
.
Если adda
является символьной строкой, то она ссылается на имя процедуры Fortran или функции C.
В качестве примера как это сделать смотрите SCI/modules/differential_equations/sci_gateway/fortran/Ex-impl.f
.
adda
может также быть списком: см. помощь по ode.
Входное значение jac
также является внешним.
Если jac
-- функция, то у неё должен быть следующий синтаксис:
j = jac(t,y,ydot)
и она должна возвращать якобиан r=g(t,y)-A(t,y)*ydot
относительно
y
.
Если jac
-- символьная строка, то она ссылается на процедуру Fortran или функцию C.
В качестве примера как это сделать смотрите SCI/modules/differential_equations/sci_gateway/fortran/Ex-impl.f
.
jac
может быть также списком: см. помощь по ode.
Примеры
y = impl([1;0;0],[-0.04;0.04;0],0,0.4,'resid','aplusp'); // Используем перезапуск налету //[x1,w,iw] = impl([1;0;0],[-0.04;0.04;0],0,0.2,'resid','aplusp'); // запуск налету из предыдущего вызова //x1 = impl([1;0;0],[-0.04;0.04;0],0.2,0.4,'resid','aplusp',w,iw); //max(abs(x1-x))
Смотрите также
- dassl — дифференциальное алгебраическое уравнение
- ode — программа решения обыкновенных дифференциальных уравнений
- внешняя функция — объект Scilab'а, внешняя функция или подпрограмма
Report an issue | ||
<< diff | Дифференциальное счисление, интегрирование | int2d >> |