首页 > 解决方案 > 是否可以强制 SymPy 计算积分,或者告诉我为什么它不能计算积分?

问题描述

我正在尝试计算分段函数的积分,特别是拉普拉斯变换。

w_k = k*t, 0 <= t <= 1/k
      1,   otherwise

因此,我尝试将其集成如下:

from sympy import *
t, k = symbols('t k', positive=True)
w_k = Piecewise((k*t, (0 <= t)&(t <= 1/k)), (1, True))

integrate(w_k * exp(-s*t), (t, 0, oo)).doit()
Out:
∞                         
⌠                         
⎮ ⎧     -s⋅t          1   
⎮ ⎪k⋅t⋅ℯ      for t ≤ ─   
⎮ ⎪                   k   
⎮ ⎨                     dt
⎮ ⎪   -s⋅t                
⎮ ⎪  ℯ        otherwise   
⎮ ⎩                       
⌡                         
0                         

使用laplace_transform给了我同样的结果。

我知道有时需要满足某些条件才能使 SymPy 集成该函数,但我真的不确定除了正变量之外还需要什么这个函数。有什么方法可以强制 SymPy 计算积分,或者解释为什么它不可能?

标签: pythonsympysymbolic-math

解决方案


尝试这个:

import math
from sympy import *
s = Symbol('s', positive=True)
t = Symbol('t', positive=True)
k = Symbol('k', positive=True)
function = Piecewise((k*t, (0 <= t)&(t <= 1/k)), (1, True))
result = integrate(function * exp(-s*t), (t, 0, math.inf))

输出:

k/s**2 + exp(-s/k)/s + (-k - s)*exp(-s/k)/s**2

推荐阅读