2014-09-23 133 views
2

我是python的SymPy的新手,我正试图求解一个简单的方程组。我可以成功评估变量'y',但是当我试图将这个值替换回'x'时,我无法得到它来简单地评估表达式并输出一个值。我的代码如下:用SymPy求解一个代数方程组

x = Symbol('x') 
y = Symbol('y') 
A = 1 
B = 3 
C = 6 

x = solve(A*(1-x-y) + B*x + C*y - 4, x) 
x = x[0] 
y = solve(A*(1-x-y) + B*x - (8-C)*y, y) 
y = y[0] 

print x 
print x.subs(y,0.5) 

我到目前为止所做的每一次尝试都只返回-5 * y/2 + 3/2。我试着将它转换为一个float,试图以不同的方式使用solve表达式,并将其转换为一个字符串,然后使用simpify将其转换回表达式来解决。

没有我做过的工作,我意识到这应该是一个简单的任务,但我无法弄清楚。任何建议都会有帮助,谢谢!

+0

当你写的'X ='或'Y ='要覆盖x和y,让他们不再是符号('x')'和符号('y')'。 – asmeurer 2014-09-23 17:00:16

回答

1

我不知道,如果你要的东西,如:

from sympy import * 

x = Symbol('x') 
y = Symbol('y') 
A = 1 
B = 3 
C = 6 

xeq = solve(A*(1-x-y) + B*x + C*y - 4,x)[0] 
print ('x = %s' % xeq) 
yeq = solve(A*(1-x-y) + B*x - (8-C)*y,y)[0] 
print ('y = %s' % yeq) 

ysolve = 0.5 
xval = xeq.subs(y, ysolve) 
print ('If y = %f, x = %f' % (ysolve, xval)) 
yval = yeq.subs(x, xval) 
print ('If x = %f, y = %f' % (xval, yval)) 

输出将是:

x = -5*y/2 + 3/2 
y = 2*x/3 + 1/3 
If y = 0.500000, x = 0.250000 
If x = 0.250000, y = 0.500000 

我相信,在你的代码的主要问题是要覆盖随着你的前进,符号xy

1

不要忘记,你可以同时解决这两个,也与解决:

>>> x,y=symbols('x y') 
>>> A = 1 
>>> B = 3 
>>> C = 6 
>>> sol = solve((
...  A*(1-x-y) + B*x + C*y - 4, 
...  A*(1-x-y) + B*x - (8-C)*y,)) 
>>> sol 
{x: 1/4, y: 1/2} 
>>> print "x = {x} and y = {y}".format(x=sol[x],y=sol[y]) 
x = 1/4 and y = 1/2 
+0

很高兴知道,谢谢。干净整洁的解决方案 – StormTrooper123 2014-10-03 21:45:53