TypeError: Must be real number not GKvariable

TypeError: Must be real number not GKvariable

我在 运行 以下代码时出错:

  from gekko import GEKKO
  m= GEKKO()
  sigma = m.Var()
  m.Equation((0.5*1.225*(Vt**2)*s*b)*(pb*(beta-sigma) \
             + Cndr*((((Vw**2)*Ss*CDy)/((Vt**2)*s) \
             - Cyb*(beta-sigma))/Cydr)) + Fw*dc*math.cos(sigma)==0)
  m.solve(disp=False)
  print(sigma.value)

在上面的代码中,我想找到变量 sigma 的值。所有其他变量都是已定义的常量。在执行上面的代码时,出现了以下错误。

m.Equation((0.5*1.225*(Vt**2)*s*b)*(x[10]*(beta-sigma) 
           + Cndr*((((Vw**2)*Ss*CDy)/((Vt**2)*s)
           - Cyb*(beta-sigma))/Cydr)) + Fw*dc*math.cos(sigma)==0)
TypeError: Must be a real number, not GKvariable

我认为问题出在 math.cos(sigma),因为当我删除它时它起作用了。

如何解决这个错误?

您不能使用标准库中的 math.cos,因为正如它所说,它需要一个实际数字(如 floatint)。 GEKKO 有自己的函数可以处理 GKvariables。您应该使用 m.cos 而不是 math.cos

https://gekko.readthedocs.io/en/latest/model_methods.html#equation-functions

Special function besides algebraic operators are available through GEKKO functions. These must be used (not numpy or other equivalent functions):