Я выполняю ряд символьных вычислений в блокноте Jupyter и хотел бы построить график функций и вычислить числовые интегралы, прежде чем продолжить другие символьные вычисления.
Я пытался лямбдифицировать функцию, но я могу получить графики и интегралы только в том случае, если действительно перепечатаю определение функции. Есть ли способ выполнить эти операции непосредственно с символической формой? Если нет, то есть ли способ правильно лямбдифицировать функцию с фиксированными входными параметрами a и b?
from sympy import *
from sympy.utilities.lambdify import lambdify
import matplotlib.pyplot as plt
import numpy as np
import scipy.integrate as int
x,a,b = symbols('x a b')
u = log(exp(-b*x**2/2) + 1/a)
t = np.linspace(-5,5,100)
# Attempt to lambdify u:
f = (lambda x,a=1,b=3: lambdify((x,a,b),u, modules = ['numpy','sympy']))
y = [f(t) for i in range(len(t))]
plt.plot(t,y)
int.quad(f,-5,5)
# Gives error:
Traceback (most recent call last):
File "C:\Users\...\AppData\Local\Continuum\anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3296, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "", line 2, in
y = [f(t) for i in range(len(t))]
File "", line 2, in
y = [f(t) for i in range(len(t))]
File "", line 1, in
f = (lambda x,a=1,b=3: lambdify((x,a,b),u, modules = ['numpy','sympy']))
File "C:\Users\...\AppData\Local\Continuum\anaconda3\lib\site-packages\sympy\utilities\lambdify.py", line 476, in lambdify
c = compile(funcstr, filename, 'exec')
File "", line 1
def _lambdifygenerated(-5.0, 1, 3):
^
SyntaxError: invalid syntax
# But explicitly typing u works:
f = (lambda x, a=1, b=3: log(a + exp(b*x**2/2)))
y = [f(t) for i in range(len(t))]
plt.plot(t,y)
int.quad(f,-5,5)
(126.10732269388095,1.0767576643095748𝑒−07)
Подробнее здесь: https://stackoverflow.com/questions/573 ... ith-parame