Python 辛积分中求和的分布积分

Python 辛积分中求和的分布积分,python,math,algebra,sympy,integral,Python,Math,Algebra,Sympy,Integral,我有以下代码: a2 = Rational(1, alpha2)*integrate(phi2*wx12, (x,-1,1)) 结果是: 1 ⌠ ⎮ ⎛ 2 1⎞ 5⋅⎮ ⎜x - ─⎟⋅wx₁₂(x) dx ⎮ ⎝ 3⎠ ⌡ -1 ─────

我有以下代码:

a2 = Rational(1, alpha2)*integrate(phi2*wx12, (x,-1,1))
结果是:

  1                     
  ⌠                     
  ⎮  ⎛ 2   1⎞           
5⋅⎮  ⎜x  - ─⎟⋅wx₁₂(x) dx
  ⎮  ⎝     3⎠           
  ⌡                     
  -1                    
────────────────────────
           2            
现在我想分配积分来得到:

                       1            
  1                    ⌠            
  ⌠                    ⎮  wx₁₂(x)   
  ⎮   2              5⋅⎮  ─────── dx
5⋅⎮  x ⋅wx₁₂(x) dx     ⎮     3      
  ⌡                    ⌡            
  -1                   -1           
────────────────── - ───────────────
        2                   2       
有人知道怎么做吗?

使用
a2.expand()
仅扩展积分的内部表达式。

Symphy中没有函数可以直接执行此操作(),但自己执行并不困难

最简单的方法就是手动操作。如果你知道积分是什么,你可以用subs替换它

如果你不知道积分是什么,并且你不想把它打印出来,那么这种方法很烦人。一个不是特别普遍的更好的方法是

a, b = symbols('a b', cls=Wild)
expr.replace(Integral(a + b, x), Integral(a, x) + Integral(b, x))
这只会将一个积分一分为二,因此,如果您想将积分一分为二,则需要使其更通用,或者多次应用它。如果积分是关于另一个变量的,你需要改变它

对于更通用的版本,我们可以在SymPy中使用一个文档不足的功能,即
转换
对象(事实上,文档甚至不在Sphinx中,我必须向您指出以获取更多信息):

Transform
创建使用规则将表达式转换为其他表达式的对象。这里的规则是
split
,它使用
.args
分解一个积分,并使用
Add.make_args
将其拆分为一个加法,然后使用剩余的参数(即积分的变量和限制)创建新积分。
lambda i:isinstance(i,Integral)
告诉
变换
仅应用于积分对象
Transform
返回一个对象,该对象适合传入执行替换的
xreplace

这里有一个例子

In [20]: expr
Out[20]:
⌠
⎮ ⎛ 2        ⎞
⎮ ⎝x  + x + 1⎠ dx + 3
⌡

In [21]: expr.xreplace(Transform(split, lambda i: isinstance(i, Integral)))
Out[21]:
                  ⌠
⌠        ⌠        ⎮  2
⎮ 1 dx + ⎮ x dx + ⎮ x  dx + 3
⌡        ⌡        ⌡

进入这条线并不容易:-)为什么?标题不够描述性?只需转到并尝试单击您的线程:-)我没有看到任何特殊内容…在FireFox上,您不能通过单击标题来输入您的线程。谢谢@asmeurer!尽管有很多积分,但我最终还是手工完成了:)。变换对象似乎非常有用。
In [20]: expr
Out[20]:
⌠
⎮ ⎛ 2        ⎞
⎮ ⎝x  + x + 1⎠ dx + 3
⌡

In [21]: expr.xreplace(Transform(split, lambda i: isinstance(i, Integral)))
Out[21]:
                  ⌠
⌠        ⌠        ⎮  2
⎮ 1 dx + ⎮ x dx + ⎮ x  dx + 3
⌡        ⌡        ⌡