2013-04-01 4 views
-1

Привет У меня есть уравнение, подобное следующему, которое я хочу рассчитать.вычисление интерграла с несколькими переменными в R

Уравнения определяются по формуле:

enter image description here

В этом уравнении х представляет собой arrary от 0 до 500. значения Т = 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? Если я изменю значение х в подынтегральном выражении на константу, я могу вычислить интеграцию, но я хочу вычислить для всех значений х от 0 до 500.

Огромное вам спасибо.

+0

При использовании 'integrate' функция должна изменяться с именем переменной, которая интегрируется, что в вашей case is \ theta, а не «x». –

+0

Я понимаю это. Как изменить выражение с помощью x вне подынтегрального выражения. Кажется, что экспоненциальная функция связана как с x, так и с thita. Как я могу отделить эти переменные? –

+0

, как правило, можно использовать 'sapply (vector, FUN = ...)' и записывать FUN, чтобы взять одну переменную X. Но не называйте это «x», потому что вам нужно, чтобы это была переменная, которая передается «интегрировать». Какова предыстория этой проблемы? –

ответ

1

Ну, вот какой-то код, но он взрывается после т = 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) 
+0

Благодарим вас за обмен этим кодом. Я не знаю, почему уравнение творилось странно после t = 353. Но, по крайней мере, я могу посмотреть профиль до t = 353. Благодарю. –

+1

Обязательно используйте графический вид: 'plot (sapply (1: 300, Cfun, upper = 500)); строки (sapply (1: 300, Cfun, upper = 500)) ' –

1

Я бы поставил цикл за значения для x вне интеграции. Итерируйте по значениям x и выполните интеграцию для каждого внутри. Тогда у вас будет C(x) в зависимости от x, подходящего для построения графика.

Вы понимаете, конечно, что неопределенный интеграл может быть вычислен:

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

Может быть, это поможет вам увидеть, что ответ выглядит, прежде чем приступить к работе.

+0

В этом интегральном выражении 'x' является константой. –

+0

Да, я знаю. Вы замените значение x и получите значение интеграла. Храните массивы x и c, и у вас будет график c в сравнении с x. – duffymo

+0

@duffmyo: Большое вам спасибо за ваше решение.Можете ли вы предложить, каков должен быть синтаксис? Ссылка на вольфрамальфу была очень полезной. Я новичок в R, поэтому у меня проблема с синтаксисом. –

Смежные вопросы