【问题标题】:How to compute the integral of a function which depends on the integral of another function如何计算依赖于另一个函数积分的函数的积分
【发布时间】:2019-12-04 02:16:24
【问题描述】:
from scipy.integrate import quad
from math import sqrt
f = lambda x, a: a**2 * x # here a is a constant.
F = lambda x, a: quad(f, 0, x, args=(a,))[0]
rho = 5

我需要计算积分

1/sqrt(F(rho,a)-F(s,a)), 

s 是从 0(下限)到 rho(上限)。

【问题讨论】:

  • 欢迎来到 StackOverflow。此问题缺少上下文或其他详细信息:请通过提供其他上下文来改进问题,最好包括您对问题的想法以及您为解决问题所做的任何尝试。这些信息可以帮助其他人识别您遇到的困难,并帮助他们写出适合您经验水平的答案。您还需要准确说明您的困难是什么,您的预期是什么,您得到了什么,以及任何追溯。

标签: python function math scipy numerical-integration


【解决方案1】:

我认为您的问题缺少您之前帖子How to use `scipy.integrate.quad` to compute integral of a function which depends on the integral of another function 中的一些信息(例如关于a)您应该通过编辑问题文本来解决这个问题。


关于当前的问题:你为什么不直接定义一个新函数g,然后引用其他函数并像F一样集成?

from scipy.integrate import quad
from math import sqrt

f = lambda x, a: a**2 * x
F = lambda x, a: quad(f, 0, x, args=(a,))[0]

rho = 5
g = lambda x, a: 1 / sqrt(F(rho, a) - F(x, a))

I = quad(g, 0, rho, args=(4,))
print(I)

打印出来:

(0.5553603672694568, 1.9614421198355103e-11)

【讨论】:

【解决方案2】:

所有积分都可以用符号计算,不需要quadF

def F(x):
    return a**2 * x**2 / 2

def g(x):
    1 / sqrt(a**2 / 2 * (rho**2 - s**2))

val = quad(g, 0, rho)

pi / sqrt(2) / a

(独立于rho)。


此外,您可以在函数之外简单地定义a。 (我一直不明白为什么quad 必须有一个args 参数。)

from scipy.integrate import quad
from math import sqrt

a = 3.14

f = lambda x: a**2 * x
F = lambda x: quad(f, 0, x, args=(a,))[0]
rho = 5

【讨论】:

  • 你能告诉我如何解决这个问题吗,stackoverflow.com/questions/57225636/…
  • 对于答案中的括号注释,如果存在外部优化问题,您可能希望拥有args。比如我想优化a,这是这个积分中的一个参数,以适应一些数据。
  • @MatthewFlamm 您仍然可以在要集成的函数之外定义a
  • 我认为您需要另一个嵌套函数来按照自己的方式进行操作。但请注意,我说的是“可能想要”,因为我认为这是风格和品味的问题。
猜你喜欢
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-05
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多