2011-10-29 7 views
1

Je l'ai fait ce code:sympy - ne peut pas faire fonctionner la méthode 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)) 

L'interprète me donne: "variable locale x référencées avant l'affectation"

Si j'essaie nsolve(f,x,(0,1)) il me donne: " n'a pas pu trouver racine dans la tolérance donnée ... »

(aussi, j'ai essayé findroot(f,(0,1)) sans succès (je from mpmath import * puis importé mp.dps = 30; mp.pretty = True).

Répondre

3

Je ne connais rien à la syntaxe d'appel de nsolve, mais je peux vous dire pourquoi ni sympy ni mpmath ne peuvent trouver une racine réelle de la fonction: il n'y en a pas. Si f (x) = exp (-x^2), alors f (x)> 0 pour tout x réel. f (0) = 1 et la fonction diminue au fur et à mesure que abs (x) grossit dans les deux sens, mais c'est toujours positif. Il n'y a certainement pas de racine dans [0,1]. Il peut être utile de lire le the normal distribution.

L'intégration semble fonctionner comme il se doit:

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

: Oui, vous avez raison je suis totalement raté Mais comment puis-je avoir une valeur numérique de ce!? "integra (f, (x, 0,1))" Cela me donne le "pi ** (1/2) * erf (1)/2" .Je veux un nombre. – George

+1

@George utilise .evalf() dessus (par exemple, integra (f, (x, 0,1)). Evalf()). – VPeric

+0

@VPeric: C'est bon, merci beaucoup! – George

Questions connexes