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

目录

前言

正文开始啦:

总体思路:

首先创建文件:

编写 fibo_use.m 文件的内容代码

编写 fibonacci_mine.m 文件中的代码

代码运行

总结:


前言

斐波那契数列是一个很有趣的数列,有趣的地方在两点,在说这两点之前,我们先来看看斐波那契数列的前几项:

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

有趣地方在于:

  1. 这个很容易发现,即后一个元素等于前两项元素之和:2 = 1 + 1, 3 = 1 + 2, 5 = 2 + 3 ...................结合某些真实存在的现状,网上甚至有一个段子叫做:今天的汤 = 前天的汤 + 昨天的汤。
  2. 这个有趣的地方,很少有人发现,上一讲中我们谈到了黄金分割数:两个数的比例是1.618...或者0.618...,如果我们细心一算,前一项除以后一项大概约等于0.618...,后一项除以前一项等于1.618...,并且越靠后的数,这个结果就越精准。

正文开始啦:

斐波那契数列大概(可能会错,但是这个不重要,重要的是知识)是来源于这个问题:说初始给你一对兔子,一个月后生育出一公一母,兔子生下后一个月后即可开始生小兔子。(这里要抛弃伦理问题,并且出生必是一公一母,并且老兔子还不会死能一直生,反正让我想我是想不出来这种东西的。)问,n个月后总共有多少对兔子。

一般类似于这种的问题都可以认为是斐波那契问题,说实话,这种现象还真的挺常见的,比如:树枝发芽啊(假设一个树枝一年生出一根小树枝,小树枝一年后开始分叉)、植物花瓣、动物羽毛好像都是这种数。

现在以兔子为例吧,浅显易懂,假设函数是 f(n) ,其中 n 是月数,容易知道,f(1) = 1, f(2) = 2.......那么第 n 天的兔子数量就是:

f(n) = f(n-1) + f(n-2), n > 2

下面我们就开始实现这些东西了:

总体思路:

我有个习惯,做东西之前先想思路,这个功能,我的思路大概是这样的:两个文件,一个文件中写的是计算斐波那契数的函数,另一个作为主文件运行、调用并且打印输出。

首先创建文件:

fibo_use.m 是用来调用的“主”函数,fibonacci_mine.m 中写的是我们自己写的斐波那契数列计算函数,下面我们来逐一编写。

编写 fibo_use.m 文件的内容代码

%% 清理可能存在的旧数据clc; % 清屏clear; % 清除变量close; % 关闭可能存在的窗口%% 我们在这里调用,这里是主要代码n = 5; % 我们计算前几个斐波那契数列res = fibonacci_mine(n); % 调用计算函数disp('结果是:')disp(res); % 打印结果

或许有人会问:我们还没写怎么能调用呢?岂不是错了?

这里是一种思想,我自己总结为了一句话:我调用你,与你无关。

说详细点就是:我们写代码时,把各个功能包装称为一个一个的函数,我们不需要关注怎么实现,我们只需要关注两个东西:

  1. 目标函数需要什么参数?
  2. 目标函数返回的什么数据?

只要这两个东西和我们需要的、能提供的一样,那么我们就能用。这种思想可以叫做:模块化。

所以,上面代码中,我们先使用,到时候只需去实现这个功能即可。

编写 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 \leq k \leq n 既包含3也包含k。

在循环内部,我们直接用累加打表计算(第5行定义一个空矩阵也是为了打表,这样能节省很多时间,否则每次都重新计算太耗时了,这个程序尽量不要用递归,即使用递归,打表也是好的选择。)

11. return 程序结束,返回我们的返回值 fibo,当然可以省略。

代码运行

终于我们理解了上面的代码,下面来看看结果吧,品尝胜利的果实:

如果我们想增加数量,改变 fibo_use中的n的值。

如果我们只想看最后一个的值,则这样写:

是的,matlab的矩阵以1为起始下标,没有0。

总结:

  1. 如何声明、定义、调用函数(文件)。
  2. 给函数传递参数、接受函数的返回值。
  3. matlab中矩阵的简单使用和下标索引。
  4. 一句话:我调用你,与你无关。即软件工程的思想:模块化。
  5. matlab中for循环(遍历)的使用。
  6. 如何从一个文件调用另一个函数文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据采集与清洗基础习题(二)Python爬虫常用模块,头歌参考答案

数据采集习题参考答案,会持续更新,点个关注防丢失。为了方便查找,已按照头歌重新排版,朋友们按照头歌所属门类查找实训哦,该篇为Python爬虫常用模块。 创作不易,一键三连给博主一个支持呗。 文章目录 实…

Spring Boot freemarker导出word下载

freemarker详解 FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序…

学生用计算机怎么累加,计算机一级OFFICE辅导:累加小技巧

我们在工作中常常需要在已有数值的单元格中再增加或减去另一个数。一般是在计算器中计算后再覆盖原有的数据。这样操作起来很不方便。考试大编辑推荐一个小技巧,可以有效地简化老式的工作过程。(1).创建一个宏:选择Excel选单下的“工具→宏→录制新宏”选…

不同进制之间的转化

将二进制、八进制、十六进制转换为十进制 二进制、八进制和十六进制向十进制转换都非常容易,就是“按权相加”。所谓“权”,也即“位权”。 假设当前数字是 N 进制,那么: 对于整数部分,从右往左看,第 i 位…

[刨根问底] 五分钟搞懂组合评价模型—模糊Borda (以2021 年大学生数模国赛C题为例)

