我试图在同意中进行一些替换,但它们通常不是x=1
等形式。更像是(a+b)/(c+d)=1
。我可以选择一个任意变量来解决,但是存在可能产生无限解的情况,可能产生无限可能的替换,以及任何其他未知的未知警告,当直接替换时不会。
为了说明我想要做的事,请考虑:
这显然只是1
。如何为此输出1
?
更新
这也不起作用:
sp.solvers.solve([(a+b)/(c+d)-x,(c+d)/(a+b)-1],x)
答案 0 :(得分:1)
解决为两个变量设置的系统,而不仅仅是一个。这将迫使SymPy实际使用这两个方程式。
sp.solve([(a+b)/(c+d) - x, (c+d)/(a+b) - 1], [x, a])
输出{a: -b + c + d, x: 1}
或者更具体地说,
sp.solvers.solve([(a+b)/(c+d) - x, (c+d)/(a+b) - 1], [x, a])[x]
输出1。
通常,上述过程是“消除a”,但在具体示例中,它同时消除了b,c,d。
直接替换不会
直接替换意味着替换表达式树的一部分。表达式(a + b)/(c + d)在其树中的任何地方都不包含(c + d)/(a + b),因此没有任何直接替换可以做到的事情。