日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

ProE复杂曲线方程:Python Matplotlib 版本代码(L系统,吸引子和分形)

發布時間:2023/12/31 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ProE复杂曲线方程:Python Matplotlib 版本代码(L系统,吸引子和分形) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?????? 對生長自動機的研究由來已久,并在計算機科學等眾多學科中,使用元胞自動機的概念,用于生長模擬。而復雜花紋的生成,則可以通過重寫一定的生長規則,使用生成式來模擬自然紋理。當然,很多紋理是由人本身設計的,其形成過程本身就是在人腦中進行“原胞生成”的過程。

??????? 基礎理論抄自于基礎百科。

??????? 來自于百度百科:L-系統是匈牙利生物學家Aristid LinderMayer于1968年提出的。.L-系統的本質是一個重寫系統,通過對植物對象生長過程的經驗式概括和抽象,初始狀態與描述規則,進行有限次迭代,生成字符發展序列以表現植物的拓撲結構,并對產生的字符串進行幾何解釋,就能生成非常復雜的分形圖形。

詳細介紹

一類動態細胞自動機,在每一(時間)步上,其中的各個細胞可以由給定狀態變為一個新的狀態,或消亡或分裂為具有某種狀態組合的細胞串。A.林頓梅伊爾曾用這種細胞自動機描述絲狀有機體的發育過程,所以叫作林頓梅伊爾系統,簡稱L系統。 在喬姆斯基形式語言理論中,字母表被分成終結字母表和非終結字母表部分,“字”是由終結字母組成的字母序列。在L系統中,沒有單獨的終結字母表,所有生成的字都在系統語言中;初始字母可以被初始字所代替;被注視的字所包含的各個字母同時進行改寫。每個字母代表一個細胞,用字表示細胞陣列發展的階段。生成式對應于發展指令,這些指令的應用使有機體生長成已知類型。消亡的細胞可以用空字e表示。細胞之間可以有,也可以沒有交互作用(信息傳遞)。有交互作用的有1L系統和2L系統。沒有交互作用的叫作0L系統。 0L系統是一個三元組Γ=(G,g,δ),其中G為一個有限非空集合,叫作字母表;g為G中元素的非空序列,即非空字;δ為一個(轉移)函數,首先取作從G到G*(G中元素所能構成的一切序列的集合)的有限非空子集的映射。然后,把δ擴充為從G*到G*的有限非空子集的映射。 如果空字e不能替換任何字母,即對 G中所有字母ɑ,都有e唘δ(ɑ),就稱Γ為增殖0L系統,簡稱P0L系統;如果對字母表內每一個字母有且只有一個轉移規則,即對G中所有ɑ,在G*中只有一個字p使δ(ɑ)={p},就稱Γ為確定的0L系統,簡稱 D0L系統。顯然(P0L∪D0L)吇0L。而既增殖又確定的DL系統稱為DP0L。


分別描述

從另一角度,元胞自動機可視為動力系統,因而可將初始點、軌道、不動點、周期軌和終極軌等一系列概念用到元胞自動機的研究中,上述分類,又可以分別描述為(譚躍進,1996;謝惠民,1994;李才偉、1997); ⑴均勻狀態,即點態吸引子,或稱不動點; ⑵簡單的周期結構,即周期性吸引子,或稱周期軌; ⑶混沌的非周期性模式,即混沌吸引子; ⑷這第四類行為可以與生命系統等復雜系統中的自組織現象相比擬,但在連續系統中沒有相對應的模式。但從研究元胞自動機的角度講,最具研究價值的具有第四類行為的元胞自動機,因為這類元胞自動機被認為具有"突現計算"(Emergent Computation)功能,研究表明,可以用作廣義計算機(Universal Computer)以仿真任意復雜的計算過程。另外,此類元胞自動機在發展過程中還表現出很強的不可逆(lrreversibility)特征,而且,這種元胞自動機在若干有限循環后,有可能會 "死"掉,即所有元胞的狀態變為零。

Python代碼:

提前升級matplotlib:

?????? 為避免環境問題,切換至python3

或不擔心環境問題,或者在python2中

pip install --upgrade matplotlib 謹慎操作,容易出現問題

否則有可能找不到mpl_toolkits組件
L系統
def mainex():#drawsemilogx();#drawLorenzAttractor();#drawLeaf();#未成功#drawLSystem();#drawIsoLine();#drawFourFlower();#drawFlowers();drawBranch();#drawStar();#drawPillar(); #為了畫吸引子 def get_lines(rule):d = rule['direct']a = rule['angle']p = (0.0, 0.0)l = 1.0lines = []stack = []info = rule['S']for i in range(rule['iter']):ninfo = []for c in info:if c in rule:ninfo.append(rule[c])else:ninfo.append(c)info = "".join(ninfo)for c in info:if c in "Ff":r = d * pi / 180t = p[0] + l*cos(r), p[1] + l*sin(r)lines.append(((p[0], p[1]), (t[0], t[1])))p = telif c == "+":d += aelif c == "-":d -= aelif c == "[":stack.append((p,d))elif c == "]":p, d = stack[-1]del stack[-1]return linesdef draw(ax, rule, iter=None):if iter!=None:rule["iter"] = iterlines = get_lines( rule )linecollections = collections.LineCollection(lines)ax.add_collection(linecollections, autolim=True)ax.axis("equal")ax.set_axis_off()ax.set_xlim(ax.dataLim.xmin, ax.dataLim.xmax)ax.invert_yaxis()def drawBranch():fig = plt.figure(figsize=(8,6))fig.patch.set_facecolor("w")ax = fig.add_subplot(111);ruleBranch={"X":"F-[[X]+X]+F[+FX]-X", "F":"FF", "S":"X","direct":-45,"angle":25,"iter":4,"title":"Plant"}draw(ax, ruleBranch);fig.subplots_adjust(left=0,right=1,bottom=0,top=1,wspace=0,hspace=0)plt.show();
洛倫茲吸引子: def drawLorenzAttractor():xs, ys, zs = [], [], [];def mkPoints(): a, b, c = 10.0, 28.0, 8.0 / 3.0 h = 0.01 x0, y0, z0 = 0.1, 0, 0 for i in xrange(10000): x1 = x0 + h * a * (y0 - x0) y1 = y0 + h * (x0 * (b - z0) - y0) z1 = z0 + h * (x0 * y0 - c * z0) x0, y0, z0 = x1, y1, z1 xs.append(x0) ys.append(y0) zs.append(z0);mpl.rcParams["legend.fontsize"] = 10;fig = plt.figure() ax = Axes3D(fig) mkPoints();ax.plot(xs, ys, zs, label = "Lorenz's strange attractor") ax.legend() plt.show()
顯示結果:
?

總結

以上是生活随笔為你收集整理的ProE复杂曲线方程:Python Matplotlib 版本代码(L系统,吸引子和分形)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。