2016-11-18 5 views
6

1にその和をm個生成し、どのように我々は1ようA1 > A2 > ... > Amm等間隔数字その和を生成することができますか?が等間隔番号を<code>m</code>を考えるR

例えば、m=4ならば、我々は持っている必要があります。

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

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

sum(a) 
#[1] 1 

または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] 

答えて

4

あなたは、調整可能なスペースまたは起動が必要な場合ポイントを使用すると、式を使用してstartiに基づいてスペースを計算できますNGポイントまたは空間に基づいて出発点:

シナリオ1:調整起点:

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 

シナリオ2:可変容量:

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

方法について:

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 
関連する問題