组合评价模型—模糊Borda(Matlab) 我们的征途是星辰大海,而并非烟尘人间。 目录 组合评价模型—模糊Borda(Matlab) 一、模糊Borda法简介 二、模糊Borda法主要步骤 (1)计算隶属度 (2)计算模糊频数 (…

计算机桌面右键新建展不开,Win10右键新建不见了怎么办?Win10电脑桌面右键新建没有了解决方法...

近期有Win10用户遇到一个问题,也就是电脑桌面右键新建没有了,比如想要创建一个文本文档、文件夹、Word,没有新建功能无法创建,那么Win10右键新建不见了怎么办?下面装机之家分享一下Win10电脑桌面右键新建没有了解决方法…

最常用的客观赋权方法——熵权法

我们的征途是星辰大海,而并非烟尘人间。 文章目录 一、熵权法的原理 1.1 信息熵 1.2 熵权法 二、熵权法的主要步骤 2.1 数据标准化 2.2 求各指标在各方案下的比值 2.3 求各指标的信息熵。 2.4 确定各指标的权重 2.4.1 通过信息熵计算各指标的权重&#…

2017韩老师计算机网络,2017年计算机等考三级网络技术辅导:计算机网络拓扑结构...

1.计算机网络拓扑的定义计算机网络设计的第一步就是网络拓扑设计。拓扑学是几何学的一个分支。计算机网络拓扑是通过网中结点与通信线路之间的几何关系表示网络结构,反映出网络各实体之间的结构关系。2.网络拓扑的分类网络拓扑可以根据通信子…

Spring Boot html页面解析之jsoup

目的 我们要对一个页面进行数据抓取,并导出doc文档 html解析器 jsoup 直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。 htmlparser 提供了线性和嵌套两种方…

2021年五一杯数学建模A题(疫苗生产调度问题)详细分析

目录 一、基本介绍 1.1 题目描述 1.2 待解决问题 二、问题分析与求解 2.1 问题一分析与求解 2.2 问题二分析与求解 2.3 问题三分析与求解 2.4 问题四分析与求解 2.5 问题五分析与求解 三、完整代码 四、总结 一、基本介绍 1.1 题目描述 新冠肺炎肆虐全球&#xff0…

Spring Boot EasyPoi导出Excel下载

Java关于excel的操作 Java Excel俗称jxl,可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件,现在基本没有更新了 Apache POI是Apache基金组织Jakarta项目的子项目,它包括一系列的API,可以操作多种格式的Mic…

2021年华中杯A题(马赛克瓷砖选色问题)详细分析

目录 一、基本介绍 1.1 题目描述 1.2 待解决问题 二、问题分析与求解 2.1 问题一分析与求解 2.2 问题二分析与求解 2.3 问题三分析与求解 三、完整代码 四、总结 一、基本介绍 1.1 题目描述 马赛克瓷砖是一种尺寸较小(常见规格为边长不超过 5cm&#xff09…

计算机无法连接无线信号,win7系统连接无线信号时提示Windows无法连接到路由器名称的四种解决方法...

现如今网络发展速度非常快,无线网络已经普及了,使用率高了遇到的问题也就多了。比如有时候笔记本win7系统连接无线信号时出现“Windows无法连接到路由器名称”(如下图所示),该如何解决此问题呢?下面脚本之家的小编介绍几种解决方法…

数据采集与清洗基础习题(四)Pandas初体验,头歌参考答案

数据采集习题参考答案,会持续更新,点个关注防丢失。 创作不易,一键三连给博主一个支持呗。 为了方便查找,已按照头歌重新排版,朋友们按照头歌所属门类查找实训哦,该篇为Pandas。 文章目录 实训一&#…

全国计算机准考证打印2015年,甘肃2015下半年全国计算机等级考试准考证打印时间...

甘肃2015下半年全国计算机等级考试准考证打印时间一、打印准考证考生可在考前2周之内登陆全省统一报名网站自主打印准考证,或到考点现场领取准考证。二、考试时间下半年:2015年9月19日至21日,分批进行。考试具体时间、地点均以“准考证”为准…

TOPSIS与模糊Borda 的组合应用(以第二届大湾区杯和国赛为案例)

目录 一、TOPSIS(优劣解距离法)简介 二、TOPSIS(优劣解距离法)主要步骤 (1)数据进行标准化 (2)构建决策矩阵 (3)构造加权规范阵 (4&#xf…

Spring Boot 页面国际化

internationalization详解 国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素。换言之,应用程序的功能和代码设计考虑在不同地区运行的…

唯美计算机语言,唯美精辟的语句

1、当泪水一滴滴的掉落在我的手上,那时竟想为何我非你不可!2、原来再美好的承诺,最终还是会被现实打败。3、明明不是陌生人,却装的,比陌生人,还要陌生。4、如果我是个瘦子,伤心时我还可以数数排…

不到30的成本,还不赶紧造起来——盘点软著申请小知识

今年上半年的时候跟着老师做项目,为了学习应付中期报告,就自己写了一个小软件,然后申请了一个软著,至于为啥要头铁的自己上呢,因为想要拿独立著作权,那当然是没有报销的啦~,这里有同学就要问啦&…

Linux系统安装及配置——Centos-7-X86_64-DVD-2009

目录 1.下载 VMware Workstation软件 2.下载 Centos-7-X86_64-DVD-2009.iso 3.安装并配置 3.1打开VMware Workstation,选择创建新的虚拟机 3.2选择自定义,然后下一步 3.3下一步 3.4选择稍后安装操作系统,然后下一步 3.5选择Linux&am…