#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: Вот и все! Большое спасибо!