1

我正在尝试使用 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
4

1 回答 1

2

使用这些函数的 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。这是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(其他)
于 2019-08-23T15:46:09.073 回答