نمای لیاپانوف (Lyapunov Exponent) چیست؟ — از صفر تا صد

۱۳۰۲ بازدید
آخرین به‌روزرسانی: ۲۴ اردیبهشت ۱۴۰۲
زمان مطالعه: ۶ دقیقه
نمای لیاپانوف (Lyapunov Exponent) چیست؟ — از صفر تا صد

در این مطلب قصد داریم به معرفی یک معیار تحلیلی بسیار مفید بپردازیم که می‌تواند در توصیف کردن آشوب (Chaos) به ما کمک کند. این معیار «نمای لیاپانوف» (Lyapunov Exponent) یا توان لیاپانوف نام دارد. نمای لیاپانوف مشخص می‌کند که یک فاصله بسیار کوچک بین دو حالت که در ابتدا بسته بوده‌اند، با چه سرعتی در طول زمان رشد می‌کند. برای این کار از فرمول زیر استفاده می‌شود:

997696

Ft(x0+ε)Ft(x0)εeλt\label9.2 F ^ { t } ( x _ 0 + ε ) − F ^ { t } ( x _ 0 ) ≈ ε e ^ { λ t } \label { 9 . 2 }

سمت چپ از این معادله برابر با فاصله بین دو مجموعه در ابتدا بسته، بعد از t گام است و سمت راست از معادله نشان دهنده این فرض است که فاصله در طول زمان به صورت نمایی رشد می‌کند. مقدار توان λ λ در یک بازه طولانی زمانی (در حالت ایده‌آل t t → ∞ ) اندازه‌گیری می‌شود و همان توان لیاپانوف است.

اگر مقدار λ>0 λ > 0 باشد، آن‌گاه فواصل کوچک به صورت نامحدود در طول زمان رشد می‌کنند که این امر بدین معنی است که «مکانیزم کشش» (Stretching Mechanism) تاثیرگذار است. همچنین اگر λ<0 λ < 0 باشد، فواصل کوچک به صورت نامحدود رشد نمی‌کنند. به عبارت دیگر، سیستم به تدریج در یک مسیر متناوب مستقر خواهد شد.

البته باید به این نکته توجه کرد که نمای لیاپانوف فقط کشش سیستم را توصیف می‌کند، اما کشش تنها مکانیزم یک سیستم آشوب نیست. بنابراین نتیجه می‌گیریم که مکانیزم «پیچش» (Folding) در توان لیاپانوف مد نظر قرار داده نشده است.

محاسبه نمای لیاپانوف

حال می‌توانیم با استفاده از ساده‌سازی‌های ریاضی، از معادله تبدیل فوق، یک معادله به دست بیاوریم که محاسبه آن راحت‌تر باشد. در نتیجه به صورت زیر عمل می‌کنیم:

eλtFt(x0+ε)Ft(x0)ε\label9.3 e ^ { λ t } ≈ \frac { | F ^ { t } ( x _ { 0 } + ε ) − F ^ { t } ( x _ { 0 } ) | } { ε } \label { 9 . 3 }

λ=limt,ε01tlogFt(x0+ε)Ft(x0)ε λ = \lim _ { t → ∞ , ε → 0 } \frac { 1 } { t } \log { \frac { | F ^ { t } ( x _ { 0 } + \varepsilon ) - F ^ { t } ( x _ { 0 } ) | } { \varepsilon } }

=limt1,ε01tlogdFdxx=x0 = \lim _ { t → ∞ 1 , ε → 0 } \frac { 1 } { t } \log { | \frac { d F } { d x } | _ { x = x _ 0 } | }

حال می‌توانیم قاعده مشتق زنجیره ای را به فرمول فوق اعمال کنیم:

λ=limt1tlogdFdxx=Ft1(x0)=xt1dFdxx=Ft2(x0)=xt2dFdxx=x0 λ = \lim _ { t → ∞ } \frac { 1 } { t } \log { | \frac { d F } { d x } } | _ { x = F ^ { t − 1 } ( x _ 0 ) = x _ { t − 1 } } · \frac{ d F } { d x } | _ { x = F ^ { t − 2 } ( x _ 0 ) = x _ { t − 2 } } · · · · \frac { d F } { d x } | _ { x = x _ { 0 } }

limt1ti=0t1logdFdxx=xi \lim _ { t \rightarrow \infty } \frac { 1 } { t } \sum ^ { t - 1 } _ { i = 0 } \log { | \frac { d F } { d x } | _ { x = x _ { i } } | }

