- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
函数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/
我有一个 DataFrame 列表如下: Device TimeSec Current 1 0.1 0.02 1 0.25 0.05 1
我在使用 Matlab 的 trapz 函数时得到了一个奇怪的结果。我有两个变量,zptest 和 omega,都是正数,3000x2x1 数组。 当我绘制 zptest vs omega (plot
我在 matlab 中的代码中有一个小错误,我从单个值(而不是数组)开始积分循环。 我注意到,如果我给出 trapz(1,1),它几乎立即给出零(对于 trapz(x,y) 应该如此),但是计算它所花
我有以下设置: a.T = [[0. 0.4 0.8 1.2 1.6 1. 1.2 1.4 1.6 1.8 0.5 0.9 1.3 1.7 2.1 2. ]] b.T = [[0. 0.4 0.
我有一个函数定义为: def probability(x,t,i): return np.real(np.conjugate(TD_Psi(x,t,i))*TD_Psi(x,t,i)) 到目前
函数scipy.integrate.trapz使用 1 阶 Newton-Cotes 公式,如 scipy 文档中所述。然而,在推导该公式时,通常假设 被积函数是连续函数,并且 已知被积函数值的点是不
我有一些数据,我想首先按某个间隔对目标列进行分组,然后按索引间距整合目标列。 import numpy as np import pandas as pd from scipy import inte
我目前正在尝试集成一个由 XY 点对组成的函数。欢迎查看:https://dl.dropboxusercontent.com/u/2635172/example.csv 我正在使用 pandas 来读
当使用numpy的trapz函数时:在相同的x值处定义一个新的(不同的)y值,结果不是我最初期望的。 >>> import numpy as np >>> np.trapz([1,1,1],[0,1,
我有一组点,当我绘制这些点时,我得到了下图。我想找到图表下方的区域,但是我不确定 scipy.integrate.simps 还是 numpy.trapz 更合适。 有人可以告诉我这两个函数之间的数学
我是一名优秀的程序员,十分优秀!