2014-12-22 3 views
1

Мне нужно написать код с использованием matlab для вычисления первых 10 чисел Фибоначчи.Числа Фибоначчи с использованием matlab

Уравнение для расчета чисел Фибоначчи является

F (п) = F (п-1) + F (п-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); индекс должен быть положительным целым или логическим.

С другой стороны, когда я изменить код

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 не основаны на нулевом значении, поэтому первым элементом является 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 
... 

Или, если он должен быть в курсе, вы можете добавить, если заявление:

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

Надеется, что это помогает.

+0

спасибо, что это было очень полезно – user3620862

2

Другой подход заключается в использовании рекурсивной функции фибоначчи.

Создать функцию файл с именем, fibonacci:

function [ result ] = fibonacci(n) 

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

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

И писать код в окне командной:

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 
>> 
+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; 
Смежные вопросы