将函数与多个变量集成

时间:2016-06-30 12:35:32

标签: r function integral numerical-integration

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

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

我有另一个使用此功能的功能,定义为:

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

其中,r1r2是常量。

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

我不知道如何处理这个问题。我尝试了以下内容,但我不确定如何告诉R整合'x'而不是't'。

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

当我运行此操作时,我收到错误消息:

  

(t -x)中的错误:缺少参数“t”,没有默认值

提前致谢,
-S

2 个答案:

答案 0 :(得分:3)

我使用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

我的回答只是为了给你起点。链接的帖子:calculating double integrals in R quickly为您提供了更好的双重积分方法。

答案 1 :(得分:0)

首先,我总是不会在函数中使用参数,如果不是真的必要的话,它们不会被解析。所以我会写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)才能工作而且您不需要#39; t仅在编码Nd_theta()时指定它们。您只需在控制台中输入Nd_theta()即可查看此内容。

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

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

但请注意?integrate的帮助页面说明的内容:Nd_theta第一个参数将用于整合。因此,您可能需要将定义从b <- function(t, x){...}更改为b <- function(x, t){...}