如何简化 sympy 中的 sqrt 表达式
How to simplify sqrt expressions in sympy
我正在使用 sympy
v1.0 in a Jupyter Notebook。我无法表达以简化我想要的方式。这是一个玩具示例;它和我更复杂的表达式做的一样...
import sympy
sympy.init_printing(use_latex='mathjax')
x, y = sympy.symbols("x, y", real=True, positive=True)
sympy.simplify(sqrt(2*x/y))
给我...
但我更愿意...
如何才能 sympy
以这种方式对事物进行分组?我尝试了其他一些 simplify
函数,但它们都给我相同的结果。还是我漏掉了什么?
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
库更多的是关于实际的符号操作,而不是打印,所以我很难责怪他们。
对于您希望表现得像符号的数字使用 "symbol trickery",当您不希望简化时使用 "vanilla symbols"(正如@asmeurer 指出的那样):
>>> _2,x,y = list(map(Symbol,'2xy'))
>>> sqrt(_2*x/y)
sqrt(2*x/y)
我正在使用 sympy
v1.0 in a Jupyter Notebook。我无法表达以简化我想要的方式。这是一个玩具示例;它和我更复杂的表达式做的一样...
import sympy
sympy.init_printing(use_latex='mathjax')
x, y = sympy.symbols("x, y", real=True, positive=True)
sympy.simplify(sqrt(2*x/y))
给我...
但我更愿意...
如何才能 sympy
以这种方式对事物进行分组?我尝试了其他一些 simplify
函数,但它们都给我相同的结果。还是我漏掉了什么?
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
库更多的是关于实际的符号操作,而不是打印,所以我很难责怪他们。
对于您希望表现得像符号的数字使用 "symbol trickery",当您不希望简化时使用 "vanilla symbols"(正如@asmeurer 指出的那样):
>>> _2,x,y = list(map(Symbol,'2xy'))
>>> sqrt(_2*x/y)
sqrt(2*x/y)