2016-04-22 32 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