【问题标题】:DiracDelta not giving correct resultDiracDelta 没有给出正确的结果
【发布时间】:2016-04-20 21:25:01
【问题描述】:

我必须在一个复杂的积分中使用 dirac delta,并希望看看它如何在一个简单的情况下工作,但它返回了错误的答案。任何线索我在下面做错了什么?

from sympy import DiracDelta
from scipy import integrate

def f(x):
     return x*DiracDelta(x-1)

b, err = integrate.quad(f, 0, 5)    
print b

这不应该返回0.0

【问题讨论】:

  • 同意,答案应该是 1,delta 函数下的区域为零并集中在 x=1 附近,其中乘法器 x 没有改变任何东西。

标签: python sympy integrate


【解决方案1】:

似乎sympy 函数与scipy 集成不兼容。需要使用sympy 集成。下面给出正确答案

from sympy import *
x = Symbol('x')
print integrate(x*DiracDelta(x-1), (x, 0, 5.0))    

虽然,我不确定sympy.integrate 是否与scipy.integrate 一样强大和多才多艺。

【讨论】:

  • Symbolic 集成(由 sympy 完成)和 numeric 集成(由 scipy 完成)是非常不同的事情。将像 DiracDelta 这样的抽象对象插入数字积分例程就像将手指插入电源插座一样。那东西不属于那里。
  • 啊,打败我了。基本上,scipy 的集成是一个 numerical 集成,通常不能很好地与 sympy 配合使用,当我们有像 delta“函数”这样特殊的东西时更是如此。
  • @DSM 你的回答更好,请取消删除。
【解决方案2】:

胡树的回答是正确的。我要补充一点,Dirac δ 函数是一种将函数评估表示为积分的符号方法。它作为符号抽象很有用,但如果您只关心数字评估,只需执行函数评估即可。那是代替

b
⌠
⎮ f(x)⋅DiracDelta(x - 1) dx
⌡
a

随便用

f(1) if a <= 1 <= b else 0

【讨论】:

    猜你喜欢
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    • 2015-11-12
    • 2012-08-30
    • 2016-04-15
    相关资源
    最近更新 更多