Gekko运行报TypeError: Must be real number not GKvariable如何解决
报错原因
- Python标准库
math下的三角函数仅支持接收原生数值类型(int/float等)作为入参,你传入的sigma是Gekko自定义的GKVariable类型变量,无法被math.cos识别,因此抛出类型错误。 - Gekko的求解器需要识别方程内的所有运算关系才能完成求解,直接调用
math库的运算会打断这个识别链路,即使强行转类型也会丢失变量的运算关联逻辑。
解决方法
把方程里的math.cos(sigma)替换为Gekko内置的cos方法即可,Gekko的内置数学函数专门适配自身的变量类型,可被求解器正常解析。
修正后的完整代码:
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*m.cos(sigma)==0) m.solve(disp=False) print(sigma.value)
提示:后续如果在Gekko方程中需要使用其他数学运算,也请统一使用Gekko实例的内置方法(如
m.sin、m.exp、m.log等),不要调用math或numpy库的同类方法。
内容的提问来源于stack exchange,提问作者Deepu Johnson
相关产品推荐
相关产品推荐

