Как мне моделировать журнал или sqrt с помощью GEKKO? Ограничения

Я пытаюсь разработать свои ограничения с помощью 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

person srgam    schedule 23.08.2019    source источник


Ответы (1)


Используйте версии этих функций 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. Вот раздел из документации по функциям построения модели .

Функции уравнения

Специальные функции помимо алгебраических операторов доступны через функции 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 (другое)
person John Hedengren    schedule 23.08.2019