Sympy:解决分数

时间:2017-12-17 14:55:13

标签: python sympy

我有一个等式,我需要解决它的一小部分。 我有更复杂的公式要解决,但这是一个最小的例子:采用以下简单函数Y = X*a。 我想解决Y/X,所以我希望Y/X =a。 这是代码,它产生一组空的答案

from sympy import *
X,Y,a = symbols('X Y a')
testEq = Eq(Y,X*a)
solve(testEq,Y/X)

我想我误会了什么,有任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:3)

solve函数可以解决子表达式,只要它们出现"按原样#34;在方程式中得到解决。例如,在以下代码中,solve会返回testEq的空解决方案,但会返回testEq2的正确解决方案,该解决方案是根据Y/X重新排列的相同方程式。

from sympy import *
X,Y,a = symbols('X Y a')
testEq = Eq(Y,X*a)
solve(testEq,Y/X)
testEq2 = Eq( Y/X, a )
sol = solve(testEq2,Y/X)

这根本不奇怪或不合理。如果你查看solve函数的源代码,它会使用像

这样的代码
>>> testEq.has( Y/X ) # returns False
>>> testEq2.has( Y/X ) # returns True

检查我们正在解决的符号(或者症状对象)是否存在于等式中。如果SymPy必须检查表达式的符号可以组合成子表达式的所有可能方式,那么对于可以通过其他方式轻松实现的内容(例如求解Y和在此示例中除以X

用于符号计算的包可以帮助我们处理复杂的数学方程。但它们不能代替人类智慧。通常情况下,我们需要指导这些软件包,以帮助他们在解决限制时以我们想要的形式给出答案。

答案 1 :(得分:0)

在此issue中,一旦将辅助表达式添加到感兴趣的表达式中,focus例程便会处理此类请求:

>>> eq = Eq(y, x*a)
>>> aux = Eq(b, y/x)
>>> focus((aux, eq), b)
{b: a}

这样的例程并不能消除人工干预的必要,它只是通过允许用户陈述感兴趣的关系并将其添加到当前的方程式(从中推导出/解决其含义)中来提供帮助。

>