目录
斐波那契数列
斐波那契数列和黄金分割率的关联
解析表达式
练习
斐波那契数列
一个人将一对兔子放到一个封闭的围墙内,并假设每对兔子每个月都繁殖出一对兔子,且新生兔子从第二个月开始有繁殖能力,那么一年以后这个封闭的围墙内有多少只兔子。
本月月底的兔子的对数等于月初兔子对数加上刚成熟的新生兔子的对数。
(bunny通常指的是小兔子)
persistent var1 ... varN
将变量var1 ... varN
声明为持久变量。持久变量是声明它们的函数的局部变量;但其值保留在对该函数的各次调用所使用的内存中。当 MATLAB 首次遇到特定persistent
语句时,它将持久变量初始化为空矩阵 ([]
)。clf - 清空图窗
此 MATLAB 函数 删除当前图窗中具有可见句柄的所有子级。shg - 显示当前图窗
此 MATLAB 函数 使当前图窗可见,并将其置于屏幕上所有其他图窗的前面。这与使用命令figure(gcf) 一样。cat 当
A
和B
具有兼容的大小(除运算维度dim
以外的维度长度匹配)时,C = cat(dim,A,B)
沿维度dim
将B
串联到A
的末尾。
C = cat(dim,A1,A2,…,An)
沿维度dim
串联A1
、A2
、…、An
。您可以使用方括号运算符
[]
进行串联。例如,[A,B]
或[A B]
将水平串联数组A
和B
,而[A; B]
将垂直串联它们。uicontrol - 创建用户界面控件
c = uicontrol
在当前图窗中创建一个普通按钮(默认用户界面控件),并返回UIControl
对象。如果图窗不存在,则 MATLAB® 调用 figure 函数以创建一个图窗。
c = uicontrol(Name,Value)
创建一个用户界面控件,其中包含使用一个或多个名称-值对组参数指定的属性值。例如,'Style','checkbox'
会创建一个复选框。
c = uicontrol(parent)
在指定的父容器中创建默认用户界面控件,而不是默认为在当前图窗中。
c = uicontrol(parent,Name,Value)
指定用户界面控件的父容器和一个或多个名称-值对组参数。
uicontrol(c)
将焦点放在一个以前定义的用户界面控件上。set 设置图形对象属性
set(H,Name,Value)
为H
标识的对象指定其Name
属性的值。使用时须用单引号将属性名引起来,例如,set(H,'Color','red')
。如果H
是对象的向量,则set
会为所有对象设置属性。如果H
为空(即[]
),set
不执行任何操作,但不返回错误或警告。
set(H,NameArray,ValueArray)
使用元胞数组NameArray
和ValueArray
指定多个属性值。要为m
个图形对象中的每个图形对象设置n
个属性值,请将ValueArray
指定为m
×n
的元胞数组,其中m = length(H)
,而n
等于NameArray
中包含的属性名的数量。
set(H,S)
使用S
指定多个属性值,其中S
是一个结构体,其字段名称是对象属性名称,字段值是对应的属性值。
s = set(H)
返回H
标识的对象的、可由用户设置的属性及其可能的值。s
是一个字段名称是对象属性名称且字段值是对应属性的可能值的结构体。如果您不指定输出参数,MATLAB 软件会在屏幕上显示该信息。H
必须为单个对象。
values = set(H,Name)
返回指定属性的可能值。如果可能的值为字符向量,则set
会在元胞数组values
的元胞中返回每个值。对于其他属性而言,set
会返回一个指示Name
没有一组固定属性值的语句。如果您不指定输出参数,MATLAB 会在屏幕上显示该信息。H
必须为单个对象。findobj 查找具有对应属性的图形对象
h = findobj
返回图形根对象及其所有后代。
h = findobj(prop,value)
返回层次结构中属性prop
设置为value
的所有对象。
h = findobj('-not',prop,value)
返回其指定属性未设置为指定值的所有对象。
h = findobj(prop1,value1,oper,prop2,value2)
将逻辑运算符oper
应用于prop,value
对组。例如,h = findobj('LineStyle','--','-and','Marker','o')
返回具有虚线线型和圆形标记的所有对象。
h = findobj('-regexp',prop,expr)
使用正则表达式来查找具有特定属性值的对象。函数返回属性值满足正则表达式的对象。
h = findobj('-property',prop)
返回具有指定属性的所有对象。
h = findobj(prop1,value1,...,propN,valueN)
返回层次结构中指定属性设置为指定值的所有对象。您可以用上述语法中的其他输入参数组合替换prop,value
对组。
function rabbits(handle)
% RABBITS Fibonacci's rabbit pen.
% How fast does the population grow?
% rabbits, with no arguments, initializes the simulation.
% rabbits(handle) is the callback with each button click.
% Initialize with a blue bunny in the center of the figure.
% Clicking on a blue bunny turns it into a blue rabbit.
% Clicking on a blue rabbit creates a gray bunny and turns the rabbit gray.
% Clicking on a gray bunny or gray rabbit does nothing.
% When all the bunnies and rabbits are gray, count them and turn them all blue.
% R = structure of rabbit images.
% pos = history of positions.
persistent R pos
if nargin == 0
% Initialize single blue bunny and uicontrols.
init_graphics
else
% Process a button click.
switch get(handle,'tag')
case 'bluebunny'
% A blue bunny turns into a gray rabbit.
bluebunny(handle)
case 'bluerabbit'
% A blue rabbit creates a gray bunny and turns gray itself.
bluerabbit(handle)
case 'graybunny'
% A gray bunny does nothing.
case 'grayrabbit'
% A gray rabbit does nothing.
end
% When all are gray, turn them all blue.
update
end
% ------------------------------
function init_graphics
clf reset
shg
R = load('rabbits.mat');
R.graybunny = cat(3,R.bunny,R.bunny,R.bunny);
R.grayrabbit = cat(3,R.rabbit,R.rabbit,R.rabbit);
R.bluebunny = cat(3,R.bunny,R.bunny,255*ones(size(R.bunny),'uint8'));
R.bluerabbit = cat(3,R.rabbit,R.rabbit,255*ones(size(R.rabbit),'uint8'));
f = get(gcf,'position');
p = .45*f(3:4);
pos = p;
% Single bunny
uicontrol('style','pushbutton','position',[p 80 80], ...
'background','white','cdata',R.bluebunny,'tag','bluebunny', ...
'callback','rabbits(gcbo)');
% Population counter
uicontrol('style','text','fontsize',12,'fontweight','bold', ...
'position',[f(3)/2-14 f(4)-40 28 28],'string','1')
% Auto toggle
uicontrol('style','toggle','position',[20 20 60 20], ...
'string','auto','callback',@auto)
end
% ------------------------------
function bluebunny(handle)
% A blue bunny turns into a gray rabbit.
set(handle,'cdata',R.grayrabbit,'tag','grayrabbit', ...
'callback','rabbits(gcbo)')
end
% ------------------------------
function bluerabbit(handle)
% A blue rabbit creates a gray bunny and turns gray itself.
p = find_good_position;
uicontrol('style','pushbutton','position',[p 80 80], ...
'background','white','cdata',R.graybunny,'tag','graybunny', ...
'callback','rabbits(gcbo)');
set(handle,'cdata',R.grayrabbit,'tag','grayrabbit', ...
'callback','rabbits(gcbo)');
end
% ------------------------------
function p = find_good_position
% Avoid toggle and population counter.
f = get(gcf,'position');
ds = -Inf;
% Choose best of several random positions.
for k = 1:20
p = .80*f(3:4).*rand(1,2);
% Avoid toggle in lower right hand corner.
if p(1) < 80 && p(2) < 40
continue
end
% Avoid population counter centered near the top.
f = get(gcf,'pos');
if (p(2)+80 > f(4)-40) && (p(1)+80 > f(3)/2-14) ...
&& (p(1) < f(3)/2+14)
continue
end
r = p(ones(size(pos,1),1),:);
d = min(min(abs(pos-r)'));
if d > ds
ds = d;
ps = p;
end
end
p = ps;
pos = [pos; p];
end
% ------------------------------
function update
% When all are gray, turn them all blue.
b = findobj(gcf,'style','pushbutton');
n = length(b);
c = get(b,'tag');
if n == 1
c = {c};
end
% Check for all gray.
if length(findstr([c{:}],'gray')) == n
pause(1.0)
for k = 1:n
if findstr(c{k},'graybunny')
set(b(k),'cdata',R.bluebunny,'tag','bluebunny', ...
'callback','rabbits(gcbo)')
else
set(b(k),'cdata',R.bluerabbit,'tag','bluerabbit', ...
'callback','rabbits(gcbo)');
end
end
% Update population counter.
set(findobj(gcf,'style','text'),'string',n)
end
end
% ------------------------------
function auto(handle,~)
% Auto toggle callback
% Complete one month's growth
set(handle,'enable','off')
b = [findobj(gcf,'tag','bluebunny')
findobj(gcf,'tag','bluerabbit')];
n = length(b);
b = b(randperm(n));
for k = 1:n
rabbits(b(k))
pause(.1)
end
set(handle,'enable','on','value',0)
end
end % rabbits
斐波那契数列实现
function f = fibnum(n)
%FIBNUM Fibonacci number.
% FIBNUM(n) demonstrates recursion by generating the n-th Fibonacci number.
% Warning: FIBNUM(50) takes a very long time.
if n <= 1
f = 1;
else
f = fibnum(n-1) + fibnum(n-2);
end
function f = fibonacci(n)
%FIBONACCI Fibonacci sequence
% f = FIBONACCI(n) generates the first n Fibonacci numbers.
f = zeros(n,1);
f(1) = 1;
f(2) = 2;
for k = 3:n
f(k) = f(k-1) + f(k-2);
end
斐波那契数列和黄金分割率的关联
斐波那契的兔子并非每个月增加一杯,而是在前一个月的基础上乘以一个黄金分割比。
n=40
f=fibonacci(n)
r=f(2:n)./f(1:n-1)
phi=(1+sqrt(5))/2
r-phi
%得出来值为1.618
解析表达式
n=(1:40)';
f=(phi.^(n+1)-(1-phi).^(n-1))/(2*phi-1)
f = round(f)
练习
tic - 启动秒表计时器
此 MATLAB 函数 与 toc 函数结合使用,可以测量经过的时间。tic 函数记录当前时间,toc
函数使用记录的值计算经过的时间。toc - 从秒表读取已用时间
此 MATLAB 函数 读取由调用 tic 函数启动秒表计时器以来经过的时间。MATLAB 读取执行 toc函数时的内部时间,并显示最近一次不带输出调用 tic 函数以来经过的时间。经过的时间以秒为单位表示。
奇偶性
clear
n=100
f=fibonacci(n)
for k = 1:n
if mod(f(k),2)==1
fprintf('第%d个斐波那契数为奇数\n',k)
elseif mod(f(k),2)==0
fprintf('第%d个斐波那契数为偶数\n',k)
end
end
质数
isprime - 确定哪些数组元素为质数
此 MATLAB 函数 返回与 X 大小相同的逻辑数组。如果 X(i) 为质数,则 TF(i) 的值为
true。否则,值为 false。for k = 1:n if isprime(f(k))== 1 fprintf('第%d个斐波那契数质数\n',k) elseif isprime(f(k))==0 fprintf('第%d个斐波那契数不是质数\n',k) end end
求解方程
mldivide - 求解关于 x 的线性方程组 Ax = B
此 MATLAB 函数 对线性方程组 A*x = B 求解。矩阵 A 和 B 必须具有相同的行数。如果 A
未正确缩放或接近奇异值,MATLAB 将会显示警告信息,但还是会执行计算。x = A\B
x = mldivide(A,B)
Matlab学习笔记(6.2)线性方程组求解 - 知乎
clear
syms c1 c2 phi;
eq1=c1+c2-1
eq2=c1*phi+c2*(1-phi)-1
syms x y;
[c1,c2]=solve(eq1,eq2,c1,c2)
phi=(1+sqrt(5))/2
A=[1 1; phi 1-phi]
B=[-1 -1]
x=A/B
对数绘图
semilogy(fibonacci(18),'-o')
semilogy - 半对数图(y 轴有对数刻度)
此 MATLAB 函数 在 x 轴上使用线性刻度、在 y 轴上使用以 10 为底的对数刻度来绘制 x 和y 坐标。 要绘制由线段连接的一组坐标,请将 X 和 Y 指定为相同长度的向量。 要在同一组坐标轴上绘制多组坐标,请将 X 或 Y 中的至少一个指定为矩阵。%% semilogy(fibonacci(18),'-o') %自变量 a1 = 1 : 18; %因变量 b1 = log(fibonacci(18)); xiuu = polyfit(a1,b1,1); k = xiuu(1) b=xiuu(2)