我有一个等式,我需要解决它的一小部分。
我有更复杂的公式要解决,但这是一个最小的例子:采用以下简单函数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)
我想我误会了什么,有任何帮助表示赞赏!
答案 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}
这样的例程并不能消除人工干预的必要,它只是通过允许用户陈述感兴趣的关系并将其添加到当前的方程式(从中推导出/解决其含义)中来提供帮助。
>