MATLAB基础教程(5)——斐波那契数列
目錄
前言
正文開始啦:
總體思路:
首先創建文件:
編寫 fibo_use.m 文件的內容代碼
編寫 fibonacci_mine.m 文件中的代碼
代碼運行
總結:
前言
斐波那契數列是一個很有趣的數列,有趣的地方在兩點,在說這兩點之前,我們先來看看斐波那契數列的前幾項:
1 1 2 3 5 8 13 21 34 ..........................................
有趣地方在于:
正文開始啦:
斐波那契數列大概(可能會錯,但是這個不重要,重要的是知識)是來源于這個問題:說初始給你一對兔子,一個月后生育出一公一母,兔子生下后一個月后即可開始生小兔子。(這里要拋棄倫理問題,并且出生必是一公一母,并且老兔子還不會死能一直生,反正讓我想我是想不出來這種東西的。)問,n個月后總共有多少對兔子。
一般類似于這種的問題都可以認為是斐波那契問題,說實話,這種現象還真的挺常見的,比如:樹枝發芽啊(假設一個樹枝一年生出一根小樹枝,小樹枝一年后開始分叉)、植物花瓣、動物羽毛好像都是這種數。
現在以兔子為例吧,淺顯易懂,假設函數是 f(n) ,其中 n 是月數,容易知道,f(1) = 1, f(2) = 2.......那么第 n 天的兔子數量就是:
下面我們就開始實現這些東西了:
總體思路:
我有個習慣,做東西之前先想思路,這個功能,我的思路大概是這樣的:兩個文件,一個文件中寫的是計算斐波那契數的函數,另一個作為主文件運行、調用并且打印輸出。
首先創建文件:
fibo_use.m 是用來調用的“主”函數,fibonacci_mine.m 中寫的是我們自己寫的斐波那契數列計算函數,下面我們來逐一編寫。
編寫 fibo_use.m 文件的內容代碼
%% 清理可能存在的舊數據clc; % 清屏clear; % 清除變量close; % 關閉可能存在的窗口%% 我們在這里調用,這里是主要代碼n = 5; % 我們計算前幾個斐波那契數列res = fibonacci_mine(n); % 調用計算函數disp('結果是:')disp(res); % 打印結果或許有人會問:我們還沒寫怎么能調用呢?豈不是錯了?
這里是一種思想,我自己總結為了一句話:我調用你,與你無關。
說詳細點就是:我們寫代碼時,把各個功能包裝稱為一個一個的函數,我們不需要關注怎么實現,我們只需要關注兩個東西:
只要這兩個東西和我們需要的、能提供的一樣,那么我們就能用。這種思想可以叫做:模塊化。
所以,上面代碼中,我們先使用,到時候只需去實現這個功能即可。
編寫 fibonacci_mine.m 文件中的代碼???????
function fibo = fibonacci_mine(n)% 功能:計算前n個斐波那契數列% 參數:n 代表需要前n個斐波那契數列% 返回值: fibo 一個 n行1列的矩陣,代表前n個斐波那契數fibo = zeros(n, 1); % 把fibo作為n行1列的空矩陣,里面元素都為0fibo(1) = 1;fibo(2) = 2; % 把啟動條件寫出來for k = 3:n % for 循環,從 3 到 n(包含 3 也包含 n)fibo(k) = fibo(k-1) + fibo(k-2);endreturn這個代碼需要逐句來講,連帶注釋總共11行,下面我將詳細講解(標號為幾就是第幾行):
1.?這句話表名這個文件不是普通的腳本文件,而是一個函數文件,在matlab中,我們可以認為每個文件都是可以被獨立執行的個體,這句話的格式是這樣的:function? 返回值名字 = 文件名(參數列表)
在本文件中,返回值是:fibo,文件名是 fibonacci_mine,參數一個: n。
2-4.?這三個注釋是一個規范,不是強制要求。如果我們在這個地方介紹我們這個函數的功能,對使用者來講,是非常方便的,可以通過help命令直接看到這個幫助信息。如下圖:
而對于程序員來說,易讀易懂的文檔是很重要的。
5.?zeros(行, 列):返回一個矩陣,矩陣是 n 行 n 列,內容都是0。這句話是把返回值初始化為n行1列的0矩陣了。
6-7. 斐波那契數列的前兩項是1和1沒錯,但是現在解決的問題是兔子問題,所以根據實際情況剔除一個1,大家不要糾結。
8-10.?matlab 的for 循環,必須以end結束。說循環,其實說遍歷更加恰當一點。for循環是把變量k從3->n各取一次,在這個循環中,k的取值范圍是:
?既包含3也包含k。
在循環內部,我們直接用累加打表計算(第5行定義一個空矩陣也是為了打表,這樣能節省很多時間,否則每次都重新計算太耗時了,這個程序盡量不要用遞歸,即使用遞歸,打表也是好的選擇。)
11.?return 程序結束,返回我們的返回值 fibo,當然可以省略。
代碼運行
終于我們理解了上面的代碼,下面來看看結果吧,品嘗勝利的果實:
如果我們想增加數量,改變 fibo_use中的n的值。
如果我們只想看最后一個的值,則這樣寫:
是的,matlab的矩陣以1為起始下標,沒有0。
總結:
總結
以上是生活随笔為你收集整理的MATLAB基础教程(5)——斐波那契数列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB使用教程(三)——在文件中编
- 下一篇: java aspose 导出word_使