【问题标题】:Solving a System of Algebraic Equations with SymPy用 SymPy 求解代数方程组
【发布时间】:2014-09-23 01:07:41
【问题描述】:

我是 python 的 SymPy 新手,正在尝试解决一个简单的方程组。我可以成功地评估变量“y”,但是当我尝试将该值替换回“x”时,我无法让它简单地评估表达式并输出一个值。我的代码如下:

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。我尝试将其转换为浮点数,尝试以不同方式使用求解表达式,然后将其转换为字符串,然后使用 simpify 将其转换回表达式来求解。

我没有做过任何工作,我意识到这应该是一件容易的事,但我想不通。任何建议都会有所帮助,谢谢!

【问题讨论】:

  • 当你写x = y = 时,你将覆盖x和y,因此它们不再是Symbol('x')Symbol('y')

标签: python sympy algebra


【解决方案1】:

别忘了你也可以同时解决这两个问题,用solve:

>>> 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

【讨论】:

    【解决方案2】:

    我不确定你是否想要这样的东西:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多