Отображение динамической c индексированной переменной после дискретизации через коллокацию - PullRequest
0 голосов
/ 27 февраля 2020

Я пробовал пример динамической системы 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()
...