R相当于scipy.integrate.simps()?
R equivalent to scipy.integrate.simps()?
我想对一个函数进行一些数字积分,我只有函数的样本,不能生成任意的新样本。我知道在 python 宇宙中,这可以通过 scipy.integrate.simps() 实现,但我的工作流程目前在 R 中。关于 R functions/packages 实现此目的的任何建议?
假设您有一个 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
我想对一个函数进行一些数字积分,我只有函数的样本,不能生成任意的新样本。我知道在 python 宇宙中,这可以通过 scipy.integrate.simps() 实现,但我的工作流程目前在 R 中。关于 R functions/packages 实现此目的的任何建议?
假设您有一个 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