Python 3.x 微分方程组中的条件分段函数

Python 3.x 微分方程组中的条件分段函数,python-3.x,ode,piecewise,gekko,Python 3.x,Ode,Piecewise,Gekko,我试图实现一个模型,我有这个条件分段函数,作为模型的一部分 其中T_区(=293)和T_in(=348)是先前定义的常数,x2和x5是依赖于依赖于T_in和T_out的其他方程的变量 它们都定义了初始值 温度\u区=293.0 T_in=m.Var(值=温度区) T_区=m.Var(值=温度_区) x2=m.Var(值=温度区) x5=m.Var(值=温度区) Tout=m.Var(值=温度区) Tp1out=m.Var(值=温度区) m1out=m.if3(((2.0*(x2))-T_-

我试图实现一个模型,我有这个条件分段函数,作为模型的一部分


其中T_区(=293)和T_in(=348)是先前定义的常数,x2和x5是依赖于依赖于T_in和T_out的其他方程的变量

它们都定义了初始值


温度\u区=293.0
T_in=m.Var(值=温度区)
T_区=m.Var(值=温度_区)
x2=m.Var(值=温度区)
x5=m.Var(值=温度区)
Tout=m.Var(值=温度区)
Tp1out=m.Var(值=温度区)
m1out=m.if3(((2.0*(x2))-T_-in-T_区),0,((2.0*(x2))-T_-in-T_区))
m、 方程(T_p1out==T_区+m1out)
m2out=m.if3(((2.0*(x5))-T_p1out-T_区),0,((2.0*(x5))-T_p1out-T_区))
m、 方程(T_out==T_区+m2out)

在上面的代码中,我尝试将方程分为两部分,并将if条件的结果作为附加变量添加到基值/最小值中,但没有得到任何解决方案。

以下是一些需要考虑的事项:

  • 如果
    T_in
    T_zone
    是常数,则使用
    m.Const
    m.Param
    代替
    m.Var
    。否则,它们可以由解算器进行调整
  • 单个
    m.if3
    功能就足以解决此问题。您可以定义两个
    m.if3
    语句,然后添加输出,但随后您将创建额外的二进制变量,这将使问题更难解决
  • 条件
    确定
    T\u out=T\u区域(条件=0)
  • 中的
    T\u值为348.0,而不是
    温度区(293.0)
下面是您提出的问题的完整脚本

从gekko导入gekko
m=GEKKO()
温度区=293.0
T_in=m.Const(值=348.0)
T_区=常数(值=温度_区)
x2=m.Var(值=温度区)
x5=m.Var(值=温度区)
条件=2*x5-2*x2+T\u在-T\u区
Tout=m.if3(条件,T_区,2*x5-2*x2+T_英寸)
m、 解决()
在两次迭代中找到解决方案。请注意,
x2
x5
在本例中是额外的自由度,仍然需要方程式来指定它们的值

 Number of state variables:              6
 Number of total equations: -            3
 Number of slack variables: -            2
 ---------------------------------------
 Degrees of freedom       :              1

 ----------------------------------------------
 Steady State Optimization with APOPT Solver
 ----------------------------------------------
Iter:     1 I:  0 Tm:      0.00 NLPi:    2 Dpth:    0 Lvs:    2 Obj:  0.00E+00 Gap:       NaN
--Integer Solution:   0.00E+00 Lowest Leaf:   0.00E+00 Gap:   0.00E+00
Iter:     2 I:  0 Tm:      0.00 NLPi:    1 Dpth:    1 Lvs:    2 Obj:  0.00E+00 Gap:  0.00E+00
 Successful solution

 ---------------------------------------------------
 Solver         :  APOPT (v1.0)
 Solution time  :   1.390000000537839E-002 sec
 Objective      :   0.000000000000000E+000
 Successful solution
 ---------------------------------------------------