กลับไปหน้าบทความ

อ่าน 6 นาที

แผนที่อิเคดะ

ในทฤษฎีความโกลาหลแผนที่อิเคดะเป็นระบบไดนามิกแบบเวลาไม่ต่อเนื่องที่สร้างตัวดึงดูดแปลกประหลาดมันถูกนำเสนอในปี 1979 โดยนักฟิสิกส์เคนสุเกะ

แผนที่อิเคดะ

เส้นทางการเคลื่อนที่ของจุดสุ่ม 2000 จุดในแผนที่อิเคดะที่มีu = 0.918

ในทฤษฎีความโกลาหลแผนที่อิเคดะเป็นระบบไดนามิกแบบเวลาไม่ต่อเนื่องที่สร้างตัวดึงดูดแปลกประหลาดมันถูกนำเสนอในปี 1979 โดยนักฟิสิกส์เคนสุเกะ อิเคดะในฐานะแบบจำลองสำหรับพฤติกรรมของแสงภายในตัวเรโซเนเตอร์เชิงแสงแบบไม่เชิงเส้น[ 1 ]แผนที่นี้แสดงให้เห็นว่าชุดกฎง่ายๆ สามารถนำไปสู่พฤติกรรมที่ซับซ้อนและโกลาหลได้อย่างไร ผ่านกระบวนการหมุน ปรับขนาด และแปลซ้ำๆ ซึ่งเป็นการดำเนินการ "ยืดและพับ" ที่พบได้ทั่วไปในระบบโกลาหล

แผนที่ถูกกำหนดโดยฟังก์ชันวนซ้ำบนระนาบเชิงซ้อนสำหรับจำนวนเชิงซ้อนที่กำหนดค่าถัดไปจะคำนวณดังนี้: ในที่นี้แสดงถึงสนามไฟฟ้าในตัวเรโซเนเตอร์ที่ขั้นตอนพารามิเตอร์และ เกี่ยวข้องกับ แสงเลเซอร์ภายนอกและเฟสของระบบ ในขณะที่(โดยที่) เป็น พารามิเตอร์ การกระจายที่แสดงถึงการสูญเสียพลังงานในตัวเรโซเนเตอร์[ 2 ]

แบบจำลองค่าจริงที่นิยมศึกษากันโดยทั่วไปแสดงด้วยสมการสองมิติ: โดยที่เป็นพารามิเตอร์ และสำหรับค่าของพารามิเตอร์ระบบนี้แสดงพฤติกรรมอลวน สร้าง ตัวดึงดูด แบบแฟร็กทัล ที่มีลักษณะเฉพาะดัง แสดงในภาพประกอบของบทความ

ดึงดูด

ภาพเคลื่อนไหวนี้แสดงให้เห็นว่าจุดดึงดูด (attractor) ของระบบเปลี่ยนแปลงอย่างไรเมื่อค่าพารามิเตอร์เปลี่ยนแปลงจาก 0.0 ถึง 1.0 โดยเพิ่มขึ้นทีละ 0.01 ระบบพลวัตของ Ikeda ถูกจำลองเป็นเวลา 500 ขั้นตอน โดยเริ่มต้นจากจุดเริ่มต้นที่วางไว้แบบสุ่ม 20,000 จุด จุด 20 จุดสุดท้ายของแต่ละวิถีการเคลื่อนที่ถูกนำมาพล็อตเพื่อแสดงจุดดึงดูดโปรดสังเกตการแยกสาขาของจุดดึงดูดเมื่อค่าเพิ่มขึ้น

วิถีจุด

แผนภาพด้านล่างแสดงวิถีการเคลื่อนที่ของจุดสุ่ม 200 จุด สำหรับค่าต่างๆ ของโดยแผนภาพย่อยด้านซ้ายแสดงค่าประมาณของตัวดึงดูด (attractor)และแผนภาพย่อยด้านขวาแสดงมุมมองที่ขยายใหญ่ขึ้นของแผนภาพวิถีการเคลื่อนที่หลัก

u = 0.1
u = 0.5
u = 0.65
u = 0.7
u = 0.8
u = 0.85
u = 0.9
u = 0.908
u = 0.92

