基于斐波纳契比的阻尼正弦波

时间:2018-02-11 17:31:28

标签: matlab octave fibonacci exponential

如何根据斐波纳契比制作阻尼/阻尼正弦波?

我可以使用Octave / Matlab创建一个基于Fibonacci比率的图,请参阅下面的代码以及图。

clear all,clf reset, clc,tic
more off

fib1=[1,1,2,3,5,8,13,21]
fib2=[1,2,3,5,8,13,21,34]
y=fib1./fib2
x_end=size(fib1,2);
x=[1:x_end]
plot(x,y)

Fib plot

我试图让情节看起来像一个阻尼的sin波,但基于Fibonacci比率。参见示例阻尼图。

Ps:我正在使用Octave 4.0,就像Matalb

Damped sine wave

1 个答案:

答案 0 :(得分:3)

我想我理解你在寻找什么。基本上,这个问题背后的主要概念是从Fibonacci序列中提取的连续数的比率可以接近golden number(也称为phi),并且你越高入到序列,可以近似phi。从这个假设开始,您希望表明这些比率与phi的关联方式遵循damped sine wave定义的模式。

你的情节的主要问题来自于用于绘图的点太少的事实,因此得到的线看起来是分段的而不是显示典型的正弦形状。此外,被一个(fib2)偏移的序列应该是被另一个(fib1)除的那个,而不是相反的......只要我没有误解你的目标。

如果范围x = 0:0.01:9包含足够的点以允许使用正确的形状绘制线条,那么让我们从构建和绘制波浪本身开始:

x_max = 9;
x = 0:0.01:x_max;

gr = (1 + sqrt(5)) / 2;
w = (gr - 2) .* exp(1 - x) .* cos(pi() .* x) + gr;
plot(x,w);

seq = 1:(x_max+2);
fib = fibonacci(seq);
p = fib(2:end) ./ fib(1:end-1);

y = NaN(size(x));
y(ismember(x,seq-1)) = p;

hold on;
plot(x,y,'or');
hold off;

最终输出:

Output

如果您的唯一目标是绘制您计算的波浪...正如我之前所说,主要问题是缺少积分。仅有8个点,由于精度差,线条会失去形状。为了解决这个问题,请按照以下方式编写代码(正如Cris建议的那样spline,在这种情况下是一个非常好的工具):

fib1 = [1,1,2,3,5,8,13,21];
fib2 = [1,2,3,5,8,13,21,34];
y = fib1 ./ fib2;
y = spline(0:7,y,0:0.01:7);

plot(y);