2016-03-12 103 views
0

我想從0〜1整合x**(-2/3)*(x-1)**(1/3),我已經改變了變量,並使用Simpson規則解決它,現在我想嘗試一些更快的方法。與scipy集成

我的代碼:

x1 = lambda x: x**(-2/3)*(x-1)**(1/3) 
integrate.quad(x1,0,1) 

錯誤:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python3/dist-packages/scipy/integrate/quadpack.py", line 281, in quad 
    retval = _quad(func,a,b,args,full_output,epsabs,epsrel,limit,points) 
    File "/usr/lib/python3/dist-packages/scipy/integrate/quadpack.py", line 345, in _quad 
    return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit) 
quadpack.error: Supplied function does not return a valid float. 

我該如何解決呢?

+0

請問您是否顯示'x1(0)'的輸出? – soon

+0

是的,它是一個奇點。可以只集成'lambda x:x **( - 2/3)',四元函數可以處理奇點,但我不知道這個。 – ShaoHui

+1

你確定你的功能正常嗎?因爲'x **( - 2/3)'和'x **( - 2./3。)'是不同的功能。 –

回答

2

即使標題說與numpy集成,我想你的意思是scipy ..你的問題是你的函數中有複數。例如,零件(x-1)**(1/3)對於[0,1]中的x變得複雜,但scipy.integrate.quad不處理複數。見例如Use scipy.integrate.quad to integrate complex numbers瞭解更多信息。

+0

謝謝,它的工作原理。這是scipy ..我犯了一個錯誤。 – ShaoHui