【问题标题】:How to integrate a function for multiple upper limits using Python?如何使用 Python 集成多个上限的函数?
【发布时间】:2021-03-19 09:19:11
【问题描述】:

假设我有一个被积函数,我想使用各种上限对函数进行积分。在我的代码中,我的上限为 1。但我想使用 1、2、4、6 来评估积分。我该怎么做?我使用地图功能吗?我尝试将上限设置为数组,但出现各种错误。这是我只使用 1 的代码。感谢任何帮助。

from scipy.integrate import quad
def integrand(x, a, b):
    return a*x**2 + b

a = 2
b = 1
I = quad(integrand, 0, 1, args=(a,b))

【问题讨论】:

  • 为什么不多次调用该函数呢?我真的不明白你希望在这里完成什么。这个问题是否特定于集成功能的任务?还是只是使用不同输入获得多个结果的一般技术问题?
  • 好吧,因为我想绘制结果图。但我想要一个一般情况,因为如果我必须集成许多输入怎么办?但是是的,我想要一种针对不同输入的通用技术。
  • 您似乎正在从functools 库中寻找类似partial 的东西。有了它,您可以定义一个新函数(例如I2),所有输入都固定,除了您的上限
  • 我想,我的问题是如何分配我想要评估的上限值列表中的每个值。有点像 MATLAB 中的 for 循环。我从来没有真正使用过 Python,这就是原因。

标签: python arrays integration


【解决方案1】:

您可以定义一个函数来简单地调用 quad 并使用您想要的每个上限。

from scipy.integrate import quad
# typing is just for clarity
from typing import List

def integrand(x, a, b):
    return a*x**2 + b

def multi_integrate(a,b,lb:float, ub_ls:List[float]) -> List:
    results = []
    # loop through all upper bounds
    for ub in ub_ls:
        results.append(quad(integrand,lb,ub,args=(a,b)))
    return results

# variables
a = 2
b = 1
# upper bound and list of lower bounds
lb = 0
ub_ls = [1,2,4,6]
# get a list of your integral results
I = multi_integrate(a,b, lb,ub_ls)

我希望这是您想要的功能。

【讨论】:

  • 是的,这就是我想要的!但是为什么我在“b:float”中得到一个语法错误......特别是在冒号中?
  • 抱歉,我最初的帖子误解了 ab 是什么,因为它们传统上表示上限和下限,但看起来您将它们用作其他变量。我编辑了我的帖子来纠正这个问题,但显然你在我这样做之前就抓住了代码。它现在应该可以工作了,因为您正在为 a、b 和下限提供单个数字,并为上限提供一个列表。
  • 我收到此错误:$python main.py 文件“main.py”,第 8 行 def multi_integrate(a,b,lb:float, ub_ls:List[float]) -> 列表:^ SyntaxError: 无效语法
  • 您是否包含了from typing import List 声明?我只是为了清楚起见添加了这些类型,但如果您不熟悉它们,它们可能会导致问题。您可能只想删除它们,将行 def multi_integrate(a,b,lb:float, ub_ls:List[float]) -> List: 更改为 def multi_integrate(a,b,lb,ub_ls): 以查看是否导致问题。这也可能是 int->float 的问题。
猜你喜欢
  • 2016-03-10
  • 2021-08-26
  • 2016-02-23
  • 2021-06-25
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 2021-10-25
相关资源
最近更新 更多