问题描述
我想集成两个功能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进行演示,因为您定义了实际上要集成的更多功能。