日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

MATLAB基础教程(5)——斐波那契数列

發布時間:2025/3/15 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB基础教程(5)——斐波那契数列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

前言

正文開始啦:

總體思路:

首先創建文件:

編寫 fibo_use.m 文件的內容代碼

編寫 fibonacci_mine.m 文件中的代碼

代碼運行

總結:


前言

斐波那契數列是一個很有趣的數列,有趣的地方在兩點,在說這兩點之前,我們先來看看斐波那契數列的前幾項:

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

有趣地方在于:

  • 這個很容易發現,即后一個元素等于前兩項元素之和:2 = 1 + 1, 3 = 1 + 2, 5 = 2 + 3 ...................結合某些真實存在的現狀,網上甚至有一個段子叫做:今天的湯 = 前天的湯 + 昨天的湯。
  • 這個有趣的地方,很少有人發現,上一講中我們談到了黃金分割數:兩個數的比例是1.618...或者0.618...,如果我們細心一算,前一項除以后一項大概約等于0.618...,后一項除以前一項等于1.618...,并且越靠后的數,這個結果就越精準。
  • 正文開始啦:

    斐波那契數列大概(可能會錯,但是這個不重要,重要的是知識)是來源于這個問題:說初始給你一對兔子,一個月后生育出一公一母,兔子生下后一個月后即可開始生小兔子。(這里要拋棄倫理問題,并且出生必是一公一母,并且老兔子還不會死能一直生,反正讓我想我是想不出來這種東西的。)問,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中矩陣的簡單使用和下標索引。
  • 一句話:我調用你,與你無關。即軟件工程的思想:模塊化。
  • matlab中for循環(遍歷)的使用。
  • 如何從一個文件調用另一個函數文件。
  • 總結

    以上是生活随笔為你收集整理的MATLAB基础教程(5)——斐波那契数列的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。