โค้ด Octave/MATLAB สำหรับการคำนวณวิถีการเคลื่อนที่ของจุด

แผนที่อิเคดะประกอบขึ้นจากการหมุน (ด้วยมุมที่ขึ้นอยู่กับรัศมี) การปรับขนาด และการเลื่อน กระบวนการ "ยืดและพับ" นี้ก่อให้เกิดตัวดึงดูดประหลาด (strange attractor)

โค้ด Octave/MATLAB สำหรับสร้างกราฟเหล่านี้แสดงอยู่ด้านล่าง:

% u = พารามิเตอร์ ikeda % ตัวเลือก = สิ่งที่จะพล็อต% 'trajectory' - พล็อตวิถีการเคลื่อนที่ของจุดเริ่มต้นแบบสุ่ม% 'limit' - พล็อตการวนซ้ำครั้งสุดท้ายของจุดเริ่มต้นแบบสุ่มfunction ikeda ( u, option ) P = 200 ; % จำนวนจุดเริ่มต้นN = 1000 ; % จำนวนการวนซ้ำNlimit = 20 ; % พล็อตจุดสุดท้ายจำนวนนี้สำหรับตัวเลือก 'limit' x = randn ( 1 , P ) * 10 ; % จุดเริ่มต้นแบบสุ่มy = randn ( 1 , P ) * 10 ; for n = 1 : P , X = compute_ikeda_trajectory ( u , x ( n ), y ( n ), N ); switch option case 'trajectory' % พล็อตวิถีการเคลื่อนที่ของกลุ่มจุดplot_ikeda_trajectory ( X ); hold on ;กรณี'limit' plot_limit ( X , Nlimit ); hold on ;มิฉะนั้นให้แสดงข้อความ' ยังไม่ได้ใช้งาน' จบแกนแคบ; แกนเท่ากันข้อความ( - 25 , - 15 , [ 'u = ' num2str ( u )]); ข้อความ( - 25 , - 18 , [ 'N = ' num2str ( N ​​) ' รอบ' ]); สิ้นสุด% พล็อตจุด n จุดสุดท้ายของเส้นโค้ง - เพื่อดูจุดสิ้นสุดหรือวงจรจำกัดฟังก์ชันplot_limit ( X, n ) plot ( X ( end - n : end , 1 ), X ( end - n : end , 2 ), 'ko' ); end% พล็อตเส้นทางทั้งหมดฟังก์ชันplot_ikeda_trajectory ( X ) plot ( X (:, 1 ), X (:, 2 ), 'k' ); % hold on; plot(X(1,1), X(1,2), 'bo', 'markerfacecolor', 'g'); hold off end% u คือพารามิเตอร์ Ikeda % x,y คือจุดเริ่มต้น% N คือจำนวนรอบการทำซ้ำฟังก์ชัน [X] = compute_ikeda_trajectory ( u, x, y, N ) X = zeros ( N , 2 ); X ( 1 , :) = [ x y ]; สำหรับn = 2 : N t = 0.4 - 6 / ( 1 + x ^ 2 + y ^ 2 ); x1 = 1 + u * ( x * cos ( t ) - y * sin ( t )); y1 = u * ( x * sin ( t ) + y * cos ( t )); x = x1 ; y = y1 ;X ( n , :) = [ x y ]; end end

โค้ด Python สำหรับวิถีการเคลื่อนที่ของจุด

