gpt4 book ai didi

python - scipy.integrate.trapz 和不连续函数

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:36 26 4
gpt4 key购买 nike

函数scipy.integrate.trapz使用 1 阶 Newton-Cotes 公式,如 scipy 文档中所述。然而,在推导该公式时,通常假设

  • 被积函数是连续函数,并且
  • 已知被积函数值的点是不同的。

但是,我尝试近似函数 f:[0,2] --> [0,2] 的积分,由 f(x) = 0 if x < 1 else 2 定义通过调用

scipy.integrate.trapz([0, 0, 2, 2], [0, 1, 1, 2])

并获得了正确的结果( 2.0 )。在上面的调用中,

  • 被积函数不是连续函数,并且
  • 已知被积函数值的点并不不同。

Can this "hack" be safely used in the way presented in the example?

(对于每个不连续点 x ,在点列表中插入 x 两次,并将被积数的左极限和右极限插入到值列表中的相应位置。)

最佳答案

trapz中重复x值的效果与在该值处分割积分区间,并将trapz分别应用于每个部分相同:

from scipy.integrate import trapz
trapz([0, 0, 2, 2], [0, 1, 1, 2])
trapz([0, 0], [0, 1]) + trapz([2, 2], [1, 2])

两个结果是相同的。事实上,对像您这样的分段函数进行积分的最佳方法是在不连续处分割积分区间,因为这样您就在积分两个连续函数。你的做法是正确的。

理论内容

从某种意义上说,你的“黑客”是没有必要的。对于任何黎曼可积函数,梯形规则都会收敛到正确的积分值,它涵盖了所有分段连续函数等。教科书仅提供连续函数的证明是教科书作者的选择,希望有一个更简单的证明。可以证明一个更一般的定理。

也就是说,对于实践中出现的任何函数,只要 x 值形成积分区间的足够精细的划分,梯形规则的输出将接近其积分。例如,如果您采用足够多的点,则均匀间隔的点始终有效。

然而,在实践中人们关心的是收敛速度,当函数不连续时,收敛速度会明显变差。从这个实用的角度来看,将每个不连续点包含两次,以 y 值作为左右界限,对于梯形规则的准确性有显着的提高。

关于python - scipy.integrate.trapz 和不连续函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38205462/

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