是否可以在python中为scipy.integrate乘以lambda函数?

问题描述

我想集成两个功能x(t)*p1(t)的乘积,因为t从-1到1。 目前,我已将此代码编写为:

import scipy.integrate as s
import numpy as np

p1 = lambda t: 1
p2 = lambda t: t
p3 = lambda t: (3*(t**2)-1)/2

x = lambda t: abs(t)

integral = s.quad(x*p1,-1,1)
print(integral)

但是,出现以下错误

TypeError: unsupported operand type(s) for *: 'function' and 'function'

是否可以象征性地组合两个lambda函数以进行集成?我可以定义一个函数xp1 = lambda t: x(t)*p1(t),但是由于我必须对所有pn都这样做,所以这似乎效率很低。

是否有一种更清洁的方法

解决方法

如果您要查找确定的积分(仅当给出极限时(如您的情况),只需积分结果值),就不需要任何符号,实际上,这只会使您的生活复杂化并减慢计算速度。

要找到f1()f2()的乘法的确定积分,您只需执行以下操作:

import scipy.integrate as s
import numpy as np

def f1(t):
    return np.abs(t)

def f2(t):
    return (3*(t**2)-1)/2

def f(t):
    return f1(t) * f2(t)

integral = s.quad(f,-1,1)
print(integral)
# or,if you like lambda functions ;-)
integral = s.quad(lambda t: f1(t)*f2(t),1)
print(integral)

在这里我仅使用f1和f2进行演示,因为您定义了实际上要集成的更多功能。