【问题标题】:How to use exp() in integration function?如何在积分函数中使用 exp()?
【发布时间】:2019-01-09 15:20:12
【问题描述】:

这是我的代码的 sn-p。

from scipy.integrate import quad
from numpy import exp, log, inf

def f(x):
    return log(log(x))/(x*log(x**2))

val, err = quad(f, exp(), exp(2))
val

我知道代码结构正确,但我无法正确格式化 exp()。我究竟做错了什么?该函数应输出 0.069324。提前感谢您的帮助!!!

这是 WolfRamAlpha 的答案:

【问题讨论】:

  • 要使用exp 函数获取e,请使用exp(1)。即val, err = quad(f, exp(1), exp(2))
  • 使用 exp(1) 输出 .12011 接近真实解的两倍
  • 看起来上限应该是2*exp(1),而不是exp(2)。使用val, err = quad(f, exp(1), 2*exp(1)),我得到val = 0.06932400271887294
  • 此外,numpy 将e 的值包含为预定义常量np.e。所以你也可以使用val, err = quad(f, np.e, 2*np.e)
  • 另外,请正确缩进和格式化您的代码。谢谢!

标签: python python-3.x numpy scipy numerical-integration


【解决方案1】:

只需将exp() 替换为exp(1) 即可。顺便说一句,一旦你找到了正确的函数,你也可以使用一个线性 lambda 函数。您的代码非常好。我想只是分享另一种可能的方式来实现同样的事情。

f = lambda x: np.log(np.log(x))/(x*np.log(x**2))
val, err = quad(f, exp(1), 2*exp(1))

【讨论】:

  • 使用 exp(1) 输出 .12011 这几乎是真正解决方案的两倍...现在检查我的实际功能...
  • exp(1) 是正确的方法。我怀疑这个功能
  • 同意 exp(1) 就是你的做法。我的代码的问题是我放 exp(2) 而不是 2*exp(1) 的上限。泰!
  • 很惊讶在 Wolfram Alpha 快照上看到这个印刷错误
【解决方案2】:

numpy 的 exp 是一个函数,而不是一个数字。你想要

exp(1) = e
exp(2) = e**2

或许

import numpy as np
np.e
np.e**2

作为您的集成限制。

这就是说,我明白了

from numpy import exp, log

def f(x): 
    return log(log(x))/(x*log(x**2))

val, err = quad(f, exp(1), exp(2))
val

返回 0.12011325347955035

这绝对是这个积分的值。您可以更改变量来验证

val,err = quad(lambda x: log(x)/(2*x),1,2) 

结果相同

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2021-01-03
    • 1970-01-01
    相关资源
    最近更新 更多