2024-09-30 01:30:08 发布
网友
我有以下代码:
a2 = Rational(1, alpha2)*integrate(phi2*wx12, (x,-1,1))
结果是:
现在我要将积分分布,得到:
1 1 ⌠ ⌠ ⎮ wx₁₂(x) ⎮ 2 5⋅⎮ ─────── dx 5⋅⎮ x ⋅wx₁₂(x) dx ⎮ 3 ⌡ ⌡ -1 -1 ────────────────── - ─────────────── 2 2
有人知道怎么做吗? 使用a2.expand()只扩展了积分的内部表达式。在
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以获取更多信息):
Transform
Transform创建一个使用规则将表达式转换为其他表达式的对象。这里的规则是split,它使用.args分解一个积分,并使用Add.make_args将其拆分为加法,然后使用剩余的参数(即积分的变量和极限)创建新的积分。lambda i: isinstance(i, Integral)告诉Transform只应用于整型对象。Transform返回一个适合传入xreplace的对象,该对象执行替换。在
split
.args
Add.make_args
lambda i: isinstance(i, Integral)
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 ⌡ ⌡ ⌡
SymPy中没有一个函数可以直接执行此操作(yet),但自己也不难做到。在
最简单的方法就是手动操作。如果你知道积分是什么,你可以用subs代替它。在
如果你不知道积分是多少,又不想把它打印出来,那么这种方法很烦人。一个更好的方法,不是特别普遍的,应该是
这只会将一个积分拆分为两个,所以如果你想拆分得比这个多,你需要使它更通用,或者多次应用它。如果积分与另一个变量有关,你需要改变它。在
对于更一般的版本,我们可以在SymPy中使用一个未被充分记录的特性,
^{pr2}$Transform
对象(事实上,文档甚至不在Sphinx中,我必须让您指向source code以获取更多信息):Transform
创建一个使用规则将表达式转换为其他表达式的对象。这里的规则是split
,它使用.args
分解一个积分,并使用Add.make_args
将其拆分为加法,然后使用剩余的参数(即积分的变量和极限)创建新的积分。lambda i: isinstance(i, Integral)
告诉Transform
只应用于整型对象。Transform
返回一个适合传入xreplace
的对象,该对象执行替换。在下面是一个例子
相关问题 更多 >
编程相关推荐