Я пробовал пример динамической системы c с одним танком, определенной ODE:
- , где 'h' - высота резервуара (переменная Dynami c)
- 'theta' - скорость потока на входе (параметр)
- 'kt' - постоянная величина (параметр)
- 't' - область времени (1-800)
Как отобразить совместный вывод в терминах 'h'?
#Single tank dynamic system discretization through OCFE
from pyomo.environ import*
from pyomo.dae import*
from pyomo.opt import SolverFactory
m = ConcreteModel()
#Parameters
kt=0.3
theta=0.5
A=5
#Variables declaration
m.t=ContinuousSet(bounds=(1,800))
m.h=Var(m.t, bounds =(1,10))
#m.h[t]=Var(initialize = 1.0, within=PositiveReals)
#Derivative declaration
m.dhdt = DerivativeVar(m.h, wrt=m.t)
#Discretize with OCFE
discretizer = TransformationFactory('dae.collocation')
discretizer.apply_to(m, nfe=20, ncp=3, scheme='LAGRANGE-RADAU')
#Constraints (ODE)
def _ode_rule(m,t):
if t== m.t.first():
return Constraint.Skip
return A**m.dhdt[t]==theta-kt**sqrt(m.h[t])
m.ode=Constraint(m.t, rule=_ode_rule)
#Solve discretized model
solver=SolverFactory('ipopt')
#Output
m.h.pprint()