【问题标题】:How to check if a sympy function is odd?如何检查 sympy 函数是否为奇数?
【发布时间】:2020-04-19 14:13:02
【问题描述】:

我有点同情初学者,所以请不要假设我有太多特定于图书馆的知识。

我在一个偶数域上整合了许多指数表达式的总和,为了加快这个过程,我想忽略任何奇怪的术语。例如,表达式

        #   / pi  / pi  / pi
        #  |     |     |
        #  |     |     |   exp(-I*x1)exp(I*2*y)exp(I*5*z)  
        #  |     |     |   _____________________________ dx1 dy dz
        #  |     |     |              101
        #  |     |     |  
        # / -pi / -pi / -pi

是 0,因为 e^{i2y} 在偶数域上的积分(这适用于 e^{inx} 任何偶数 n > 0)。

我创建了几千个这样的术语并使用 Add.make_args() 将它们分成一个列表;该列表的一部分是

[exp(I*x1)/4 - 1/2 + exp(-I*x1)/4, 
exp(I*x1/2)*exp(-I*y1/2)*exp(-I*z1/2)/2 + exp(-I*x1/2)*exp(I*y1/2)*exp(I*z1/2)/2]

对于单个 exp() 函数,我知道如何使用提取参数

f = exp(I*x1)/4
print(log(numer(f)).subs(x1,1)/I)

打印出来的

1

然后我可以使用 %2==0 进行测试。但是,我不确定如何扫描多个连续的 exp() 函数,每个函数可能具有 6 个不同的积分变量之一,或者是否有更简单的方法来做到这一点。

如何检查多元 sympy 函数是否为奇数,或提取其每个 exp() 参数进行检查?

(编辑:改变了我测试整数是否为偶数的方法;添加了python标签)

【问题讨论】:

    标签: python sympy


    【解决方案1】:

    所以你试图找到具有偶数系数的虚数指数?

    v 是你的积分变量列表,eq 你的被积函数(或相同的分子),然后

    from sympy import exp, I, Symbol
    v = x, y = symbols('x y')
    eq = exp(2*x)*exp(2*I*x)*exp(3*I*y)
    print(eq.replace(lambda e:
        e.func==exp and
        e.exp.is_Mul and I in e.exp.args and
        e.exp.coeff(I).as_independent(*v)[0].is_even,
    lambda x: Symbol('o')))
    

    打印

    o*exp(2*x)*exp(3*I*y)
    

    如果将 Symbol('o') 替换为 0,则表达式将折叠为 0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 2011-07-13
      • 2015-08-03
      相关资源
      最近更新 更多