MATLAB算法技巧和实现斐波那契数列的解决思路

   2023-02-07 学习力0
核心提示:目录MATLAB算法技巧和实现斐波那契数列题目要求题目一:公倍数的应用题目二:斐波那契数列的应用解题思路代码实现运行结果总结MATLAB算法技巧和实现斐波那契数列这篇博客主要说一下自己在算法设计课上用matlab做的两道算法题,题目解起来都比较简单,但是需要些

MATLAB算法技巧和实现斐波那契数列

这篇博客主要说一下自己在算法设计课上用matlab做的两道算法题,题目解起来都比较简单,但是需要些技巧。

  • 公倍数的应用
  • 斐波那契数列的应用

题目要求

题目一:公倍数的应用

  心里想好一个1~100之间的整数x,将它分别除以3,5,7并得到3个余数。把这三个余数输入计算机,计算机能马上猜出这个数

题目二:斐波那契数列的应用

  斐波那契数列有如下特点:a1,a2已知 a(n)=a(n-1)+a(n-2) n>=3
  例题:楼梯上有n阶台阶,上楼时可以一步上1阶,也可以一步上2阶,编写算法计算共有多少种不同的上楼梯方法

解题思路

问题一,问题一可以将该数转换为d=70*a+21*b+15*c的乘积,主要是利用了他们的公倍数性质。

详细数学模型解释:
1)不难理解当s=u+3*v+3*w时,s除以3的余数与u除以3的余数是一样的。
2)对s=cu+3*v+3*w,当c除以3余数为1的数时, s除以3的余数与u除以3的余数也是一样的。证明如下:c 除以 3余数为1,记c=3*k+1,则s=u+3*k*u+3*v+3*w,由1)的结论,上述结论正确。记a,b,c分别为所猜数据d除以3,5,7后的余数,则d=70*a+21*b+15*c。为问题的数学模型,其中70称作a的系数,21称作b的系数,15称作c的系数。

问题二,就单纯是递归问题,编者对于递归也不太熟悉,正在逐步探索中。

数学模型:
此问题如果按照习惯,从前向后思考,也就是从第一阶开始,考虑怎么样走到第二阶、第三阶、第四阶……,则很难找出问题的规律;而反过来先思考“到第n阶有哪几种情况?”,答案就简单了,只有两种情况:
1) 从第n-1阶到第n阶;
2) 从第n-2阶到第n阶。
记n阶台阶的走法数为f(n),则
f(n)= 1 n=1
f(n)=2 n=2
f(n-1)+f(n-2) n>2

代码实现

主文件:main.m

%made by Canlong
%%
%编写算法完成下面给余猜谜的游戏
%心里想好一个1~100之间的整数x,将它分别除以3,5,7并得到3个余数。把这三个余数输入计算机,计算机能马上猜出这个数。
%方法一:穷举法
disp('方法一:穷举法')
num1 = input('请输入第一个数:');
num2 = input('请输入第二个数:');
num3 = input('请输入第三个数:'); 
for i=1:100
    if rem(i,3)==num1 && rem(i,5)==num2 && rem(i,7)==num3  
       fprintf('该数为:%d \n',i); 
    end
end

%%
%方法二,建模.
disp('方法二,建模.');
num1 = input('请输入第一个数:');
num2 = input('请输入第二个数:');
num3 = input('请输入第三个数:'); 
d=70*num1+21*num2+15*num3;
while d>105
   d = d-105 ;
end
fprintf('该数为:%d \n',d);

%%
%斐波那契数列的应用
%斐波那契数列有如下特点:a1,a2已知  a(n)=a(n-1)+a(n-2)  n>=3
%例题:楼梯上有n阶台阶,上楼时可以一步上1阶,也可以一步上2阶,编写算法计算共有多少种不同的上楼梯方法
%楼梯阶数
n=10;
disp('如果楼梯阶数为10,上楼梯的方法数,解得:');
fprintf('f(%d)为:%d \n',n,f(n));


函数文件:f.m

%输入n为阶梯数,a为返回的阶梯数
%made by Canlong
function a=f(n)
    if n==1
         a=1;
         return;
    end
    if n==2
         a=2;
         return
    else
         a=f(n-1)+f(n-2);
         return
    end
end

运行结果

在MATLAB R2015b软件下运行得到:

MATLAB算法技巧和实现斐波那契数列的解决思路

