【问题标题】:How to calculate improper integral in python?如何在python中计算不正确的积分?
【发布时间】:2020-10-31 00:57:02
【问题描述】:

如何计算这个积分的值:

f_tu(t) 以numpy.array 给出。图表如下所示:

我该如何实现呢? 我能找到的所有东西看起来都像这样

from scipy.integrate import quad
def f(x):
    return 1/sin(x)
I = quad(f, 0, 1)

但我在那里有一个数组,而不是像 sin 这样的特定函数。

【问题讨论】:

  • numpy数组的格式是什么?
  • 你能给我们看一个你正在谈论的数组的例子吗?解决方案可能取决于此。

标签: python numpy scipy integral


【解决方案1】:

sklearn.metrics 的 auc 怎么样?

import numpy as np

import numpy as np

from scipy.integrate import quad

from sklearn.metrics import auc

x = np.arange(0, 100, 0.001)
y = np.sin(x)

print('auc:', auc(x,y))

print('quad:', quad(np.sin, 0, 100))

auc:0.13818791291277366
四边形:(0.1376811277123232,9.459751315610276e-09)

【讨论】:

  • 我仍然对 OP 如何将不正确的积分作为数组感到困惑。
  • 给定函数f_tu,我没有将整数作为数组给出。还是谢谢
【解决方案2】:

好的,所以你有一个讨厌的无穷积分。以下是我的处理方式:

import numpy as np
from scipy.integrate import quad

def f(x):
return(1/(x**2)) #put your function to integrate here

print(quad(f,0,np.Infinity)) #integrates from 0 to infinity

这将返回两个值。第一个是积分的估计值,第二个是积分的近似绝对误差,有用知道的。

【讨论】:

  • 问题是你明确定义了f,但我的是一个点数组。如果我只是在那里插入我的函数,它会给我一个明显的错误:ValueError: invalid callable given
  • 那为什么要积分不正确的积分呢?数组中没有最大值吗?是否要对函数进行近似然后积分?
  • 我不知道如何做到最好。正如我已经说过的那样,f 被作为数组在限制 [0; 1] 步长为 0.01。可能是找到定积分更好,或者我需要近似值
  • 我做了另一个答案,希望对你有用。
【解决方案3】:

如果你想集成一个 numpy 数组,这里有一个简单的解决方案:

import numpy as np

print(np.trapz(your numpy array here))

【讨论】:

    猜你喜欢
    • 2020-03-19
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 2014-10-24
    • 2011-02-06
    • 1970-01-01
    • 2014-01-04
    相关资源
    最近更新 更多