Я пытаюсь линеаризовать уравнение, используя логарифмы для расчета тепловыделения батареи (q_batt).
У меня много кода из открытого программного обеспечения oemof (oemof.readthedocs.io) и В этой части моя проблема:
def _q_batt_first_rule(block, n, t):
current = m.flow[n, i[n], t] / n.inflow_voltage
expr = 0
expr += block.q_batt[n, t] - n.inflow_resistance(block.capacity[n, t]) * current**2
return expr == 0
self.q_bat_first_rule = Constraint(self.STORAGES, reduced_timesteps,
rule=_q_batt_first_rule)
Исходное уравнение:
q_batt = inflow_resistance * (inflow_flow / inflow_voltage)^2
И я хочу переписать его как линейный, чтобы иметь возможность решить его с помощью CB C solver
inflow_resistance (n.inflow_resistance (block.capacity [n, t])) - это входное линейное уравнение, которое зависит от емкости (которая является переменной, вычисляемой в объекте батареи - называемом блоком), inflow_flow ( m.flow [n, i [n], t]) рассчитывается в модели, а Voltage_in (n.inflow_voltage) является входной константой
Вы знаете, как это сделать?
Заранее спасибо!