นำเข้าคณิตศาสตร์import matplotlib.pyplot as plt import numpy as npdef main ( u : float , points = 200 , iterations = 1000 , nlim = 20 , limit = False , title = True ): """  Args:  u:float  พารามิเตอร์ ikeda  points:int  จำนวนจุดเริ่มต้น iterations:int  จำนวนรอบการทำ ซ้ำ  nlim:int  พล็อตจุดสุดท้ายจำนวนเท่านี้สำหรับตัวเลือก 'limit' จะพล็อตจุดทั้งหมดหากตั้งค่าเป็นศูนย์ limit:bool  พล็อตจุดเริ่มต้นแบบสุ่มไม่กี่จุดสุดท้ายหากเป็น True มิฉะนั้นจะพล็อตเส้นทาง title:[str, NoneType]  แสดงชื่อของกราฟหากค่าเป็น affirmative  """x = 10 * np.random.randn ( points , 1 ) y = 10 * np.random.randn ( points , 1 )สำหรับn ในช่วง( จุด): X = คำนวณวิถีการเคลื่อนที่ของ Ikeda ( u , x [ n ][ 0 ], y [ n ][ 0 ], จำนวนรอบ)ถ้าlimit : plot_limit ( X , nlim ) tx , ty = 2.5 , - 1.8มิฉะนั้น: plot_ikeda_trajectory ( X ) tx , ty = - 30 , - 26plt.title ( f "Ikeda Map ( { u = : .2g } , { iterations =} ) " ) if title else None return pltdef compute_ikeda_trajectory ( u : float , x : float , y : float , N : int ): """คำนวณวิถีการเคลื่อนที่ทั้งหมด Args:  u - พารามิเตอร์ Ikeda  x, y - พิกัดของจุดเริ่มต้น N - จำนวนรอบการทำซ้ำ ส่งคืน:  อาร์เรย์ """ X = np . zeros (( N , 2 ))สำหรับn ในช่วง( N ): X [ n ] = np.array ( ( x , y ) )t = 0.4 - 6 / ( 1 + x ** 2 + y ** 2 ) x1 = 1 + u * ( x * math . cos ( t ) - y * math . sin ( t )) y1 = u * ( x * math . sin ( t ) + y * math . cos ( t ))x = x1 y = y1คืนค่าXdef plot_limit ( X , n : int ) -> None : """  พล็อตจุด n จุดสุดท้ายของเส้นโค้ง เพื่อดูจุดสิ้นสุดหรือวงจรจำกัด Args:  X: np.array เส้นทางการ เคลื่อนที่ ของจุดเริ่มต้นที่เกี่ยวข้อง n: int  จำนวนจุด "สุดท้าย" ที่จะพล็อต" " " plt.plot  ( X [ -n :, 0 ] , X [ -n :, 1 ] , 'ko' )def plot_ikeda_trajectory ( X ) -> None : """  พล็อตเส้นทางทั้งหมด Args:  X: np.array เส้นทางการเคลื่อนที่ ของ จุดเริ่มต้นที่เกี่ยวข้อง """ plt.plot ( X [ :, 0 ], X [:, 1 ], "k" )ถ้า__name__ == "__main__" : main ( 0.9 , limit = True , nlim = 0 ) . show ()
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Ikeda_map&oldid=1301840353 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ แผนที่อิเคดะ

ในทฤษฎีความโกลาหลแผนที่อิเคดะเป็นระบบไดนามิกแบบเวลาไม่ต่อเนื่องที่สร้างตัวดึงดูดแปลกประหลาดมันถูกนำเสนอในปี 1979 โดยนักฟิสิกส์เคนสุเกะ

ดึงดูด

ภาพเคลื่อนไหว นี้แสดงให้เห็นว่าจุดดึงดูด (attractor) ของระบบเปลี่ยนแปลงอย่างไรเมื่อค่าพารามิเตอร์เปลี่ยนแปลงจาก 0.0 ถึง 1.0 โดยเพิ่มขึ้นทีละ 0.

วิถีจุด

แผนภาพด้านล่างแสดงวิถีการเคลื่อนที่ของจุดสุ่ม 200 จุด สำหรับค่าต่างๆ ของโดยแผนภาพย่อยด้านซ้ายแสดงค่าประมาณของ ตัวดึงดูด (attractor) และแผนภาพย่อยด้านขวาแสดงมุมมองที่ขยายใหญ่ขึ้นของแผนภาพวิถีการเคลื่อนที่หลัก คุณ {\displaystyle u}

โค้ด Octave/MATLAB สำหรับการคำนวณวิถีการเคลื่อนที่ของจุด

โค้ด Octave/MATLAB สำหรับสร้างกราฟเหล่านี้แสดงอยู่ด้านล่าง: