我在Mathcad中解决了这个问题,但我不知道如何将其转移到Python中。
Mathcad:
x1c 0d1x的数据
我试了这个代码:
from sympy import symbols, nonlinsolve
Q = np.array([230.8084,119.1916,76.943,153.8654,196.1346])
x1, x2, x3, x4, x5 = symbols('x1, x2, x3, x4, x5', real=True)
eq1 = (Q[0]**2)*x1 - (Q[1]**2)*x2 + (Q[2]**2)*x3
eq2 = (Q[0]**2)*x1 + (Q[3]**2)*x4 - (Q[4]**2)*x5 - (Q[2]**2)*x3
eq3 = (Q[2]**2)*x3 - (Q[3]**2)*x4 + (Q[4]**2)*x5
q = nonlinsolve([eq1,eq2,eq3 ], [x1, x2, x3, x4, x5])
print(q)
字符串
结果:{(0,1.66644368166375x4 - 2.70780339743064x5,3.99892914904867x4 - 6.49785771642014x5,x4,x5)}
如果没有找到x4和x5也没关系,但是每个x的值应该> 0和< 1。我不知道如何使用例如numpy/scipy来做到这一点。
2条答案
按热度按时间tkqqtvp11#
下面是一个
scipy.optimize.minimize()
的解决方案,它遵循this answer的相关问题,并试图复制您的Mathcad解决方案:字符串
结果非常接近你在Mathcad中找到的结果,尽管在这里实现的方法确实有点乏味。注意:就像你的Mathcad解决方案一样,但与你的symny解决方案不同,
scipy.optimize.minimize()
的方法从解决方案空间中选择一个解决方案。pn9klfpd2#
没有一个解。有无限多的解。Sympy对不等式解有(差的,但现在)支持,所以使用它:
个字符
这意味着,只要满足上述所有等式和不等式,F4和F5的任何值都是可以接受的。
还应注意,如果F0被约束为> 1 e-3,则系统不可满足。