แพ็คเกจ CHOLMOD SuiteSparse รุ่นล่าสุด (เบต้า 4.4.5) รองรับการแก้ไขแถว / คอลัมน์แบบสมมาตร (อัปเดตอันดับ 2) สำหรับLDLTแยกย่อยโดยใช้ matlab (และ C) API ฉันใช้มันประสบความสำเร็จในหนึ่งในโครงการของฉัน
คุณสามารถใช้มันเพื่อทำการปรับปรุงnnz(G)สำหรับการแยกตัวประกอบ มันขึ้นอยู่กับสิ่งนี้กระดาษ
ดังนั้นความซับซ้อนจะเป็นO(nnz(G)∗nnz(L)) ) โดยที่nnz(L)สามารถลดลงอย่างมีนัยสำคัญเมื่อใช้การเปลี่ยนรูปแบบลดการเติมสำหรับAหร็อมแหร็มA
สามารถดาวน์โหลดแพ็คเกจได้จากที่นี่
ด้านล่างนี้เป็นหมายเหตุบางส่วนที่เจ้าของแพ็คเกจมอบให้ (ศาสตราจารย์ Tim Davis):
API:
LD = ldlrowmod (LD, k) ลบแถว / คอลัมน์ k โดยการตั้งค่า A (:, k) และ A (k, :) ไปยังแถวที่ kth / col ของข้อมูลประจำตัว
LD = ldlrowmod (LD, k, C) แทนที่ kth row / col ของ A (ซึ่งจะต้องเป็น kth row / col of identity) ด้วยคอลัมน์ sparse C
ซับซ้อน:
การเพิ่มแถว / ลบต้องใช้เวลาอย่างมากที่สุดO(nnz(L))เวลาดังนั้นหากnnz(L)คือO(n)แล้วเวลาที่มากที่สุดO(n) )
เติมลดการเปลี่ยนแปลง:
มันเป็นความคิดที่ดีที่จะทำให้เมทริกซ์ของผู้ใช้แยกตัวประกอบเช่นเดียวกับในLDLT = A แต่เราเปลี่ยนมาเป็นLDLT = PAPTเพื่อให้Lมีค่าน้อยกว่าศูนย์