-1

嗨,我有一个像下面这样我想计算的方程。

方程由下式给出:

在此处输入图像描述

在这个等式中,x 是一个从 0 到 500 的数组。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 ,它是一个数组。谁能建议我如何先计算积分,然后计算每个 x 值的总表达式?如果我将被积函数中 x 的值更改为常数,我可以计算积分,但我想计算从 0 到 500 的所有 x 值。

非常感谢。

4

2 回答 2

1

我会将循环放在集成之外的 x 值上。迭代 x 值并对内部的每个值执行积分。然后,您将拥有C(x)适合绘图的 x 函数。

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

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

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

于 2013-04-01T00:21:04.143 回答
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)
于 2013-04-01T01:04:41.813 回答