如何在sympy中简化sqrt表达式

时间:2016-04-22 16:13:20

标签: python sympy symbolic-math

我在sympy中使用Jupyter Notebook v1.0。我无法通过表达来简化我的喜好。这是一个玩具的例子;它做了同样的事情我更复杂的表达式...

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函数,但它们都给了我相同的结果。或者我错过了其他什么?

2 个答案:

答案 0 :(得分:1)

当您不想简化时(如@asmeurer所指出的那样),对于希望表现得像符号和“香草符号”的数字,请使用“符号欺骗”:

>>> _2,x,y = list(map(Symbol,'2xy'))
>>> sqrt(_2*x/y)
sqrt(2*x/y)

答案 1 :(得分:0)

sympy确实希望通过从sqrt中提取条款来简化,这是有道理的。我认为您必须手动执行您想要的操作,即在没有sqrt调用的情况下获得所需的简化,然后使用带有LaTex Symbol换行的\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库更多地是关于实际的符号操作,而不是关于打印,所以我几乎不能责怪它们。