我有一个等式,我需要解决它的一小部分。我有更复杂的公式要解决,但这是一个最小的例子:采取以下简单的函数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)
我想我误会了什么,任何帮助表示赞赏!
solve
函数可以求解子表达式,只要它们在求解的等式中“按原样”出现即可。例如,在下面的代码中,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
,在这个例子中)。
用于符号计算的包可以帮助我们处理复杂的数学方程。但它们不能代替人类智慧。通常情况下,我们需要指导这些软件包,以帮助他们在解决限制时以我们想要的形式提供答案。