gpt4 book ai didi

python - scipy -- 如何积分线性插值函数?

转载 作者:太空宇宙 更新时间:2023-11-03 14:52:40 25 4
gpt4 key购买 nike

我有一个函数,它是对相对较大的数据集进行插值。我使用线性插值 interp1d所以有很多不光滑的尖点,比如this . quad scipy 的函数会因为尖点而发出警告。我想知道如何在没有警告的情况下进行集成?

谢谢!


谢谢大家的回答。在这里我总结了解决方案,以防其他人遇到同样的问题:

  1. 就像@Stelios 所做的一样,使用points以避免警告并获得更准确的结果。
  2. 在实践中,点数通常大于默认限制(limit=50)quad , 所以我选择 quad(f_interp, a, b, limit=2*p.shape[0], points=p)避免所有这些警告。
  3. 如果ab数据集的起点或终点不同x , 积分 p可以通过p = x[where(x>=a and x<=b)]来选择

最佳答案

quad 接受一个可选参数,称为 points。根据文档:

points : (sequence of floats,ints), optional

A sequence of break points in the bounded integration interval where local difficulties of the integrand may occur (e.g., singularities, discontinuities). The sequence does not have to be sorted.

在您的情况下,“困难的” 恰好是数据点的 x 坐标。这是一个例子:

import numpy as np 
from scipy.integrate import quad
np.random.seed(123)

# generate random data set
x = np.arange(0,10)
y = np.random.rand(10)

# construct a linear interpolation function of the data set
f_interp = lambda xx: np.interp(xx, x, y)

这是数据点和 f_interp 的图: enter image description here

现在将 quad 调用为

quad(f_interp,0,9)

返回一系列警告以及

(4.89770017785734, 1.3762838395159349e-05)

如果您提供 points 参数,即

quad(f_interp,0,9, points = x)

它没有发出警告,结果是

(4.8977001778573435, 5.437539505167948e-14)

这也意味着与之前的调用相比,结果的准确性要高得多。

关于python - scipy -- 如何积分线性插值函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44811581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com