总结

  太久没用matlab写代码了,对于matlab很多语法很多都不熟悉了,写到函数那里还以为return 数值会直接返回数值,原来matlab的函数,是通过某个变量来返回值的,不能直接return 数值,如function a=f(n)中的a就是用来接受返回数值的,要返回数值的函数一定要对a进行赋值。这一点上与java等语言不太类似。

原文地址:https://blog.csdn.net/weixin_37610397/article/details/80273085
 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 如何在Abaqus的python中调用Matlab程序
    目录1. 确定版本信息2. 备份python3. 设置环境变量4. 安装程序5. 调试运行参考资料Abaqus2018操作系统Win10 64位Python版本2.7(路径C:\SIMULIA\CAE\2018\win_b64\tools\SMApy\python2.7)2. 备份python将上述的“python2.7”文件夹复制出来,避免因操作错误
    03-16
  • 如何将极坐标数据转换为笛卡尔坐标系并绘制[MATLAB]
    如何将极坐标数据转换为笛卡尔坐标系并绘制[MAT
    你想做的事考虑根据与原点的距离 $r$ 和 $xy$ 平面上的角度 $heta$ 绘制数据 $P(r, heta)$。例如,雷达获取的信号包含有关目标范围 $r$ 和方位角 $heta$ 的信息。就是下图。在本文中,$heta$ 是从 $x$ 轴测量的角度。显示示例考虑创建依赖于 $r, heta$ 的虚拟
    03-16
  • 【MATLAB与机械设计】一维优化进退法确定初始区间
    【MATLAB与机械设计】一维优化进退法确定初始区
    在讨论一维搜索时,首先保证搜索区间函数具有单峰性,也就是在区间[a,b]中函数是凸函数,对于求极小值问题,函数值具有高—低—高的特性,在区间[a,b]上有唯一的最小值。1,方法的建立2.进退法确定搜索区间的程序框图3,根据上述的程序框图,编写的MATLAB程序
    03-08
  • 用于微型四轮驱动的 6T 小齿轮原型和使用 MATLAB 的 FEM 结构分析
    用于微型四轮驱动的 6T 小齿轮原型和使用 MATLA
    介绍我使用迷你 4WD 套件使用 Raspberry Pi 制作机器人汽车。定制零件丰富且方便,因为它们在附近的商店很容易买到。但是,由于Mini 4WD的速度非常快,因此在低速时很难控制速度。因此,我使用 3D 打印机制作了自己的 6T 小齿轮,并尝试改变齿轮比。 成型小齿
    03-08
  • ROS与Matlab系列:一个简单的运动控制 基于matl
    转自:http://blog.exbot.net/archives/2594Matlab拥有强大的数据处理、可视化绘图能力以及众多成熟的算法函数,非常适合算法开发;在控制系统设计中,Simulink也是普遍使用的设计和仿真工具。而ROS系统,则是一种新的标准化机器人系统软件框架。通过ROS,你
    02-10
  • matlab 遍历结构体struc的成员
    MATLAB中专门用于对结构数组的操作的函数并不多,通过 help datatypes获取数据类型列表,可以看到其中的结构数据类型的有关的函数,主要如表4.3.1所示。表4.3.1 结构数组的操作函数函数名             功能描述 deal                 把输入处
    02-09
  • 02-09
  • schroeder reverb matlab实现
    schroeder reverb matlab实现
    原理参考:Natural sounding artificial reverberation combFilter.m:function output = combFilter(delay, gain, input)fs = 48000;delaySample = int32(delayTime * fs / 1000);B = [1 zeros(1, delaySample - 1)];A=[1 zeros(1, delaySample - 2) -gain];
    02-09
  • C/C++中调用matlab引擎计算 matlab转c
    原帖地址:http://blog.sina.com.cn/s/blog_6adcb3530101cvot.html一,在linux环境使用matlab引擎必须先进行一些必要的配置1,matlab引擎依赖/bin/csh启动,所以不管你使用何种shell,都必须安装csh。**2,matlab引擎依赖的动态库文件目录必须在系统当前的
    02-09
  • MATLAB 图像放大/缩小,双线性插值
    MATLAB 图像放大/缩小,双线性插值
    半年前写过matlab最邻近插值的图像缩放,没怎么考虑边界问题。更早之前用Opencv写过双线性插值图像放大,不过写的比较混乱。所以这里用matlab重新再清楚的写一遍。 1 close all; 2 clear all; 3 clc; 45 m=1.8;%放大或缩小的高度 6 n=2.3;%放大或缩小的宽度 7
    02-09
点击排行