2017-04-12 46 views
1

公式表示我已經創建了一個公式是這樣的:控制在SymPy

>>> a, b = symbols('a, B') 
>>> i = Idx('i') 
>>> bi = IndexedBase('b')[i] 
>>> Sum(a*(bi/b), (i, 1, 5)) 
    5   
____  
╲ a⋅b[i] 
    ╲ ────── 
    ╱  B 
╱   
‾‾‾‾  
i = 1 

雖然它是正確的,它看起來不像我想要的。我想口音的事實b[i]/Ba係數,使之易於閱讀這個公式時,瞭解我的想法。這在我的Jupyter Notebook文檔中用於文檔目的是必需的。所以,我想告訴sympy某種程度上代表公式是這樣的:

5   
____  
╲  b[i] 
    ╲ a⋅──── 
    ╱  B 
╱   
‾‾‾‾  
i = 1 

之後,我想告訴sympy簡化公式,使盡可能少的操作成爲可能。例如,這個公式可以這樣簡化:

 5   
    ____  
a ╲  
─ ⋅ ╲ b[i] 
B ╱  
    ╱   
    ‾‾‾‾  
    i = 1 

我如何用SymPy實現這一點?

+0

的Python/sympy版本您使用? –

+0

的Python 2.7.10,SymPy 1.0 – raacer

回答

1

我不能讓你確切的代碼我的老系統(Python的2.7.6,Sympy 0.7.4.1)上工作,所以我不得不稍作修改,同時仍試圖保持一個非常相似的結構。

它看起來像factor()可以幫助你:

from sympy import * 
a, b = symbols('a, B') 
i, n = symbols('i n', integer=True) 
bi = Function('b')(i) 
f = summation(a/b*bi, (i,1,n)) 
init_printing() 

f

n   
____  
╲   
    ╲ a⋅b(i) 
    ╲ ────── 
    ╱ B 
    ╱   
╱   
‾‾‾‾  
i = 1  

factor(f)

n  
    ___  
    ╲   
    ╲ b(i) 
a⋅ ╱  
    ╱   
    ‾‾‾  
    i = 1  
──────────── 
    B 
+0

'因子()'對我的作品時,我定義'i'爲'I =符號( 'I',整數=真)'。但是當它被定義爲'i = Idx('i')'時,因子()會在求和o_O之外移動Indexed和Function。看起來像一個錯誤。 SymPy 0.7.4.1更強大嗎? – raacer

+0

問題的第一部分仍然是實際的。 – raacer

+0

我不知道0.7.4是否更健壯,我無法讓你的例子工作。對於第一個問題,它實際上只是一個漂亮的打印不同,我不知道,如果你可以做任何事情:兩人的表情正是從數學的角度來看是相同的。我應該刪除我的答案嗎? –