2014-12-22 3 views
1

내가 처음 10 피보나치 숫자를 계산하는 matlab를 사용하여 코드를 작성해야합니다.피보나치 수를 사용하여 matlab

이 피보나치 수열을 계산하는 방정식

를 f (N) = F (N-1) + F (N-2)을 알고

F (0) = 1, F (1) = 1

내가 쓴 간단한 코드는

f(0) = 1; 
f(1) = 1; 

for i = 2 : 10 
    f(i) = f(i-1) + f(i-2); 
    str = [num2str(f(i))]; 
    disp(str) 
end 

이 코드는 라인 1에 나에게 오류 메시지를주고있다 :

f (0)에 액세스하려고 시도했습니다. index는 양의 정수 또는 논리 여야합니다. 내가이 제대로 작동

f(1) = 1; 
f(2) = 2; 

for i = 3 : 10 
    f(i) = f(i-1) + f(i-2); 
    str = [num2str(f(i))]; 
    disp(str) 
end 

에 코드를 수정하는 한편

.

하지만 f (0)부터 숫자를 표시하고 표시해야합니다.

내 코드가 잘못되었다는 것을 알려주실 수 있습니까?

+0

난 당신이 다른 언어로 프로그래밍 배경을 추측 :). MATLAB에서 어떤 이유로 첫 번째 요소는 인덱스 1을 얻습니다. – patrik

답변

2

Matlab 배열 인덱스는 0을 기반으로하지 않으므로 첫 번째 요소는 f (1)입니다. f (1)과 f (2)가 1이고 for 루프가 3:11부터 시작됩니다. 실제로 "f (0)"을 표시하려면 필요한 경우 표시 문자열에 실제로 입력 할 수 있습니다.

f (1) 및 f (2)를 표시해야하는 경우 몇 가지 옵션이 있습니다. 첫째, 루프에 들어가기 전에 표시하는 것입니다.

str = str2num(f(1)); 
disp(str) 
str = str2num(f(2)); 
disp(str) 

for i = 3:11 
... 

또는, 루프에 있어야합니다, 당신은 추가 할 수 있습니다 if 문 :

for i = 3:11 
    if i == 3 
     str = str2num(f(1)); 
     disp(str) 
     str = str2num(f(2)); 
     disp(str) 
    end 
    ... 

희망이 도움이됩니다.

+0

고맙습니다. 매우 도움이되었습니다 – user3620862

2

또 다른 접근법은 피보나치의 재귀 함수를 사용하는 것입니다. 명령 창에 아래의 코드를

function [ result ] = fibonacci(n) 

if n==0||n==1 
    result = n; 

else 
    result = fibonacci(n-2)+fibonacci(n-1); 
end 
end 

을 그리고 쓰기 :

fibonacci에 의해라는 함수 파일을 만듭니다

:

for n = 0:10 
    fprintf('Fibonacci(%d)= %d\n', n, fibonacci(n)); 
end 
는 출력
>> 
for n = 0:10 
    fprintf('Fibonacci(%d)= %d\n', n, fibonacci(n)); 
end 


Fibonacci(0)= 0 
Fibonacci(1)= 1 
Fibonacci(2)= 1 
Fibonacci(3)= 2 
Fibonacci(4)= 3 
Fibonacci(5)= 5 
Fibonacci(6)= 8 
Fibonacci(7)= 13 
Fibonacci(8)= 21 
Fibonacci(9)= 34 
Fibonacci(10)= 55 
>> 
,451,515,
+1

Matlab에서 재귀가 ** 매우 느리고 ** 이것은 피보나치 숫자 목록을 계산하는 데 매우 비효율적 인 방법입니다. – David

+0

@David - 정보 주셔서 감사합니다. – mehmet

+0

좋은 답변 ... – Rashid

4

당신은 비 재귀 Binet's formula를 사용하여 계산할 수 있습니다 :

n = 1:10; 
r = sqrt(5); 
phi = (1+r)/2; 
psi = (1-r)/2; 
f = (phi.^n - psi.^n)./r; 
관련 문제