gpt4 book ai didi

python - 在python中求解2个方程组

转载 作者:行者123 更新时间:2023-12-04 12:09:44 25 4
gpt4 key购买 nike

我有一组包含三个未知数的两个方程,这些方程有一些条件。 x、y 和 z 必须都大于零。我该如何解决这个问题?只有一种解决方案,我已经知道了,但我想知道如何正确地获得它。
这是方程:
100 = x + y + z
100 = 10x +2.5y + 0.5z
需要找到 x、y 和 z。它们是整数和正数。
这是我的代码不起作用:

from sympy import symbols, Eq, solve
x, y, z = symbols('x y z')
eq1 = Eq(x + y + z, 100)
eq2 = Eq(x*10 + y*2.5 + z*0.5, 100)
#eq3 = x, y, z must all be larger than zero and integers
solution = solve((eq1,eq2), (x,y,z))
solution

最佳答案

在 sympy 中,如果你想找到方程的整数解,那么你应该使用 diophantine .它不处理方程组,但您可以将一个方程的解放到另一个方程中,然后再次调用丢番图:

In [69]: eq1 = x + y + z - 100

In [70]: eq2 = 10*x + 5*y/2 + z/2 - 100

In [71]: sol = diophantine(eq1, t, syms=[x, y, z])

In [72]: sol
Out[72]: {(t₀, t₀ + t₁, -2⋅t₀ - t₁ + 100)}

In [73]: [xt, yt, zt], = sol

In [74]: eq3 = eq2.subs({x:xt, y:yt, z:zt})

In [75]: eq3
Out[75]:
23⋅t₀
───── + 2⋅t₁ - 50
2

In [76]: t1, t2 = eq3.free_symbols

In [77]: [t1s, t2s], = diophantine(eq3, z, syms=[t1, t2])

In [78]: rep = {t1:t1s, t2:t2s}

In [79]: (xt.subs(rep), yt.subs(rep), zt.subs(rep))
Out[79]: (4⋅z₀ - 100, 500 - 19⋅z₀, 15⋅z₀ - 300)
这里的解决方案是使用整数参数 z0。这给出了两个方程的一组解,但您还要求 x、y、z 为正,这限制了 z0 的可能值:
In [80]: ineqs = [s.subs(rep) > 0 for s in [xt, yt, zt]]

In [81]: ineqs
Out[81]: [4⋅z₀ - 100 > 0, 500 - 19⋅z₀ > 0, 15⋅z₀ - 300 > 0]

In [82]: solve(ineqs)
Out[82]:
500
25 < z₀ ∧ z₀ < ───
19

In [83]: 500/19
Out[83]: 26.31578947368421
我们看到 z需要 26这为 x 提供了独特的解决方案, yz :
In [84]: z, = ineqs[0].free_symbols

In [85]: (xt.subs(rep).subs(z, 26), yt.subs(rep).subs(z, 26), zt.subs(rep).subs(z, 26))
Out[85]: (4, 6, 90)

关于python - 在python中求解2个方程组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65436610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com