2016-04-22 109 views
6

我在Jupyter Notebook中使用sympy v1.0。我无法通过表达来简化我的想法。这里有一个玩具的例子。它我更复杂的表达式做同样的事情......如何简化sympy中的sqrt表达式

import sympy 
sympy.init_printing(use_latex='mathjax') 
x, y = sympy.symbols("x, y", real=True, positive=True) 
sympy.simplify(sqrt(2*x/y)) 

给我...

      expression from sympy

但我宁愿......

      enter image description here

如何获得sympy以这种方式进行分组?我曾尝试过其他一些simplify函数,但它们都给了我相同的结果。还是我错过了别的?

+3

如果您没有将x和y设置为真实和正数,SymPy不会将它们分开(因为这样做无效)。 – asmeurer

+0

@asmeurer谢谢你的确有帮助。它仍然把2拉出来,但这更容易处理。我发现我也可以通过将所有东西整齐排列来检查它是如何收集所有东西的。 – kwinkunks

回答

0

sympy真的想通过从sqrt中提取条款来简化,这很有道理。我认为你必须手动做你想做的事情,也就是说,在没有sqrt的呼叫的情况下获得你想要的简化,然后用Symbol和LaTex \sqrt包装来做它。例如:

from sympy import * 
init_printing(use_latex='mathjax') 

# Wanted to show this will work for slightly more complex expressions, 
# but at the end it should still simplify to 2x/y 
x, y = symbols("x, y", real=True, positive=True) 
z = simplify((2*2*3*x)/(1*2*3*y)) 

Symbol("\sqrt{" + latex(z) + "}", real=True, positive=True) # Wrap the simplified fraction in \sqrt{} 

这实在是不理想,但我通过文档找了大约一个小时,只是找不到要直接哪些支持。 sympy库更多的是关于实际的符号操作,而不是关于打印,所以我不能责怪他们。

+0

我很欣赏你的洞察力,但这感觉太复杂了。没有指定真正的积极符号的建议帮助了我。不管怎样,谢谢你。 – kwinkunks