纤维蛋白酶序列R中的黄金比例

时间:2017-02-17 19:58:05

标签: r while-loop

我尝试编制一个斐波纳契序列,该序列在斐波纳契数除以其前一个近似黄金比率后,其差异小于0.001。但是,下面的代码似乎不起作用,不知道为什么。提前致谢!

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)

2 个答案:

答案 0 :(得分: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 :(得分:1)

比较绝对差异

public/js