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