我正在尝试使用pyomo解决一个DAE系统。 这是一个玩具的例子
from pyomo.environ import *
from pyomo.dae import *
m = ConcreteModel()
m.r = ContinuousSet(bounds = (0., 1.))
m.t = ContinuousSet(bounds = (0., 5.))
m.c = Var(m.r, m.t)
m.dcdt = DerivativeVar(m.c, wrt = m.t)
discretizer = TransformationFactory('dae.finite_difference')
discretizer.apply_to(m, nfe=20, wrt = m.r, scheme = 'BACKWARD')
# setting initial conditions
m.c[:, 0].fix(5)
def _dae_rule(m, r, t):
return 0 == - m.c[r, t] - m.dcdt[r, t] # note that rewriting to ODE is not desired
m.ode = Constraint(m.r, m.t, rule = _dae_rule)
sim = Simulator(m, package = "casadi")
tsim, profiles = sim.simulate(numpoints=100, integrator="idas")
不幸的是,执行会导致错误消息
DAE_Error: Currently the simulator may only be applied to Pyomo models with a single ContinuousSet
怎么会这样?只有m.t
是连续集
手动删除ContinuousSet,而不是首先使用DiscreteSet会生成错误消息
DAE_Error: Cannot simulate a differential equation with multiple DerivativeVars
我不明白。每个方程只依赖于它自己的导数
另外,如果我也要离散化m.t
,那么我可以使用任何可能有效的替代解算器吗
非常感谢:)
根据Simulator上的文档,它只支持具有1个连续集的模型,并且您有m.r和m.t。也许您可以将DAE系统定义为t的函数,离散值为r,反之亦然
相关问题 更多 >
编程相关推荐