sympy — не удается заставить метод nsolve работать

#python #sympy #mpmath

#python #sympy #mpmath

Вопрос:

Я сделал этот код:

 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 ).

Ответ №1:

Я ничего не знаю о синтаксисе вызова nsolve, но я могу сказать вам, почему ни sympy, ни mpmath не могут найти реальный корень функции: их нет. Если f (x) = exp(-x ^ 2), то f (x)> 0 для любого реального x. f (0) = 1, и функция уменьшается по мере увеличения abs (x) в любом направлении, но она всегда положительна. Конечно, в [0,1] нет корня.

Возможно, стоит ознакомиться с нормальным распределением.

Интеграция, похоже, работает так, как и должно быть:

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

Комментарии:

1. : Да, вы правы! Я полностью пропустил это! Но как я могу получить числовое значение из этого? «интегрировать (f,(x,0,1))» Это дает мне «pi ** (1/2) * erf(1) / 2». Мне нужно число.

2. @George используйте .evalf() для него (например. integrate(f,(x,0,1)).evalf() ) .

3. @VPeric: Вот и все! Большое спасибо!