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

ในทฤษฎีความโกลาหลแผนที่อิเคดะเป็นระบบไดนามิกแบบเวลาไม่ต่อเนื่องที่สร้างตัวดึงดูดแปลกประหลาดมันถูกนำเสนอในปี 1979 โดยนักฟิสิกส์เคนสุเกะ อิเคดะในฐานะแบบจำลองสำหรับพฤติกรรมของแสงภายในตัวเรโซเนเตอร์เชิงแสงแบบไม่เชิงเส้น[ 1 ]แผนที่นี้แสดงให้เห็นว่าชุดกฎง่ายๆ สามารถนำไปสู่พฤติกรรมที่ซับซ้อนและโกลาหลได้อย่างไร ผ่านกระบวนการหมุน ปรับขนาด และแปลซ้ำๆ ซึ่งเป็นการดำเนินการ "ยืดและพับ" ที่พบได้ทั่วไปในระบบโกลาหล
แผนที่ถูกกำหนดโดยฟังก์ชันวนซ้ำบนระนาบเชิงซ้อนสำหรับจำนวนเชิงซ้อนที่กำหนดค่าถัดไปจะคำนวณดังนี้: ในที่นี้แสดงถึงสนามไฟฟ้าในตัวเรโซเนเตอร์ที่ขั้นตอนพารามิเตอร์และ เกี่ยวข้องกับ แสงเลเซอร์ภายนอกและเฟสของระบบ ในขณะที่(โดยที่) เป็น พารามิเตอร์ การกระจายที่แสดงถึงการสูญเสียพลังงานในตัวเรโซเนเตอร์[ 2 ]
แบบจำลองค่าจริงที่นิยมศึกษากันโดยทั่วไปแสดงด้วยสมการสองมิติ: โดยที่เป็นพารามิเตอร์ และสำหรับค่าของพารามิเตอร์ระบบนี้แสดงพฤติกรรมอลวน สร้าง ตัวดึงดูด แบบแฟร็กทัล ที่มีลักษณะเฉพาะดัง แสดงในภาพประกอบของบทความ
ดึงดูด
ภาพเคลื่อนไหวนี้แสดงให้เห็นว่าจุดดึงดูด (attractor) ของระบบเปลี่ยนแปลงอย่างไรเมื่อค่าพารามิเตอร์เปลี่ยนแปลงจาก 0.0 ถึง 1.0 โดยเพิ่มขึ้นทีละ 0.01 ระบบพลวัตของ Ikeda ถูกจำลองเป็นเวลา 500 ขั้นตอน โดยเริ่มต้นจากจุดเริ่มต้นที่วางไว้แบบสุ่ม 20,000 จุด จุด 20 จุดสุดท้ายของแต่ละวิถีการเคลื่อนที่ถูกนำมาพล็อตเพื่อแสดงจุดดึงดูดโปรดสังเกตการแยกสาขาของจุดดึงดูดเมื่อค่าเพิ่มขึ้น
วิถีจุด
แผนภาพด้านล่างแสดงวิถีการเคลื่อนที่ของจุดสุ่ม 200 จุด สำหรับค่าต่างๆ ของโดยแผนภาพย่อยด้านซ้ายแสดงค่าประมาณของตัวดึงดูด (attractor)และแผนภาพย่อยด้านขวาแสดงมุมมองที่ขยายใหญ่ขึ้นของแผนภาพวิถีการเคลื่อนที่หลัก
โค้ด Octave/MATLAB สำหรับการคำนวณวิถีการเคลื่อนที่ของจุด
โค้ด 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 ()สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ แผนที่อิเคดะ
ในทฤษฎีความโกลาหลแผนที่อิเคดะเป็นระบบไดนามิกแบบเวลาไม่ต่อเนื่องที่สร้างตัวดึงดูดแปลกประหลาดมันถูกนำเสนอในปี 1979 โดยนักฟิสิกส์เคนสุเกะ
ดึงดูด
ภาพเคลื่อนไหว นี้แสดงให้เห็นว่าจุดดึงดูด (attractor) ของระบบเปลี่ยนแปลงอย่างไรเมื่อค่าพารามิเตอร์เปลี่ยนแปลงจาก 0.0 ถึง 1.0 โดยเพิ่มขึ้นทีละ 0.
วิถีจุด
แผนภาพด้านล่างแสดงวิถีการเคลื่อนที่ของจุดสุ่ม 200 จุด สำหรับค่าต่างๆ ของโดยแผนภาพย่อยด้านซ้ายแสดงค่าประมาณของ ตัวดึงดูด (attractor) และแผนภาพย่อยด้านขวาแสดงมุมมองที่ขยายใหญ่ขึ้นของแผนภาพวิถีการเคลื่อนที่หลัก คุณ {\displaystyle u}
โค้ด Octave/MATLAB สำหรับการคำนวณวิถีการเคลื่อนที่ของจุด
โค้ด Octave/MATLAB สำหรับสร้างกราฟเหล่านี้แสดงอยู่ด้านล่าง:












