计算R中多个变量的积分

时间:2013-04-01 00:17:22

标签: r integration

嗨,我想要计算以下等式。

等式由下式给出:

enter image description here

在这个等式中,x是从0到500的arrary。 t = 500的值,即积分的上限。

现在我想把c计算为c(500,x)。

到目前为止我写的代码如下:

x <- seq(from=0,by=0.5,length=1000)
t=500

integrand <- function(t)t^(-0.5)*exp((-x^2/t)-t)
integrated <- integrate(integrand, lower=0, upper=t)
final <-  pi^(-0.5)*exp(2*x)*integrated

我得到的错误如下:

Error in integrate(integrand, lower = 0, upper = t) : 
  evaluation of function gave a result of wrong length
In addition: Warning messages:
1: In -x^2/t :
  longer object length is not a multiple of shorter object length
2: In -x^2/t - t :
  longer object length is not a multiple of shorter object length
3: In t^(-0.5) * exp(-x^2/t - t) :
  longer object length is not a multiple of shorter object length

但它不起作用,因为在被积函数中有一个变量x是一个arrary。任何人都可以建议我如何先计算积分,然后计算每个x值的总表达式?如果我将被积函数中的x的值更改为常量,我可以计算积分,但我想计算x的所有值,从0到500。

非常感谢你。

2 个答案:

答案 0 :(得分:1)

我将循环放在集成之外的x的值上。迭代x值并对每个内部执行集成。那么你将C(x)作为x的函数,适合绘图。

当然,您意识到可以评估不定积分:

http://www.wolframalpha.com/input/?i=integrate+exp%28-%28c%2Bt%5E2%29%2Ft%29%2Fsqrt%28t%29

也许这会帮助您在开始之前看到答案的样子。

答案 1 :(得分:1)

嗯,这是一些代码,但是在t = 353之后它会爆炸:

Cfun <- function(XX, upper){
      integrand <- function(x)x^(-0.5)*exp((-XX^2/x)-x)
      integrated <- integrate(integrand, lower=0, upper=upper)$value
      (final <-  pi^(-0.5)*exp(2*XX)*integrated) }
sapply(1:400, Cfun, upper=500)