2

目标是实现一个分段表达式,当 n 为偶数时给出 0,当 n 为奇数时给出 1。一种方法是使用下面的 floor 函数:

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 函数来实现这一点?

4

1 回答 1

3

更好的方法是使用Mod,比如

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

但是,由于您的功能与 的定义完全一致Mod,您可以直接使用它

Mod(n, 2)

或等效地

n % 2
于 2015-10-22T21:46:21.363 回答