2012-06-21 3 views
1

enter image description hereКак использовать функцию sum в цикле for в R?

Мы хотим вычислить значение интеграла в линейном графике. Для лучшего понимания взгляните на фотографию. Предположим, что общая площадь равна 1. Мы хотим найти, что такое значение в определенной части. Например, мы хотим знать, сколько процентов от общего количества 100% приходится на 10-й и 11-й месяцы, если все относится к месяцам, а максимальное значение A равно 24. Мы можем вычислить интеграл, а затем должны быть в состоянии получить искомую область на F (х) - F (х-1) I thoght о следующем коде:

a <- 24 
tab <-matrix(0,a,1) 
tab <-cbind(seq(1,a),tab) 
tab<-data.frame(tab) 

#initialization for first point 
tab[1,2] <- (2*tab[1,1]/a - tab[1,1]^2/a^2) 

#for loop for calculation of integral of each point - integral until to the area 
for(i in 2:nrow(tab)) 
{tab[i,2] <- (2*tab[i,1]/a - tab[i,1]^2/ a^2) - sum(tab[1,2]:tab[i-1,2])} 
#plotting 
plot(tab[,2], type="l") 

Если вы видите сюжет - это заблуждение. Любые идеи, как справиться с этим правильно?

ответ

5

Основание R функция integrate() может сделать это для вас:

f <- function(x, A) 2/A - x/A^2 

integrate(function(x)f(x, 24), lower=10, upper=11) 

0.06510417 with absolute error < 7.2e-16 
+0

но почему у этого есть стандартная ошибка? –

+0

Это не стандартная ошибка, а указание числовой ошибки, введенной цифровой интеграцией. – Andrie

1

Используя формулы непосредственно:

a <- 24       # number of divisions 
x <- c(seq(1,a))     # 
y <- x*2/a - x^2/a^2    # F(x) 
z <- (x*2/a - x^2/a^2) - ((x-1)*2/a - (x-1)^2/a^2) # F(x) - F(x-1) 

Затем сделайте привязку позже.

> sum(z) 
[1] 1