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