2015-10-22 45 views
2

的目的是實現一個分段表達式,給出0,當n爲偶數時,以及1當n爲奇數。一個辦法做到這一點是使用地板之類的函數如下:Sympy分段表達式偶數和奇數

from sympy import * 
from sympy.abc import n 

f = Lambda((n,), Piecewise((0, Eq(n, floor(n/S(2)))), 
          (1, Eq(n, floor(n/S(2))+1)))) 

print(f(0)) 
print(f(1)) 
print(f(2)) 
print(f(3)) 

然而,這將返回錯誤的輸出:

0 
1 
1 
Piecewise() 

正確的輸出應該是:

0 
1 
0 
1 

另一種方式達到同樣的方法是使用:

from sympy import * 
from sympy.abc import n 

f = Lambda((n,), Piecewise((0, Eq((-1)**n, 1)), 
          (1, Eq((-1)**n, -1)))) 

print(f(0)) 
print(f(1)) 
print(f(2)) 
print(f(3)) 

並返回正確的輸出。有沒有一種方法可以在原始代碼中使用floor函數來實現這一點?

回答

3

一個更好的辦法是使用Mod,像

Piecewise((0, Eq(Mod(n, 2), 0)), (1, Eq(Mod(n, 2), 1))) 

然而,由於你的函數的Mod定義準確一致,你可以用它直接

Mod(n, 2) 

或等價

n % 2