2017-02-17 7 views
1

のフィボナッチシーケンスをプログラムしようとしました。フィボナッチ数を直前のもので割った後に止まり、黄金比が0.001未満の差に近づいた後に停止します。しかし、以下のコードは動作していないように見えて、理由を知らない。前もって感謝します!FibonnaciのシーケンスR

GoldenRatio=(1+sqrt(5))/2 
i=3 
fib=c(1,1) 
while(fib[i-1]/fib[i-2]-GoldenRatio>0.001){ 
fib[i] <- fib[i-1]+fib[i-2] 
i=i+1} 
print(fib) 
length(fib) 
+0

あなたは絶対差 'abs(fib [i-1]/fib [i-2] -GoldenRatio)'を比較する必要があります。 –

+0

Aah got it!ありがとう! – Cardinal

答えて

1

これを試してみてください:

GoldenRatio=(1+sqrt(5))/2 
# 1.618034 
i=3 
fib=c(1,1) 
while(abs(fib[i-1]/fib[i-2]-GoldenRatio)>0.001){ 
    fib[i] <- fib[i-1]+fib[i-2] 
    i=i+1 
} 
print(fib) 
# [1] 1 1 2 3 5 8 13 21 34 55 
length(fib) 
# [1] 10 
print(i) 
# 11 
print(fib[i-1]/fib[i-2]) 
# [1] 1.617647 
print(abs(fib[i-1]/fib[i-2] - GoldenRatio)) 
# [1] 0.0003869299 

をまた、我々は以下から見ることができるように、収束は非常に高速に得られる。

fib=c(1,1) 
ratio <- c() 
for (i in 3:20) { 
    ratio <- c(ratio, fib[i-1]/fib[i-2]) 
    fib[i] <- fib[i-1]+fib[i-2] 
    i=i+1 
} 
plot(ratio, pch=19,col='red') 
lines(ratio, pch=19,col='red') 
abline(h=GoldenRatio, col='blue') 
legend('topright', legend=c('f(i)/f(i+1)', 'GoldenRatio'), col=c('red', 'blue'), lwd=2) 

enter image description here

1

は絶対差を比較

GoldenRatio = (1+sqrt(5))/2 
i = 3 
fib = c(1,1) 
while (abs(fib[i-1]/fib[i-2] - GoldenRatio) > 0.001) { 
    fib[i] <- fib[i-1] + fib[i-2] 
    i = i+1 
    } 
print(fib) 
length(fib) 
関連する問題