2016-04-20 133 views
2

我必須在複雜積分中使用dirac delta,並希望看到它如何與簡單的情況一起工作,但它返回了錯誤的答案。任何線索我在下面做錯了什麼?DiracDelta沒有給出正確的結果

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,而不應該。

+0

同意,答案應該是一個δ函數爲零下的面積和集中在X = 1,其中乘數X沒有改變任何東西。 – roadrunner66

回答

5

看來sympy功能不兼容scipy集成。一個需要使用sympy集成。下面給出了正確的答案

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

雖然,我不知道如果sympy.integrate是強大和靈活的爲scipy.integrate

+1

**符號**集成(由sympy完成)和**數字**集成(由scipy完成)是完全不同的事情。將像DiracDelta這樣的抽象對象粘貼到數字集成例程中,就像將手指伸入電源插座;這件事不屬於那裏。 – 2016-04-20 22:02:23

+1

啊,打我吧。基本上,scipy的整合是一種*數值*整合,並且在一般情況下不會與sympy完美搭配,當我們擁有像delta功能那樣獨特的東西時更是如此。 – DSM

+0

@DSM你的回答比較好,請取消刪除。 – 2016-04-20 22:02:59

1

胡書的回答是正確的。我會補充說,狄拉克δ函數是一種將函數評估表示爲積分的符號方法。它作爲一個符號抽象是有用的,但是如果你只關心數值評估,那麼就做功能評估。也就是說,不是

​​

只使用

f(1) if a <= 1 <= b else 0 
相關問題