نتیجه نهایی بسیار ساده است. نمای لیاپانوف به صورت یک میانگین زمانی از logdFdx \log | \frac { d F } { d x } | در هر گام از شبیه سازی سیستم محاسبه می‌شود. به دست آوردن توان لیاپانوف به این روش بسیار ساده است.

محاسبه توان لیاپانوف در پایتون

حال به سراغ پایتون می‌رویم.

کدهای مربوط به محاسبه نمای لیاپانوف در پایتون به صورت زیر است.

1import numpy as np
2import matplotlib.pyplot as plt
3
4#Define the Logistic Equation. This will be used for most part of this algorithm
5#Let us use this time the form of the logistic equation without any coefficient at the beginning
6#compared to the previous exercise of using 4*r*x*(1-x)
7def Log(x,r):
8    return r*x*(1-x)
9
10#1. Lyapunov Exponent
11#The Lyapunov Exponent of a Logistic Map is given by the infinite lim of 1/n multiplied by the summation of ln(df(x_i)/dx) from
12#zero to n-1.
13
14#We begin by determining the derivative of the Logistic Map and getting it's natural logarithm
15def Lyapunov (x,r):
16    return np.log(abs(r - 2*r*x))
17
18#We then define our parameter in order for us to iterate the summation function later
19n = 10000
20r = np.linspace(2.5,4.0,n)
21iteration = 1000
22lyp = np.zeros(n)
23x = 1e-5*np.ones(n)
24
25#The following code allows us to create a summation for the Lyapunov Exponent
26for i in range (iteration):
27    x = Log(x,r)
28    lyp += Lyapunov(x,r)
29fig, ax2 = plt.subplots(1,1, figsize=(8,9), sharex=True)
30#Horizontal Line at y = 0
31ax2.axhline(0,color='k',lw=0.5,alpha=0.5)
32#Negative Values
33ax2.plot(r[lyp < 0], lyp[lyp < 0] / iteration, '.k', alpha=0.5, ms=.5)
34#Positive Values
35ax2.plot(r[lyp >= 0], lyp[lyp >= 0] / iteration, '.r', alpha=0.5, ms=0.5)
36ax2.set_xlim(2.5,4)
37ax2.set_ylim(-2,1)
38ax2.set_xlabel('r')
39ax2.set_ylabel('Lambda')
40ax2.set_title('Liapunov Exponents of the Logistic Map')
41
42#2. Bifurcation Diagram
43#The bifurcation diagram is a simple iteration of the logisitc map. It's simply a plot of all the possible r values and their corresponding X values
44rs = np.linspace(2.5,4,1000) #We define the range of values our paramter r will range. In this case we want it to iterate from 0 to 4 10,000 times
45x_n = [] #We place our (x,r) values
46for r in rs: #We iterate across all the r values from 0 to 4 
47    x = 0.00001 #We Set an Initial X value
48    for i in range (900):
49        x = Log(x,r)
50    for i in range (100):
51        x = Log(x,r)
52        x_n.append([x,r])
53
54x_n = np.array(x_n)
55fig, ax1 = plt.subplots(1, 1, figsize=(8,9), sharey=True)
56ax1.plot(x_n[:,1], x_n[:,0],',k',alpha=0.25)
57ax1.set_xlim(2.5,4)
58ax1.set_ylim(0,1)
59ax1.set_xlabel('r')
60ax1.set_ylabel('x_n')
61ax1.set_title('Bifurcation Diagram of the Logistic Map')
62   
63
64#3. Time Series
65#A way to determine if a function is chaotic is by checking it's Time Series to see if a distict pattern is visible
66#The time series is simply the values of our population at different time steps
67
68x = 0.5 #We define the an initial x population. I
69r = 3.828427125 #We Set an initial r condition first
70x_n = [] #We let this be a list in which all the iterated values of x will be placed
71t = [] #We let this be the iteration step. We define our iteration step to be the "time" component of our time series
72#Iterate the Logistic Map
73for i in range(50):
74    x = Log(x,r)
75    x_n.append(x)
76    t.append(i)
77    yaxis = np.array(x_n)
78    xaxis = np.array(t)
79    
80# Plot    
81fig, ax0 = plt.subplots(1, 1, figsize=(8, 9), sharey=True)
82plt.plot(xaxis,yaxis)
83plt.xlabel('t')
84plt.ylabel('x_n')
85plt.title('Time series of Logistic map with r = 3.828427125')
86
87#4. Cycles of the Logistic Map
88#An alternative way of determining if the logistic map is chaotic is by checking it's 
89
90#The function first defines the range and the logistic map as a function if it's parameter r. We then set an initial x value then
91#iterate the logistic map again while plotting values along the x and y coordinate
92def plot_system(x0, r, n, ax=None):
93    t = np.linspace(0, 1)
94    ax.plot(t, Log(t, r), 'k', lw=2)
95    ax.plot([0, 1], [0, 1], 'k', lw=2)
96
97    x = x0
98    for i in range(n):
99        y = Log(x, r)
100        # Plot the two lines.
101        ax.plot([x, x], [x, y], 'k', lw=1)
102        ax.plot([x, y], [y, y], 'k', lw=1)
103        # Position is plot with increasing opacity every time it overlaps itself
104        ax.plot([x], [y], 'ok', ms=10,
105                alpha=(i + 1) / n)
106        x = y
107
108    ax.set_xlim(0, 1)
109    ax.set_ylim(0, 1)
110
111#Plots
112fig, ax = plt.subplots(1, 1, figsize=(8, 9), sharey=True)
113plot_system(0.5, 3.828427125, 100, ax)
114plt.xlabel ('x')
115plt.ylabel('x_n')
116plt.title('x vs x_n of the Logistic map with r = 3.828427125')

