2016-11-18 2 views
6

m geben, wie können wir m gleich beabstandete Zahlen, die zu 1 summieren, so dass A1 > A2 > ... > Am?Generieren Sie m gleich große Zahlen, die zu 1 in R

Zum Beispiel, wenn m=4 dann sollten wir haben:

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

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

sum(a) 
#[1] 1 

Oder 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] 

Antwort

4

Wenn Sie einen einstellbaren Raum oder Start wollen Punkt, können Sie eine Formel verwenden, um den Raum basierend auf Starti zu berechnen ng Punkt bzw. der Ausgangspunkt auf den Raum basiert:

Szenario 1: Adjustable Ausgangspunkt:

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 

Szenario 2: Adjustable space:

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

Wie wäre:

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 
Verwandte Themen