#numpy #gekko
#numpy #gekko
Вопрос:
Я использую гекко для решения системы уравнений. В качестве промежуточного шага я использую промежуточное устройство, которое подключает температуру MV к следующей функции:
def riedelVP(T, const):
'''Returns Vapor Pressure
INPUTS
:T - Temperature (K)
:const - A, B, C, D, E constants for eqn
OUTPUTS
:Y - Pressure in Pascals'''
# unpack constants
a, b, c, d, e = const
# plug into equation
Y = np.exp(a b/T c*np.log(T) d*T**e)
return Y
Когда я делаю это, я получаю следующую ошибку:
Я пытался использовать T.value
и T.value[0]
в качестве аргументов в функции вместо T.
TypeError: loop of ufunc does not support argument 0 of type GKVariable which has no callable log method
Как я могу использовать функцию с exp и войти в gekko intermediate
Ответ №1:
Проблема в этом случае заключается в том, что и np.exp()
для функции, и np.log
для функции требуется аргумент с плавающей запятой, в то время как переменные gekko имеют свой собственный тип. Если вы должны были использовать методы гекко для возведения в степень и получения логарифма в функции, это сработает. Для этого используйте методы m.exp
или m.log
. В этом примере у меня уже была модель gekko, созданная с использованием m = GEKKO()
, тогда я мог бы создать функцию:
def riedelVP(T, const):
'''Returns Vapor Pressure
INPUTS
:T - Temperature (K)
:const - A, B, C, D, E constants for eqn
OUTPUTS
:Y - Pressure in Pascals'''
# unpack constants
a, b, c, d, e = const
# plug into equation
Y = m.exp(a b/T c*m.log(T) d*T**e)
return Y
Используйте аналогичные методы gekko при возникновении ошибок типа в функциях.