2016-11-18 25 views
6

Given m, w jaki sposób możemy wygenerować m równomiernie rozmieszczone, że suma liczb 1 tak że A1 > A2 > ... > Am?Generowanie M równomiernie rozmieszczonych liczb, które sumę 1 na R

Na przykład, jeśli m=4 to powinniśmy mieć:

a <- c(0.4, 0.3, 0.2, 0.1) 

abs(diff(a)) 
#[1] 0.1 0.1 0.1 

sum(a) 
#[1] 1 

Or dla m=5:

b <- c(0.30, 0.25, 0.20, 0.15, 0.10) 

abs(diff(b)) 
#[1] 0.05 0.05 0.05 0.05 

sum(b) 
#[1] 

Odpowiedz

4

Jeśli chcesz regulowany miejsca lub rozpoczęcia możesz użyć formuły do ​​obliczenia przestrzeni opartej na starti Temperatura ng lub punkt wyjścia w oparciu o miejsce:

Scenariusz 1: zmiana punktu wyjścia:

m = 5; s = 0.9 

seq(from = s, by = -(m*s - 1) * 2/((m - 1) * m), length.out = m) 
#[1] 0.90 0.55 0.20 -0.15 -0.50 

sum(seq(from = s, by = -(m*s - 1) * 2/((m - 1) * m), length.out = m)) 
#[1] 1 

Scenariusz 2: Regulowana powierzchnia:

m = 5; d = 0.2 

seq(from = 1/m + ((m - 1) * d/2), by = -d, length.out = m) 
# [1] 0.6 0.4 0.2 0.0 -0.2 

sum(seq(from = 1/m + ((m - 1) * d/2), by = -d, length.out = m)) 
# [1] 1 
9

Jak o:

rev(seq_len(m)/sum(seq_len(m))) 

a <- rev(seq_len(4)/sum(seq_len(4))) 
##[1] 0.4 0.3 0.2 0.1 
abs(diff(a)) 
##[1] 0.1 0.1 0.1 
sum(a) 
##[1] 1 

b <- rev(seq_len(5)/sum(seq_len(5))) 
##[1] 0.33333333 0.26666667 0.20000000 0.13333333 0.06666667 
abs(diff(b)) 
##[1] 0.06666667 0.06666667 0.06666667 0.06666667 
sum(b) 
##[1] 1 
Powiązane problemy