مثال

در این قسمت به عنوان مثال، توان لیاپانوف برای معادله زیر در طول تغییرات r r را با استفاده از کد پایتون فوق محاسبه می‌کنیم.

بنابراین داریم:

xt=xt1+rxt12 x _ { t } = x _ { t - 1 } + r - x ^ { 2 } _ { t - 1 }

نمودار حاصل از اجرای کد به صورت زیر خواهد بود.

نمودار توان لیاپانوف <span class=xt=xt1+rxt12 x _ { t } = x _ { t - 1 } + r - x ^ { 2 } _ { t - 1 } " width="408" height="312">
نمودار نمای لیاپانوف xt=xt1+rxt12 x _ { t } = x _ { t - 1 } + r - x ^ { 2 } _ { t - 1 }

با مقایسه این تصویر با «دیاگرام دوشاخگی» (Bifurcation Diagram) سیستم، که در زیر رسم شده است، می‌توان به این نتیجه رسید که بازه‌ای که در آن پارامتر توان لیاپانوف دارای مقادیر مثبت است، تا حد زیادی بر بازه‌ای که سیستم رفتار آشوبناک از خود نشان می‌دهد، منطبق است.

دیاگرام دوشاخگی <span class=xt=xt1+rxt12 x _ { t } = x _ { t - 1 } + r - x ^ { 2 } _ { t - 1 } " width="454" height="310">
دیاگرام دوشاخگی xt=xt1+rxt12 x _ { t } = x _ { t - 1 } + r - x ^ { 2 } _ { t - 1 }

همچنین، در هر زمانی که دوشاخگی اتفاق افتاده باشد، مثلا در r=1,1.5 r = 1 , 1 . 5 ، نمای لیاپانوف خط λ=0 λ = 0 را لمس می‌کند که این نشان دهنده بحرانی بودن آن مقدار پارامتر است. در نهایت، مشاهده می‌شود که نقاط زیادی در نمودار وجود دارند که توان نمایی به منفی بی‌نهایت همگرا شده است. این مقادیر زمانی اتفاق می‌افتند که سیستم برای یک t مشخص با dFtdxx=x00 \frac { d F ^ { t } } { d x } _ { | x = x _ { 0 } } ≈ 0 به یک نقطه تعادل بسیار پایدار همگرا شود. به دلیل اینکه تعریف نمای لیاپانوف شامل لگاریتم این مشتق است، در نتیجه اگر صفر شود، توان لیاپانوف به سمت منفی بی‌نهایت همگرا می‌شود.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۹ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
libretexts
۱ دیدگاه برای «نمای لیاپانوف (Lyapunov Exponent) چیست؟ — از صفر تا صد»

با سلام و خسته نباشید
اگر منبعی هست که امکان محاسبه نمای لیاپانوف زمان محدود را در سری زمانی که از داده های حاصل از آزمایشگاه هست معرفی کنین ممنون میشم بخش عمده کاری که در حال انجام اون هستم به این موضوع گره خودره. از اینکه تجربیاتتون را در اختیار بقیه قرار می گذارین ممنوم.
با تشکر قبلی

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *