2014-12-22 133 views
1

我需要用matlab編寫一個代碼來計算前10個斐波那契數。使用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);索引必須是正整數或邏輯。

在另一方面,當我修改代碼以

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 
... 

或者,如果必須在循環中,你可以添加一個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 
>> 
+1

請注意,Matlab中的遞歸非常緩慢,這是計算Fibonacci數列表非常低效的方式。 – 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;