斐波那契数列:python实现和可视化

1 说明

====

1.1 斐波那契数列的介绍。

1.2 斐波那契数列是上帝的指纹,大自然中随处可见,目前广泛应用到黄金分割线的布局美和股市等预测等等。

1.3 斐波那契数列的python的matplotlib和turtle的可视化。

1.4 本文为整理后的资料,小白易懂,适合收藏。

斐波那契数列:python实现和可视化

斐波那契 – 意大利数学家-1175年-1250年;

2 斐波那契数列

===========

2.1 斐波那契数列(Fibonacci sequence),又称黄金分割数列。

2.2 因他以兔子繁殖为例子而引入,故又称为“兔子数列”。

2.3 数列为:1、1、2、3、5、 8、13、21、34、55、89、144……

2.4 数列中的数为斐波那契数。

2.5 斐波那契数列是上帝的指纹,是一切自然纹理的规律线,文末有图。

3 先看看python的可视化效果图

=======================

3.1 图1

斐波那契数列:python实现和可视化

500以内的斐波那契数

3.2 图2:

斐波那契数列:python实现和可视化

3.3 图3

斐波那契数列:python实现和可视化
斐波那契数列:python实现和可视化

3.4 图4

斐波那契数列:python实现和可视化
斐波那契数列:python实现和可视化

3.5 图5

斐波那契数列:python实现和可视化

4 图片的代码

==========

4.1 图1的代码:

import matplotlib.pyplot as plt

#定一个空列表,存放斐波那契数列的数

#作为可视化y坐标轴值

y_data=[]

#数列产生

def fib(n):

a=0

b=1

while a<=n:

#将产生的数列的数添加到列表中

y_data.append(a)

a,b=b,a b

#自定义输入自然整数范围

n=int(input(\’请输入非0任意整数:,推荐500:\’))

#调出函数产生数列

fib(n)

#定义x坐标轴数列个数序号

x_data=[i for i in range(len(y_data))]

#标题名

plt.title(\’该数列的个数:\’ str(len(y_data)))

#作图

plt.plot(x_data,y_data,\’r\’,marker=\’o\’)

#数值标注

for xy in zip(x_data, y_data):

plt.annotate(“(%s,%s)” % xy, xy=xy, xytext=(-20, 10), textcoords=\’offset points\’)

#图片展示

plt.show()

4.2 图2代码

#参考文章:https://blog.csdn.net/cd_don/article/details/87212314

#导出模块

import numpy as np

import matplotlib.pyplot as plt

#定义数列产生的函数

def fibo(n):

if n == 0:

fibo_list = np.array([0])

#修改源代码bug

elif n == 1:

fibo_list = np.array([0,1])

else:

f_0, f_1 = 0, 1

fibo_list = np.array([f_0,f_1])

for i in np.arange(n-2):

fibo_num = f_0 f_1

fibo_list = np.append(fibo_list,fibo_num)

f_0, f_1 = f_1, fibo_num

return fibo_list

#定义划线函数,由列表找到xy坐标

def find_o_xy(f_list):

#起始圆心坐标

x_n, y_n = 0, 0

o_x_array, o_y_array = np.array([x_n]), np.array([y_n])

for n in np.arange(1,len(f_list)):

#需要注意pyhton中计数是从0开始

#第一项作为起始点已经给出

y_n=y_n np.mod(n 1,2)*f_list[n]*(-1)**(1 (np.mod(n 1,2) n 1)/2)

x_n=x_n np.mod(n,2)*f_list[n]*(-1)**(1 (np.mod(n 1,2) n 1)/2)

#横纵坐标(x,y)

o_x_array = np.append(o_x_array, x_n)

o_y_array = np.append(o_y_array, y_n)

return o_x_array, o_y_array

#画圆弧设置

#以下绘图以n=7为例

count = 7

f_list = fibo(count)

x0_array,y0_array = find_o_xy(f_list)

#各个正方形对应的边长,如例图半径从1,2…开始

f_list_r = fibo(count 2)[2::]

#画出各个正方形内的1/4圆

start_angle, end_angle = np.pi, 1.5*np.pi

for n in np.arange(len(f_list)):

t=np.arange(start_angle,end_angle,0.001)

circle_x = (f_list_r[n])*(np.sin(t)) x0_array[n]

circle_y = (f_list_r[n])*(np.cos(t)) y0_array[n]

start_angle = 0.5*np.pi

end_angle = 0.5*np.pi

#画圆弧形

plt.plot(circle_x,circle_y,color=\’r\’)

#标题

plt.title(\’斐波那契数列螺旋线\’)

#图片展示

plt.show()

4.3 图3代码

#导入模块

from turtle import *

#输入自定义数列的个数

amount=int(input(“请输入斐波那契数列的而个数,推荐15:”))

#数列产生

a1=0

a2=1

tem_he=0

shulie=[]

for i in range(1,amount):

#终端输出数列的数值

print(a1,end=\’,\’)

tem_he=a1 a2

a1=a2

a2=tem_he

#数列添加数值

