English 中文(简体)
matlab deals with Fibbonacci
原标题:
  • 时间:2009-11-13 03:19:33
  •  标签:
  • matlab

The Fibonacci series is given as follows:

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

How can I write a script which calculates and prints the n-th Fibonacci term (for n>2), where n is inputed by the user.

This is what I ve tried:

n=input( n:  );
while(n < 3)
     disp( must enter number >= 3 )
     if(n < 3)
          fprintf( 

 Please re-insert again!!
 )
          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) )

but this failed to print out the correct solution.

问题回答

Actually the Fibonacci series starts with 0, so F0=0, F1=1, F2=1 etc. The method of the recursive function is extremely slow. You d better use linear algebra methods to calculate it.

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
 , k, y(2))

the 15th Fibbonaci number is : 610

A proof can be found here.

In addition to the fprintf error pointed out by James McNellis, you made the following errors:

  1. The fibf(n) = ... line references an array called fib, not fibf.

  2. If the user enters a number greater than 3, your while loop skips the calculation of fibf.

  3. If the user enters a number less than 3 and is prompted to reenter a number, you still skip the calculation because your else should be an else if.

  4. If you fix the logic errors in your while/if/else stuff, you still need to initialize fibf(1) and fibf(2), otherwise MATLAB won t have values for them.

There might be other mistakes, these are the ones I saw at first glance.

In general, stepping through loops and logic statements is the best way to debug. MATLAB will inform you about silly mistakes like forgetting to initialize fibf or using a variable that doesn t exist, but logic is difficult to trace without going line by line. In the editor, try enabling a breakpoint (press F12 in R2009a) at the first line. Then you can press F10 and step line by line and see exactly what s happening (F12 and F10 on windows, not sure what the equivalents are on other OSes).

I would do it like this:

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, fib(n))

Or alternatively, this should work too:

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

Aside: I would usually define the first Fibonacci numbers as 1 and 1 rather than 1 and 2.





相关问题
MATLAB Solving equations problem

I want to solve these equations using MATLAB and I am sure there is a non zero solution. The equations are: 0.7071*x + 0.7071*z = x -0.5*x + 0.7071*y + 0.5*z = y -0.5*x - 0.7071*y +...

Difference between MATLAB s matrix notations

How do you read the following MATLAB codes? #1 K>> [p,d]=eig(A) // Not sure about the syntax. p = 0.5257 -0.8507 -0.8507 -0.5257 d = ...

preventing data from being freed when vector goes out of scope

Is there a way to transfer ownership of the data contained in a std::vector (pointed to by, say T*data) into another construct, preventing having "data" become a dangling pointer after the vector goes ...

Divide two polynomials using MATLAB

I want to divide p(x) by q(x) given that: p(x)=-5x^4+3x^2-6x q(x)=x^2+1 I tried: p=inline( -5*(x^4)+3*(x^2) , x ) p = Inline function: p(x) = -5*(x^4)+3*(x^2) q=inline( x^2+1 , x ) q = ...

matlab deals with Fibbonacci

The Fibonacci series is given as follows: 1, 2, 3, 5, 8, 13, 21, ... How can I write a script which calculates and prints the n-th Fibonacci term (for n>2), where n is inputed by the user. This ...

How do I plot lines between all points in a vector?

I have a vector containing some points in 2-D space. I want MATLAB to plot these points with lines drawn from every point to every other point. Basically, I want a graph with all vertices connected. ...

How do I create a string using a loop variable in MATLAB?

I have a loop like this: for i=1:no %some calculations fid = fopen( c:\out.txt , wt ); %write something to the file fclose(fid); end I want data to be written to different files like ...

热门标签