2017-02-17 3 views
1

Ich versuche, eine Fibonacci-Sequenz zu programmieren, die nach der Division einer Fibonacci-Zahl durch ihren unmittelbaren Vorgänger endet nähert sich dem Goldenen Schnitt mit weniger als 0,001 Differenz. Der folgende Code scheint jedoch nicht zu funktionieren und weiß nicht warum. Danke im Voraus!Fibonnaci-Sequenz Goldenes Verhältnis in 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

Sie müssen absolute Differenz 'abs vergleichen (fib [i-1]/fib [i-2] -GoldenRatio)' –

+0

Aah hat es! Vielen Dank! – Cardinal

Antwort

1

Try this:

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 

Auch, wie wir von unten sehen können, Konvergenz ist recht schnell erhalten:

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

Vergleichen Sie die absolute Differenz

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