【问题标题】:Is it possible to multiply lambda functions in python for scipy.integrate?是否可以在 python 中为 scipy.integrate 乘以 lambda 函数?
【发布时间】:2020-09-04 14:24:12
【问题描述】:

我想集成两个函数 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 都这样做,这似乎有点低效。

有没有更简洁的方法来做到这一点?

【问题讨论】:

  • Python 函数,无论是否为 lambda,都不是符号的。如您所见,没有函数乘法之类的东西。您担心什么效率低下?运行?还是你的键盘时间?

标签: python lambda scipy


【解决方案1】:

如果你想找到一个确定的积分(只是积分结果值,当给定限制时,就像你的情况一样)你不需要任何符号,事实上它只会使你的生活复杂化并减慢计算速度。

为了找到 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, 1)
print(integral)

我只使用 f1 和 f2 进行演示,因为您定义了更多实际尝试集成的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 2016-08-09
    • 2015-11-26
    • 1970-01-01
    • 2015-11-08
    相关资源
    最近更新 更多