gpt4 book ai didi

python - 在 sympy 中将积分分布在求和上

转载 作者:太空宇宙 更新时间:2023-11-04 03:55:57 28 4
gpt4 key购买 nike

我有以下代码:

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() 仅展开积分的内部表达式。

最佳答案

SymPy 中没有直接执行此操作的函数 (yet),但您自己执行此操作并不难。

最简单的方法就是手动完成。如果您知道积分是什么,则可以使用 subs 替换它。

如果您不知道积分是什么并且不想输入它,那么这种方式很烦人。一种不是特别通用的更好方法是

a, b = symbols('a b', cls=Wild)
expr.replace(Integral(a + b, x), Integral(a, x) + Integral(b, x))

这只会将一个积分一分为二,所以如果你想分割得更多,你需要让它更通用,或者多次应用它。如果积分是关于不同的变量,你需要改变它。

对于更通用的版本,我们可以使用 SymPy 中未记录的功能,Transform 对象(事实上,文档甚至不在 Sphinx 中,我必须向您指出 source code更多信息):

from sympy.core.rules import Transform
def split(integ):
return Add(*[integ.func(term, *integ.args[1:]) for term in Add.make_args(integ.args[0])])
expr.xreplace(Transform(split, lambda i: isinstance(i, Integral))

Transform 创建一个使用规则将表达式转换为其他表达式的对象。这里的规则是 split,它使用 .args 分解一个积分,并使用 Add.make_args 将其分解为加法,然后创建新的使用剩余参数(它们是积分的变量和限制)的积分。 lambda i: isinstance(i, Integral) 告诉 Transform 仅应用于 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
⌡ ⌡ ⌡

关于python - 在 sympy 中将积分分布在求和上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18434892/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com