Код: Выделить всё
from gekko import GEKKO
m = GEKKO(remote=True)
x = m.Array(m.Var,13,value=1,lb=1e-27,ub=20.0)
H2,H2O,CO,O2,CO2,CH4,C2H6,C2H4,C2H2,lamda1,lamda2,lamda3,summe= x
H2.value = 3.0
H2O.value = 1.0
CO.value = 0.5
O2.value = 0.001
CO2.value = 0.5
CH4.value = 0.1
C2H6.value = 0.000215
C2H4.value = 0.00440125
C2H2.value = 0.0041294
summe.value = 8.0
lamda1.value = 1.0
lamda2.value = 1.0
lamda3.value = 1.0
eq1 = m.Param(value=14)
eq2 = m.Param(value=4)
eq3 = m.Param(value=2)
summe = m.Var(H2 + O2 + H2O + CO + CO2 + CH4 + C2H6 + C2H4 + C2H2)
lamda2 = m.Var((-1)*m.log(H2 / summe) / 2)
lamda1 = m.Var(46.03 / 1.9872 - m.log(H2O / summe) + 2 * lamda2)
lamda3 = m.Var(47.942 / 1.9872 - m.log(CO / summe) + lamda1)
m.Equation(m.exp(-4.61 / 1.9872 - 4 * lamda2 - lamda3) * summe == CH4)
m.Equation(m.exp(-28.249 / 1.9872 - 4 * lamda2 - 2 * lamda3) * summe == C2H4)
m.Equation(m.exp(-40.604 / 1.9872 - 2 * lamda2 - 2 * lamda3) * summe == C2H2)
m.Equation(m.exp(-26.13 / 1.9872 - 6 * lamda2 - 2 * lamda3) * summe == C2H6)
m.Equation(m.exp(94.61 / 1.9872 - 2 * lamda1 - lamda3) * summe == CO2)
m.Equation(m.exp(-2 * lamda1) * summe == O2)
m.Equation(2 * CO2 + CO + 2 * O2 + H2O == eq2)
m.Equation(4 * CH4 + 4 * C2H4 + 2 * C2H2 + 2 * H2 + 2 * H2O + 6 * C2H6 == eq1)
m.Equation(CH4 + 2 * C2H4 + 2 * C2H2 + CO2 + CO + 2 * C2H6 == eq3)
m.Minimize((summe-(H2 + O2 + H2O + CO + CO2 + CH4 + C2H6 + C2H4 + C2H2))**2)
m.options.IMODE = 3 #IPOPT
m.options.MAX_ITER = 1000
m.options.OTOL = 1e-10
m.options.RTOL = 1e-10
m.solve()
print('x: ', x)
print('Objective: ',m.options.OBJFCNVAL)
Код: Выделить всё
EXIT: Optimal Solution Found.
The solution was found.
The final value of the objective function is 81.0000000000000
---------------------------------------------------
Solver : IPOPT (v3.12)
Solution time : 1.169999998819549E-002 sec
Objective : 81.0000000000000
Successful solution
---------------------------------------------------
x: [[5.797458326] [1.202541674] [1.202541674] [1.6791020526e-21]
[0.79745832603] [1.6503662452e-22] [3.2694282596e-27] [1.1255712085e-27]
[1e-27] [2.185089969] [2.185089969] [2.185089969] [9.5605307091]]

Оба решения по-прежнему различаются. И что интересно, результат поиска корня (ограничения) по-прежнему отличается, но в то же время сходится:
Код: Выделить всё
Total number of equations: 13
Number of implicit equations: 4
Number of explicit equations: 9
Solution method CONSTRAINED
Convergence tolerance: 1e-07
# of iterations used: 8
CO 1.685236
H2 5.118105
H2O 1.387357
SUM 8.899115
C2H2 0.0041294
C2H4 0.0044224
C2H6 0.0092403
CH4 0.2269213
CO2 0.0522585
lamda1 1.537016
lamda2 0.2765838
lamda3 2.53957
O2 0.4114448
Вектор решения x
GEKKO
EXCEL GRG
Поиск корней
H2: 1
5.797458326
5.344360712
5.118105
H2O: 2
1.202541674
1.521995663
1.387357
CO: 3
1.202541674
1.388351672
1.685236
O2: 4
1.6791020526e-21
5.82E-21
0.4114448
CO2: 5
0.79745832603
0.544826
0.0522585
CH4: 6
1.6503662452e-22
0.0668213
0.2269213
C2H6: 7
3.2694282596e-27
1.70E-07
0.0092403
C2H4: 8
1.1255712085e-27
9.74E-08
0.0044224
C2H2: 9
1e-27
3.25E-10
0.0041294
lamda1: 10
2.185089969
24.3878385
1.537016
lamda2: 11
2.185089969
0.253110984
0.2765838
lamda3: 12
2.185089969
1.558979624
2.53957
сумма: 13
9.5605307091
8.866356107
8.899115
Подробнее здесь: https://stackoverflow.com/questions/792 ... -excel-sol