matlab与斐波那契交易

时间:2009-11-13 03:19:34

标签: matlab

Fibonacci系列如下:

1, 2, 3, 5, 8, 13, 21, ...

如何编写一个计算和打印第n个Fibonacci项(用于n>2)的脚本,其中n由用户输入。

这是我尝试过的:

n=input('n: ');
while(n < 3)
     disp('must enter number >= 3')
     if(n < 3)
          fprintf('\n\n Please re-insert again!!\n')
          n=input('n: ')
      else (n >=3)
          fibf(n)=fib(n-1)+fibf(n-2); 
     end
end

fprintf('the nth value of n is :  ,fibf(n)')

但未能打印出正确的解决方案。

3 个答案:

答案 0 :(得分:3)

实际上Fibonacci系列从0开始,所以F0 = 0,F1 = 1,F2 = 1等。 递归函数的方法非常慢。你最好使用线性代数方法来计算它。

l1 = (1+sqrt(5))/2;
l2 = (1-sqrt(5))/2;

S = [l1,l2;1,1];
L = [l1,0;0,l2];
C = [-1/(l2-l1);1/(l2-l1)];
k = 15;
y = S * L^k * C;

fprintf('the %dth Fibbonaci number is : %d\n', k, y(2))

the 15th Fibbonaci number is : 610

可以找到证据here

答案 1 :(得分:1)

James McNellis指出的fprintf错误外,您还犯了以下错误:

  1. fibf(n)= ...行引用一个名为fib的数组,而不是fibf。

  2. 如果用户输入的数字大于3,则while循环会跳过fibf的计算。

  3. 如果用户输入的数字小于3且系统提示您重新输入某个号码,则仍会跳过该计算,因为else应该是else if

  4. 如果你修复了while / if / else中的逻辑错误,你仍然需要初始化fibf(1)和fibf(2),否则MATLAB将没有它们的值。

  5. 可能还有其他错误,这些是我第一眼看到的错误。

    通常,逐步执行循环和逻辑语句是调试的最佳方法。 MATLAB会告诉你一些愚蠢的错误,比如忘记初始化fibf或者使用一个不存在的变量,但逻辑很难在不逐行的情况下进行跟踪。在编辑器中,尝试在第一行启用断点(在R2009a中按F12)。然后你可以按F10并逐行查看,看看究竟发生了什么(Windows上的F12和F10,不确定其他操作系统上的等价物)。

答案 2 :(得分:1)

我会这样做:

n = input('n: ');

fib = zeros(1, n);
fib([1 2]) = [1 2];
for i = 3:n
    fib(i) = fib(i-1) + fib(i-2);
end

fprintf('the %dth Fibbonaci number is : %d\n', n, fib(n))

或者,这应该也适用:

phi = (1 + sqrt(5))/2;
fibn = round((phi^(n+1) - (1-phi)^(n+1))/sqrt(5));
fprintf('the %dth Fibbonaci number is : %d\n', n, fibn)

除此之外:我通常会将第一个斐波纳契数定义为1和1而不是1和2。