การสลายตัวของจอร์แดน


18

หมายเหตุสำคัญ : เนื่องจากความท้าทายนี้ใช้กับเมทริกซ์จตุรัสทุกครั้งที่ฉันใช้คำว่า "เมทริกซ์" ดังนั้นจึงถือว่าฉันกำลังอ้างถึงเมทริกซ์จตุรัส ฉันกำลังออกจากคำอธิบาย "สี่เหลี่ยม" เพื่อประโยชน์ของความกะทัดรัด

พื้นหลัง

การดำเนินการที่เกี่ยวข้องกับเมทริกซ์จำนวนมากเช่นการคำนวณดีเทอร์มิแนนต์การแก้ระบบเชิงเส้นหรือการขยายฟังก์ชันสเกลาร์ที่มีค่าให้กับเมทริกซ์ทำได้ง่ายขึ้นโดยใช้เมทริกซ์ทแยงมุม (หนึ่งองค์ประกอบที่ไม่ เมทริกซ์ดั้งเดิม (หมายถึงสำหรับเมทริกซ์อินพุตAและเมทริกซ์แนวทแยงDมีเมทริกซ์กลับด้านบางส่วนPเช่นD = P^(-1) * A * Pนั้นด้วยDและAแบ่งปันคุณสมบัติที่สำคัญบางอย่างเช่นค่าลักษณะเฉพาะดีเทอร์มิแนนต์และร่องรอย) สำหรับการฝึกอบรมที่มีลักษณะเฉพาะที่แตกต่างกัน (รากพหุนามลักษณะเมทริกซ์ที่ได้รับจากการแก้det(A-λI) = 0สำหรับλที่Iเป็นเมทริกซ์เอกลักษณ์ที่มีขนาดเดียวกับที่A) diagonalization ง่ายๆคือ:Dเป็นเมทริกซ์ที่มีค่าลักษณะเฉพาะบนเส้นทแยงมุมหลักและPเป็นเมทริกซ์ที่สร้างขึ้นจากค่าลักษณะเฉพาะที่สอดคล้องกับค่าลักษณะเฉพาะเหล่านั้น (ตามลำดับเดียวกัน) กระบวนการนี้เรียกว่าeigendecomposition

อย่างไรก็ตามเมทริกซ์ที่มีค่าลักษณะเฉพาะซ้ำ ๆ ไม่สามารถทำให้เป็นเส้นทแยงมุมได้ในลักษณะนี้ โชคดีที่รูปแบบเมทริกซ์ใด ๆ ของจอร์แดนสามารถคำนวณได้ง่ายและไม่ยากที่จะทำงานกับเมทริกซ์แนวทแยงทั่วไป นอกจากนี้ยังมีคุณสมบัติที่ดีที่หากค่าลักษณะเฉพาะไม่ซ้ำกันการสลายตัวของจอร์แดนจะเหมือนกับ eigendecomposition

จอร์แดนอธิบายการสลายตัว

สำหรับเมทริกซ์จตุรัสAที่มีค่าลักษณะเฉพาะทั้งหมดมีเรขาคณิตหลายหลากของ 1 กระบวนการของการสลายตัวของจอร์แดนสามารถอธิบายได้ดังนี้:

  1. อนุญาตλ = {λ_1, λ_2, ... λ_n}เป็นรายการของค่าลักษณะเฉพาะของA, ที่มีหลายหลาก, กับค่าลักษณะเฉพาะที่ซ้ำกันปรากฏขึ้นอย่างต่อเนื่อง
  2. สร้างเมทริกซ์ทแยงมุมJที่มีองค์ประกอบเป็นองค์ประกอบλในลำดับเดียวกัน
  3. สำหรับแต่ละค่าลักษณะเฉพาะที่มีหลายหลากมากกว่า 1 ให้วาง a 1ทางด้านขวาของแต่ละค่าซ้ำของค่าลักษณะเฉพาะในแนวทแยงมุมหลักJยกเว้นค่าสุดท้าย

เมทริกซ์ที่เกิดขึ้นJเป็นรูปแบบปกติของจอร์แดนA(สามารถมีหลายรูปแบบปกติของจอร์แดนสำหรับเมทริกซ์ที่กำหนดขึ้นอยู่กับคำสั่งของค่าลักษณะเฉพาะ)

ตัวอย่างการทำงาน

อนุญาตAเป็นเมทริกซ์ต่อไปนี้:

เมทริกซ์

ค่าลักษณะเฉพาะของมีหลายหลากเป็นA λ = {1, 2, 4, 4}โดยการใส่สิ่งเหล่านี้ลงในเมทริกซ์แนวทแยงเราได้ผลลัพธ์นี้:

ขั้นตอนที่ 2

ต่อไปเราวาง1s ไปทางขวาของทั้งหมด แต่หนึ่งในค่าลักษณะเฉพาะที่ซ้ำกัน เนื่องจาก4เป็นค่าเฉพาะซ้ำแล้วซ้ำอีกเราจึงวางเดี่ยว1ถัดจาก 4 แรก:

แบบฟอร์มจอร์แดน

นี่เป็นรูปแบบปกติของจอร์แดนA(เมทริกซ์เดียวอาจมีหลายรูปแบบปกติของจอร์แดน แต่ฉันกำลังคัดรายละเอียดเพื่อจุดประสงค์ในการอธิบาย)

งาน

กำหนดตารางเมทริกซ์เป็นนำเข้าส่งออกที่ถูกต้องจอร์แดนรูปแบบปกติของAA

  • อินพุทและเอาท์พุทอาจอยู่ในรูปแบบที่สมเหตุสมผล (อาเรย์ 2 มิติ / ลิสต์ / อะไรก็ตาม, ลิสต์ / อาเรย์ / สิ่งใด ๆ ของเวกเตอร์คอลัมน์หรือแถว, ชนิดข้อมูลเมทริกซ์บิวอิน ฯลฯ )
  • องค์ประกอบและค่าลักษณะเฉพาะของจะเป็นจำนวนเต็มในช่วงA[-200, 200]
  • เพื่อประโยชน์ของความเรียบง่ายค่าลักษณะเฉพาะทั้งหมดจะมีเรขาคณิตหลายหลาก 1 (และกระบวนการดังกล่าวถือ)
  • A อย่างน้อยที่สุดจะเป็นเมทริกซ์ 10x10 และอย่างน้อยเมทริกซ์ 2x2
  • Builtins ที่คำนวณค่าลักษณะเฉพาะและ / หรือ eigenvector หรือดำเนินการ eigendecomposition, Jordan decomposition, หรือการสลายตัวอื่น ๆ / diagonalization อนุญาตให้ใช้เลขคณิตเมทริกซ์การผกผันเมทริกซ์และเมทริกซ์บิวอินอื่น ๆ ได้

กรณีทดสอบ

[[1, 0], [0, 1]] -> [[1, 1], [0, 1]]
[[3, 0], [0, 3]] -> [[1, 1], [0, 1]]
[[4, 2, 2], [1, 2, 2],[0, 3, 3]] -> [[6, 0, 0], [0, 3, 0], [0, 0, 0]]
[[42, 48, 40, 64, 64], [41, 47, 31, 58, 42], [-55, -47, -27, -74, -46], [-46, -58, -46, -70, -68], [30, 20, 12, 34, 18]] -> [[10, 0, 0, 0, 0], [0, -18, 0, 0, 0], [0, 0, 6, 1, 0], [0, 0, 0, 6, 1], [0, 0, 0, 0, 6]]

คำตอบ:


4

Mathematica, 140 139 105 ไบต์

Total[DiagonalMatrix@@@{{#},{1-Sign[Differences@#^2],1}}]&@(x/.Solve[#~CharacteristicPolynomial~x==0,x])&

ฉันเพิ่งค้นพบ builtin DiagonalMatrixที่ให้วิธีง่ายๆในการวาง 0s และ 1s ตามแนวทแยงมุม

การใช้

ตัวอย่าง


เกี่ยวกับLast@JordanDecomposition@#&อะไร หรือว่าเป็นการโกง?
Ruslan

@ รุสลันใช่กฎข้อหนึ่งข้อหนึ่งคือไม่อนุญาตให้มีการสร้างอินฟินิตี้ในจอร์แดน ขอบคุณ
ไมล์

2

Sage, 79 ไบต์

lambda A:block_diagonal_matrix([jordan_block(*r)for r in A.charpoly().roots()])

ลองออนไลน์

เนื่องจากไม่มีใครโพสต์โซลูชั่นฉันก็อาจจะไปข้างหน้าและโพสต์หนึ่ง

A.charpoly.roots()คำนวณราก (และพีชคณิต multiplicities) ของพหุนามลักษณะของA(aka ค่าลักษณะเฉพาะและหลายหลาก) jordan_blockสร้างบล็อกของจอร์แดนจากรูทและหลายหลากที่กำหนด block_diagonal_matrixรูปแบบเมทริกซ์กับบล็อกจอร์แดนในแนวทแยงซึ่งเป็นความหมายของรูปแบบปกติของจอร์แดน


2

J , 78 71 ไบต์

1(#\.|."_1#{."1],.2=/\,&_)@>@{[:p.@>[:-&.>/ .(+//.@(*/)&.>)],&.>[:-@=#\

ลองออนไลน์!

ทั้งสองส่วนที่ท้าทายของงานนี้รับค่าลักษณะเฉพาะและดำเนินการตามแนวทแยงมุมทำให้ทั้งคู่มีจำนวนไบต์เท่ากัน กฎเหล่านี้ไม่ได้รับอนุญาต แต่ในกรณีที่มีข้อสงสัย J ได้128!:0สร้างอินสตรูเมนต์สำหรับการสลายตัวของ QR ( ) รวมถึงส่วนเสริม LAPACK ซึ่งสามารถนำมาใช้เพื่อค้นหาค่าลักษณะเฉพาะ

คำอธิบาย (ล้าสมัย)

มีสองส่วนที่สำคัญในคำกริยานี้คือการหาค่าลักษณะเฉพาะและดำเนินการตามแนวทแยงมุม อย่างแรกเพื่อหาค่าลักษณะเฉพาะรากของพหุนามลักษณะสำหรับเมทริกซ์อินพุตจะต้องถูกค้นพบ ใช้อินพุตเมทริกซ์เดียวกันจากตัวอย่าง

   ] m =: _4 ]\ 5 4 2 1 0 1 _1 _1 _1 _1 3 0 1  1 _1 2
 5  4  2  1
 0  1 _1 _1
_1 _1  3  0
 1  1 _1  2

พหุนามคุณลักษณะสำหรับเมทริกซ์Mสามารถพบได้โดยใช้ | M - λI | = 0 ที่ฉันเป็นเมทริกซ์เอกลักษณ์ที่มีขนาดเดียวกับM การแสดงออกของM - λฉันสามารถสร้างแบบจำลองใน J โดยมวยแต่ละองค์ประกอบในMกับ -1 ถ้ามันอยู่ในแนวทแยงมุมมิฉะนั้น 0 แต่ละกล่องแสดงให้เห็นถึงพหุนามในรูปแบบค่าสัมประสิทธิ์

   (],&.>[:-@=#\) m
┌────┬────┬────┬────┐
│5 _1│4 0 │2 0 │1 0 │
├────┼────┼────┼────┤
│0 0 │1 _1│_1 0│_1 0│
├────┼────┼────┼────┤
│_1 0│_1 0│3 _1│0 0 │
├────┼────┼────┼────┤
│1 0 │1 0 │_1 0│2 _1│
└────┴────┴────┴────┘

อย่างไรก็ตามดีเทอร์มีแนนต์ใน J -/ .*นั้นทำงานกับตัวเลขไม่ใช่พหุนามแบบกล่อง แทนที่จะต้องคูณผลิตภัณฑ์พหุนามจำเป็นซึ่งสามารถพบได้โดยใช้ convolution ( [:+//.*/) การลบแบบพับยังคงใช้อยู่และคำกริยาทั้งสองนี้จำเป็นต้องทำงานภายในกล่องดังนั้นภายใต้ ( &.) unbox ( >) จะถูกใช้

   ([:-&.>/ .(+//.@(*/)&.>)],&.>[:-@=#\) m0
┌───────────────┐
│32 _64 42 _11 1│
└───────────────┘

นี่คือสัมประสิทธิ์ของพหุนามลักษณะ สามารถหาได้โดยใช้รูตp.ซึ่งแปลงการแทนพหุนามระหว่างสัมประสิทธิ์และรูปแบบของรูต

   ([:p.@>[:-&.>/ .(+//.@(*/)&.>)],&.>[:-@=#\) m0
┌─┬───────┐
│1│4 4 2 1│
└─┴───────┘

รากเป็น[4, 4, 2, 1]และผู้ที่มีลักษณะเฉพาะของM

ประการที่สองจะต้องดำเนินการในแนวทแยง แต่ละคู่อย่างต่อเนื่องของค่าจะถูกทดสอบเพื่อความเท่าเทียมกัน

   (2=/\]) 4 4 2 1
1 0 0

ศูนย์จะถูกต่อท้ายและค่าเหล่านั้นจะถูก columinized พร้อมกับค่าลักษณะเฉพาะ

   (],.0,~2=/\]) 4 4 2 1
4 1
4 0
2 0
1 0

จากนั้นแต่ละแถวจะถูกเติมเต็มตามความยาวเท่ากับจำนวนค่าลักษณะเฉพาะเพื่อสร้างตารางเมทริกซ์

   (#{."1],.0,~2=/\]) 4 4 2 1
4 1 0 0
4 0 0 0
2 0 0 0
1 0 0 0

ในที่สุดแต่ละแถวจะเลื่อนไปทางขวาโดยมีค่าลดลงทางด้านขวาและศูนย์จะถูกผลักเข้าไปทางซ้าย แถวแรกจะเลื่อนเป็นศูนย์ครั้งที่สองหนึ่งครั้งที่สามสองครั้งและอื่น ๆ

   (-@i.@#|.!.0"_1#{."1],.0,~2=/\]) 4 4 2 1
4 1 0 0
0 4 0 0
0 0 2 0
0 0 0 1

ผลผลิตคือการสลายตัวของจอร์แดนของเอ็



1

MATL , 29 ไบต์, ไม่ใช่การแข่งขัน

1$Yn1$ZQYotdUZS~0hXdF1hYSwXd+

ลองออนไลน์!

นี่คือการส่ง MATL ครั้งแรกของฉันดังนั้นจึงมีข้อผูกพันที่จะต้องปรับปรุง ฉันใช้เวลาสักพักในการเรียนรู้และในตอนท้ายฉันจำได้ว่านี่อาจจะไม่ได้ทำงานกับการใช้ MATL ตั้งแต่วันที่ 7 พฤษภาคม 2016 แน่นอนฉันได้ตรวจสอบการกระทำสุดท้ายของวันนั้นและมันก็ไม่ได้ทำงาน

ฉันชอบที่จะใช้diagแต่ดูเหมือนว่า MATL สนับสนุนเฉพาะรุ่นอาร์กิวเมนต์เดียวเท่านั้น อาร์กิวเมนต์ที่สองจะต้องมีการวางค่าตามแนวทแยงมุม (หรือเส้นทแยงมุมอื่น ๆ สำหรับปัญหาที่แตกต่างกัน)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.