首页 > 解决方案 > R 相当于 scipy.integrate.simps()?

问题描述

我正在寻找对一个函数进行一些数值积分,其中我只有来自该函数的样本,并且不能生成任意新样本。我知道在 python 世界中,这可以通过 scipy.integrate.simps() 来实现,但我的工作流程目前在 R 中。关于 R 函数/包的任何建议来实现这一点?

标签: pythonrscipynumerical-methodsintegral

解决方案


假设您有一个 x 值向量和一个 y 值向量,您可以相当容易地应用辛普森规则。

simpson <- function(x, y)
{
    if(length(x) < 5)
        stop("Must have at least 5 values")
    if(length(x) %% 2 == 0)
        stop("Number of values must be odd")
    ord <- order(x)
    x <- x[ord]
    y <- y[ord]
    diffs <- diff(x)
    delta <- mean(diffs)
    if((max(diffs) - min(diffs))/delta > 1e-6)
        stop("X-values must be equally spaced")
    coefs <- c(1, 4, rep(c(2, 4), (length(x) - 3)/2), 1)
    sum(coefs*y)*delta/3
}

simpson(1:7, (1:7)^2
# [1] 114

推荐阅读