shulie.append(tem_he)

#turtle画图

for i in range(1,amount-1):

for n in range(4):

forward(shulie[i])

left(90)

#画圆

circle(shulie[i],90)

#输出数列数值

write(shulie[i],font=(“微软雅黑”,i*2))

mainloop()

4.4 图4代码

# encoding:utf-8

#参考文章

#https://blog.csdn.net/jiyeguhong/article/details/108020193?utm_medium=distribute.pc_relevant.none-task-blog-utm_term-2&spm=1001.2101.3001.4242

import turtle

from random import random

def draw_square(r):

t.fillcolor(random(), random(), random())

t.begin_fill()

for _ in range(4):

t.fd(r)

t.left(90)

# 填充关键点,正方形填充一半就结束,然后立即开始圆形填充

if _ == 1:

t.end_fill()

t.fillcolor(random(), random(), random())

t.begin_fill()

t.circle(r, 90)

t.end_fill()

return

if __name__ == \’__main__\’:

t = turtle.Turtle()

t.hideturtle()

t.up()

t.goto(-130, 50)

t.down()

t.pensize(3)

# 黄金比例

scale = 0.618

# 初始半径

r = 50

for _ in range(5):

draw_square(r)

r /= scale

turtle.mainloop()

4.5 图5

#参看文章:https://blog.csdn.net/cd_don/article/details/87212314

#导出模块

import numpy as np

#其实就是matplotlib模块

import pylab as plt

# 产生菲波那切数列

def fibo(n):

f_0 = 0

f_1 = 1

fibo_list = np.array([f_0,f_1])

for i in np.arange(n-2):

fibo_num = f_0 f_1

fibo_list = np.append(fibo_list,fibo_num)

f_0, f_1 = f_1, fibo_num

return fibo_list

#找出各个圆心

def find_o_xy(f_list):

x_n, y_n = 0, 0 #起始圆心坐标

o_x_array, o_y_array = np.array([x_n]), np.array([y_n])

for n in np.arange(1,len(f_list)):

#需要注意pyhton中数组计数是从0开始

#第一项作为起始点已经给出

y_n=y_n np.mod(n 1,2)*f_list[n]*(-1)**(1 (np.mod(n 1,2) n 1)/2)

x_n=x_n np.mod(n,2)*f_list[n]*(-1)**(1 (np.mod(n 1,2) n 1)/2)

o_x_array = np.append(o_x_array, x_n)

o_y_array = np.append(o_y_array, y_n)

return o_x_array, o_y_array

count = 6 #为7是需要调整figsize=(10,10)大小

f_list = fibo(count)

x0_array,y0_array = find_o_xy(f_list)

#————————头像4—————————-

f_list_r = fibo(count 2)[2::]

start_angle, end_angle = np.pi, 1.5*np.pi

fig = plt.figure(num=1,facecolor=\’k\’,figsize=(10,10))

#增加坐标轴对象,显示box

ax = fig.add_axes([0.0, 0.0, 1.0, 1.0], frameon=True,aspect=1)

x_min, x_max, y_min, y_max = 0, 0, 0, 0

for n in np.arange(len(f_list_r)):

#圆心坐标

x0 = x0_array[n]

y0 = y0_array[n]

#得到对角顶点坐标

x2 = x0 f_list_r[n]*(-1)**((np.mod(n 1,2) n 1)/2)

if n == 0:

y2 = -1 #起始点特殊目前只想到这么整了

else:

y2 = y0 f_list_r[n]*(-1)**(1 (np.mod(n,2) n)/2)

#画出圆弧

t=np.arange(start_angle,end_angle,0.001)

circle_x = (f_list_r[n])*(np.sin(t)) x0_array[n]

circle_y = (f_list_r[n])*(np.cos(t)) y0_array[n]

start_angle = 0.5*np.pi

end_angle = 0.5*np.pi

#画图,在坐标轴上画图

ax.plot(np.append(x0_array[n],np.append(circle_x,x0_array[n])),

np.append(y0_array[n],np.append(circle_y,y0_array[n])),

color=\’k\’,linewidth=5)

ax.fill(np.append(circle_x,x0_array[n]),

np.append(circle_y,y0_array[n]),

facecolor=\’gold\’,alpha = 1)#f5bf03

#设置axes内的填充颜色

ax.patch.set_facecolor(\’k\’)

#调节坐标范围

x_min,x_max=8.5,-11.5

y_min,y_max=10,-10

mul_times = 1.5

ax.set_xlim(x_min*mul_times, x_max*mul_times)

ax.set_ylim(y_min*mul_times, y_max*mul_times)

#不显示坐标轴刻度以及刻度线

ax.tick_params(axis=\’both\’,labelsize=0,length=0)

#图片展示

plt.show()

5 大自然

斐波那契数列:python实现和可视化

黄金分割数列:黄金分割线

斐波那契数列:python实现和可视化

按照布局的照片最美

斐波那契数列:python实现和可视化

内容出处:,

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/procedure/12262.html

发表评论

登录后才能评论