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
⌡ ⌡ ⌡