下面是一个非线性方程的例子:
x+2y=0
x^2+y^2=1
很明显这个方程有两个根。你知道吗
但是,使用GEKKO只能得到一个根,更改x,y
的初始值可以得到另一个根。你知道吗
from gekko import GEKKO
m = GEKKO()
# first solution
x,y = [m.Var(1) for i in range(2)]
m.Equations([x+2*y==0,x**2+y**2==1])
m.solve(disp=False)
print(x.value,y.value)
# second solution
x.value=-1
y.value=-1
m.solve(disp=False)
print(x.value,y.value)
Solutions:
[0.894427191] [-0.4472135955]
[-0.894427191] [0.4472135955]
怎么能同时得到所有的根呢?你知道吗
Gekko的解算器可以找到局部极小值。它找到的解决方案取决于你从哪里开始。fsolve或其他方程解算器也是如此。一个例外是SymPy提供的符号解,然而,这要求方程足够简单,可以生成闭合形式和解析解。以下是一些示例:
http://apmonitor.com/che263/index.php/Main/PythonSolveEquations
单根(数值解):
多根(解析解):
杨百翰大学的贺登仁教授在电子邮件讨论组中的回答。
相关问题 更多 >
编程相关推荐