Как использовать np.log или np.exp в GEKKO intermediate

#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 при возникновении ошибок типа в функциях.