2011-10-29 99 views
1

我這樣做代碼:sympy - 不能讓nsolve方法工作

from scitools.std import * 
from sympy import * 

x=Symbol('x') 
#Integral function 
#def f(x):    --> I also tried this 
# return exp(-x**2) 

f=exp(-x**2) 

intac=integrate(f,(x,0,1)) 
print(nsolve(f,x,1)) 

的解釋給我:「轉讓之前引用的局部變量x」

如果我嘗試nsolve(f,x,(0,1))它給了我:「不能給定的公差範圍內發現的根......」

(另外,我想findroot(f,(0,1))沒有任何成功(我進口from mpmath import *然後mp.dps = 30; mp.pretty = True)。

回答

3

我對nsolve的調用語法一無所知,但我可以告訴你爲什麼sympy和mpmath都找不到函數的真正根:沒有。如果f(x)= exp(-x^2),則對於任何實數x,f(x)> 0。 f(0)= 1,隨着abs(x)在任一方向變大,函數都會減小,但它總是正的。當然,[0,1]中沒有根。

可能值得在the normal distribution上閱讀。

整合似乎理所應當的工作:

>>> integrate(f,(x,0,1)) 
    pi**(1/2)*erf(1)/2 
+0

:是的,你是對的,我完全錯過了,但我怎麼能有此數值!? 「integrate(f,(x,0,1))」這給了我「pi **(1/2)* erf(1)/ 2」。我想要一個數字。 – George

+1

@George在其上使用.evalf()(例如integrate(f,(x,0,1))。evalf())。 – VPeric

+0

@VPeric:多數民衆贊成!非常感謝! – George