Why shouldn’t use determinant to check the singularity of matrices

เป็นที่รู้กันมาตั้งแต่ชั้นมัธยมแล้วว่าเราจะหาส่วนกลับของเมตริกซ์ได้ก็ต่อเมื่อค่า determinant ไม่
เท่ากับเมตริกซ์ 0 พอเรียนสูงขึ้นเขาก็บอกว่าไม่ให้ทำแบบนี้นะ เพราะสภาวะทางตัวเลขที่คำนวณ
ด้วย determinant นั้นไม่ดี ให้ตรวจสอบด้วย Rank และการหา Rank ของเมตริกซ์ที่ดีที่สุดก็ให้ใช้
Singular Value Decomposition ซึ่งเมตริกซ์ที่จะหาส่วนกลับได้นั้นจะต้อง full Rank

ส่วนตัวไม่เคยเชื่อคำแนะนำนี้เลยครับ เพราะไม่เคยเจอ ตัวอย่างที่ได้เห็นส่วนใหญ่ก็ตัวเลขที่มัน
แปลก ๆ วันนี้เจอแล้วครับ

     3825       -1713       -1061        -497         710        -502       -3471      3136
    -1713        3834       -1632         161        -527         722        -412      -3561
     -1061       -1632        4563         983        -109       -419       4004      -1222
      -497         161         983         315        -178          23           832     -978
        710        -527        -109        -178         415        -218         -29       1132
      -502         722        -419          23        -218         431          55        -149
     -3471        -412        4004         832         -29          55        6640     -1265
      3136       -3561       -1222        -978        1132        -149     -1265     7539

ค่า determinant ของตัวเลขชุดนี้คือ –54413 นั่นหมายความว่าเราต้องหาส่วนกลับของเมตริกซ์
ตัวนี้ได้สิ แต่ไม่ใช่เลย ถ้าใช้คำสั่ง rank ใน MATLAB เราจะได้ 7 ซึ่งเมตริกซ์ไม่ full rank ถ้าใช้
svd หา จะได้ rank เป็น 6 หมายความว่าเมตริกซ์นี้หาส่วนกลับไม่ได้

เชื่อแล้วครับผม

ปล. ถ้าคิดด้วยมือ determinant จะไม่ผิดนะครับ

การคูณ block matrix

จริง ๆ เป็นเรื่องง่ายแค่ใช้ symbolic toolbox ช่วยก็จบ

เรื่องที่จะเขียนนี้เป็นการคูณ block matrix ด้วยมือ โดยสมมติว่าขนาดของเมตริกซ์แต่ละบล็อกนั้น
สอดคล้องกันอยู่แล้ว

ถ้าคูณด้วยมือคงยากพิลึก แต่ก็มีหลักง่าย ๆ โดยการใช้ column operation โดยให้พิจารณา
เมตริกซ์ตัวกลางซึ่งจะเรียกว่า K  โดยแยกทีละคอลัมน์และคูณกับเมตริกซ์ตัวแรกดังนี้

  1. คอลัมน์แรกของ K แถวที่หนึ่งคือ D_k ให้ไปคูณกับคอลัมน์ที่หนึ่งของเมตริกซ์
    ตัวแรก และ B_k ไปคูณกับคอลัมน์ที่สองของเมตริกซ์ตัวแรก ทำอย่างเดียว
    กันกับคอมลัมน์แรก แล้วนำผลลัพธ์ที่ได้มาบวกกัน
  2. เราจะได้ผลคูณของเมตริกซ์ตัวแรกกับเมตริกซ์ K ดังนี้
  3. คูณผลลัพธ์ที่ได้กับเมตริกซ์ซ้ายมือสุดด้วยวิธีเดียวกันกับข้อหนึ่งก็จะได้ผลลัพธ์ดังนี้

ก็ง่ายดี