我一直在使用Python中的符号表达式进行工作,并且得出了一个我想在确定的时间间隔内进行集成的表达式。该表达式包含pi
。
麻烦的是,我无法弄清楚如何将该表达式转换为可以作为scipy.integrate.quad
的参数输入的函数。我的代码的相关部分如下:
from sympy import *
import numpy as np
import scipy.integrate as integrate
from sympy.utilities.lambdify import lambdify
# this defines the symbols that
# we will be using in our computations:
x, y, g, y1, a0, a1, a2 = symbols('x y g y1 a0 a1 a2')
# this defines what a0 and a1,
# and what y and y' are:
a0 = 2
a1 = -((2/pi)+(pi*a2))
y = a0+a1*x+a2*x**2
y1 = y.diff(x)
# this defines the integrand that
# here represents the Lagrangian:
L=sqrt((1+y1**2)/(2*g*y))
# this differentiates the above with
# respect to a2, to define the integrand:
difL = L.diff(a2)
我要整合的是difL
。我尝试通过以下方式将其定义为函数:
def integrand(a2):
return difL
f = lambdify(x, integrand(a2))
无济于事。所以我的问题是:如何将difL
转换为可以使用scipy.integrate.quad
进行集成的函数?
而且,作为免责声明,我是Python的新手,所以如果我错误地使用了术语,请告诉我。
答案 0 :(得分:0)
您不需要scipy,sympy完全能够进行数值积分。现在,您有很多未定义的变量(例如g
),因此我将构建一个更简单的示例,并让您适应自己的问题。
from sympy import *
from sympy.abc import x, a
# x is variable, a is parameter
y = x**2 + a
# integrate over x from 0 to 1; then evaluate with the value of the parameter
integrate(y, (x, 0, 1)).evalf(subs={a: -4})