如何求解具有多重等式的Sympy方程



x1/A=x2/B=x3/C=x4/D=常数:是我想要自动求解的方程类型。

from sympy import symbols, Eq, solve
def _3covoit_prop(CostList): # Costs : [A,B,C,D]
n = len(CostList)
varbs = symbols('x(:'+str(n)+')') #(x0, x1, x2, x3)
eqs = [ (x/cout) for x,cout in zip(varbs,CostList) ]
maxLC = max(CostList)
E = Eq(eqs[0],maxLC)
for e in eqs[0:] :
E = Eq(e,E,evaluate=False) #equal imbrication here
s=solve(E, varbs)
_3covoit_prop([100.,450.,500.,1450.])

给出了一个非常奇怪的答案。如果有人想帮忙,我们会很欢迎的。

您可以将方程式以[Eq(x1/A, Constant), Eq(x2/B, Constant), Eq(x3/C, Constant), Eq(x4/D, Constant)]的形式存储在列表中。然后调用该列表中的solve

from sympy import symbols, Eq, solve
def _3covoit_prop(CostList):  # Costs : [A,B,C,D]
n = len(CostList)
varbs = symbols('x(:' + str(n) + ')')  # (x0, x1, x2, x3)
eqs = [(x / cout) for x, cout in zip(varbs, CostList)]
maxLC = max(CostList)
E = [Eq(equation, maxLC) for equation in eqs]
s = solve(E, varbs)
return s
s = _3covoit_prop([100., 450., 500., 1450.])
print(s)

输出:

{x0: 145000.000000000,
x1: 652500.000000000,
x2: 725000.000000000,
x3: 2102500.00000000}

最新更新