1 說明
=====
1.1 2020年諾貝爾生物理學獎獲得者:
英國科學家羅傑·彭羅斯(Roger Penrose),因他發現黑洞的形成是廣義相對論的一個預言;
德國科學家萊因哈德·根澤爾(Reinhard Genzel)&
美國女科學家安德烈亞·蓋茲(Andrea Ghez),因他們發現銀河系中心的超大質量緻密天體。
1.2 數字黑洞與python-matplotlib可視化
==============================
1.2.1 數字黑洞:
無論怎樣數值,在規定的處理法則下,最終都將得到固定的一個值,再也跳不出去了,
就像宇宙中的黑洞可以將任何物質,以及運行速度最快的光牢牢吸住,不使它們逃脫一樣。
1.2.2 看似無聊,但是數學是宇宙中一切的基礎。
1.2.3 一個有意思的數字遊戲,即:輸入一個非0的自然數,
若為奇數則*3-1;若是偶數則/2,並且得到的自然數繼續進行這樣的運算,到1則停止
(會導致最後五個數值都是:1回落)特點在於:
不論輸入什麼自然數(0除外),最終的結果都是1,就像黑洞一樣,無論什麼數字都無法逃脫。
1.2.4 python-matplotlib可視化來看看效果:
pic1:n=2341(完整版)
pic2:n=2341(後10個數回落)
pic3:n=481359246(完整版)
pic4:n=481359246(後十位數值)
規律:最後10個數值:13-40-20-10-5-16-8-4-2-1
pic5:輸入n為個位數1~6的情況
2 matplotlib代碼
============
2.1 基礎代碼1:
來自這篇文章
https://blog.csdn.net/suoper/article/details/80896324?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.add_param_isCf
def black(number): if number>1: if number%2==0: number=number/2 else: number=number*3+1 return numberprint('---You can input 0 to stop program---')while True: n=int(input('----please input a number which you want to show:')) if n==0: print('----math black hole program have been stopped----') break while n>1: n=black(n) print(n)
2.2 完整版matplotlib可視化代碼2:
#導入模塊可視化用import matplotlib.pyplot as plt#定一個空列表,存放數值num_data=[]#數字黑洞函數def black(number): if number>1: if number%2==0: number=number/2 else: number=number*3+1 return number#定義主函數def main(): n=int(input('請輸入非0任意整數:')) plt.title('輸入的數字是:'+str(n)) while n>1: n=black(n) num_data.append(n) #產生x坐標的升序列表 x=[i for i in range(len(num_data))] #y坐標軸數值來自數字黑洞數值 y=num_data #作圖line但有點 plt.plot(x,y,marker='o') plt.show()main()
2.3 後10位數字黑洞數值的可視化代碼3:
#導出模塊import matplotlib.pyplot as plt#定義空列表存放數字黑洞的數值num_data=[]#數字黑洞函數def black(number): if number>1: if number%2==0: number=number/2 else: number=number*3+1 return number#主函數def main(): n=int(input('請輸入非0任意整數:')) plt.title('輸入的數字是:'+str(n)) while n>1: n=black(n) num_data.append(n) #取10個數:0~9坐標x坐標軸坐標值 x=[i for i in range(10)] #從數字黑洞num_data中切片,取值該列表的後10位作為y坐標值 y=num_data[(len(num_data)-10):len(num_data):1] plt.plot(x,y,'r',marker='o') #數值標註 for xy in zip(x, y): plt.annotate("(%s,%s)" % xy, xy=xy, xytext=(-20, 10), textcoords='offset points') plt.show()main()
3 當然數字黑洞還有很多,上面只是其中一個方法,最終回落1,就像宇宙中的黑洞存在。