【问题标题】:Result of a definite integral as a function of extra parameters作为额外参数函数的定积分结果
【发布时间】:2020-02-03 21:06:36
【问题描述】:

我正在尝试对依赖于 E 和 x 的函数积分关于 dE 的定积分,x 是我稍后将使用的另一个参数。我定义了一个可以帮助我解决这个问题的 x 函数,但它似乎不起作用。当我给新函数一个特定的值——例如 1 或 10——它总是返回 0。这是我的代码:

%matplotlib inline
import matplotlib.pyplot as plt
from scipy.integrate import quad
import numpy as np
from numpy import pi
from numpy import arange

gg=100.0
ms=100.0

def integrand(E, xx):
    return (gg/2*pi)*E*(E**2-ms**2)**(1/2)/(np.exp(E*xx*ms)-1)

def nn(x):
    return quad(integrand, ms, np.inf, args=(x))  ## quad(funcion, lim inf, lim sup, args)

我需要的是以后能够以参数 x 为变量调用函数 nn。

【问题讨论】:

  • 您需要为被积函数提供E 的值。如果nn 只接受x 作为参数,那么它需要弄清楚E 是什么,以便将其添加到args
  • 另外,(x) 不是一个元组,因为 Python 解析括号的方式有些怪异。你可能想要(x,)
  • @MatthewWoodruff 但是 E 是我的积分变量,它可以取 ms = 100 到 Inf 之间的任何值。
  • 哦,我知道E,这是有道理的。但是,请确保 args 是一个元组。但无论如何,你要求 numpy 在 100 和 inf 之间进行数值积分?我不知道这是不可能的,但我看不出 numpy 如何正确地做到这一点。您是否尝试过使用有限上限?

标签: python numerical-integration


【解决方案1】:

您可以简单地定义函数之外的所有值:

from scipy.integrate import quad
import numpy as np
from numpy import pi

gg = 100.0
ms = 100.0
xx = 5.0
ms = 1.0


def integrand(E):
    return (gg / 2 * pi) * E * (E ** 2 - ms ** 2) ** (1 / 2) / (np.exp(E * xx * ms) - 1)


val, err = quad(integrand, ms, np.inf)
print(val)
0.16712443596152543

【讨论】:

    猜你喜欢
    • 2021-07-22
    • 2016-01-26
    • 2014-05-29
    • 2021-10-17
    • 2011-06-11
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 2021-10-31
    相关资源
    最近更新 更多