我应该如何使用 GEKKO 对 log 或 sqrt 进行建模?约束条件

How should I model log or sqrt with GEKKO? Constraints

我正在尝试使用 GEKKO 开发我的约束,我需要包括一些数学运算,如 log、coth 或 sqrt。

我最初尝试使用我的习惯程序,使用 numpy 或 mpmath,但我发现使用 GEKKO 我需要使用它们的运算符定义,如 m.wathever (log,...),一旦 m = GEKKO() 完成

最好的开发方法是什么? 我在更改时是否应该考虑一些因素?

K_t = (1 + m + np.sqrt(1 + m**3)) - mpmath.coth(s/2)  # Ref 2. Same results

使用这些函数的 Gekko 版本而不是 NumPy 或 Math 版本:

gk = GEKKO()
K_t = (1 + m + gk.sqrt(1 + m**3)) - gk.cosh(s/2)/gk.sinh(s/2)

需要 Gekko 版本,因为运算符重载以计算具有自动微分的求解器的一阶和二阶导数。没有 coth,所以您需要用 coth(x) = cosh(x)/sinh(x) 代替。我通常将我的 Gekko 模型定义为 m=GEKKO(),但您有另一个名为 m 的变量,所以我改用 gk。这是 documentation on Model Building Functions.

的一部分

方程函数

除代数运算符外的特殊功能可通过 GEKKO 函数使用。必须使用这些(不是 numpy 或其他等效函数):

  • gk.sin(其他)
  • gk.cos(其他)
  • gk.tan(其他)
  • gk.asin(其他)
  • gk.acos(其他)
  • gk.atan(其他)
  • gk.sinh(其他)
  • gk.cosh(其他)
  • gk.tanh(其他)
  • gk.exp(其他)
  • gk.log(其他)
  • gk.log10(其他)
  • gk.sqrt(其他)