Python:如何将符号表达式转换为函数,以便可以对其进行数字积分?

时间:2018-11-28 02:04:02

标签: python numpy scipy sympy numerical-methods

我一直在使用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的新手,所以如果我错误地使用了术语,请告诉我。

1 个答案:

答案 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})