将函数与多个变量集成

integrating a function with multiple variables

我是 R 的新手,在使用集成方面需要一些帮助。 我有一个函数定义为:

a <- function(t) { exp(-r1*t) }

我有另一个使用此函数的函数,定义为:

b <- function(t,x) { a(t-x)* exp(-(1-exp(-r2*x))) }

其中,r1r2 是常量。

现在,我需要为范围从 0tx 的值集成函数 b(t,x);鉴于 x <= t.

我不确定如何进行。我尝试了以下方法,但我不确定如何告诉 R 在 'x' 而不是 't' 上进行积分。

c <- integrate(b, lower=0, upper=10)

当我 运行 这个时,我收到一条错误消息:

Error in a(t -x) : argument "t" is missing, with no default

提前致谢,
-S

首先,如果不是真的有必要,我总是不会在未解析的函数中使用参数。所以我会写 a <- function(t, r1) { exp(-r1*t) }b <- function(t, x, r2) { a(t-x)* exp(-(1-exp(-r2*x))) } (也缺少右括号)。 第二件事,我不会命名结果(和其他对象)c,因为这已经是 R 中的函数名称。 第三件事,你的问题没有说 Nd_theta 是什么,所以我假设它是 b。 第四,您将函数 Nd_theta 解析为 integrate 而不是结果 Nd_theta(...)。相关的下一件事:错误消息不会因为 integrate 而出现,而是因为 Nd_theta 需要两个参数(大概是 xt)才能工作而你不需要在编码 Nd_theta() 时指定它们。您可以通过仅在控制台中键入 Nd_theta() 来检查这一点。

关于您的实际问题:您可以通过以下方式指定附加参数:

r1 <- 1
r2 <- 1
Nd_theta <- b
integrate(Nd_theta, lower = 0, upper = 10, x = 5)

但是请注意 ?integrate 的帮助页面是怎么说的:Nd_thetafirst 参数将用于集成。所以您可能需要将定义从 b <- function(t, x){...} 更改为 b <- function(x, t){...}.

我以r1 = r2 = 1为例。

因为你想要一个双积分:

\int_{t=0}^{t=10} \int_{x=0}^{x=t} b(x,t)

最基本的方法是应用 integrate() 两次。

首先,您需要定义一个向量化函数评估内积分:

z <- function(t) sapply(t, function (t_i) integrate(b, lower = 0, upper = t_i, t = t_i)$value)

我们可以检查:

z(1:3)
# [1] 0.4225104 0.4440731 0.4150334

现在,我们将外积分应用于z

integrate(z, lower = 0, upper = 10)
# 3.795567 with absolute error < 6.2e-06

我的回答只是为了给你一个起点。链接的 post: calculating double integrals in R quickly 为您提供了进行二重积分的更好方法。