การพูดอย่างกว้าง ๆ มีสองวิธีในการคำนวณค่าลักษณะเฉพาะหรือการสลายตัวของค่าเอกพจน์ วิธีการหนึ่งที่จะทำให้เมทริกซ์ในแนวทแยงมุมและสิ่งนี้ทำให้ได้ค่าการสลายตัวของค่า eigenvalue / เอกพจน์ทั้งหมด (สเปกตรัม eigenvalue ทั้งหมด) ในเวลาเดียวกันดูภาพรวมบางส่วนที่นี่: อัลกอริธึมที่มีประสิทธิภาพในการคำนวณ ทางเลือกคือใช้อัลกอริธึมวนซ้ำที่ให้ผล eigenvector หนึ่งครั้งหรือหลายตัว การวนซ้ำสามารถหยุดได้หลังจากที่คำนวณจำนวนไอเกนผู้ปฏิบัติงานที่ต้องการแล้ว
ฉันไม่คิดว่ามีอัลกอริทึมซ้ำสำหรับ SVD โดยเฉพาะ เพราะนี่คือหนึ่งสามารถคำนวณ SVD ของเมทริกซ์Bโดยทำ eigendecomposition ของตารางสมมาตร( n + ม. ) × ( n + ม. )เมทริกซ์= ( 0 B B ⊤ 0 ) ดังนั้นแทนที่จะถามว่าขั้นตอนวิธีการคำนวณที่ถูกตัดทอน SVD คุณควรจะขอให้สิ่งที่ย้ำขั้นตอนวิธีการคำนวณ eigendecomposition: อัลกอริทึมสำหรับการตัดทอน SVD ≈ ซ้ำอัลกอริทึมสำหรับ eigendecompositionn×mB(n+m)×(n+m)
A=(0B⊤B0).
อัลกอริทึมสำหรับการตัดทอน SVD ≈ ซ้ำอัลกอริทึมสำหรับ eigendecomposition
อัลกอริธึมการทำซ้ำที่ง่ายที่สุดเรียกว่าการทำซ้ำพลังและแน่นอนง่ายมาก:
- x
- อัพเดทx ← A x
- ทำให้ปกติx ← x / ∥ x ∥
- ไปที่ขั้นตอนที่ 2 เว้นแต่จะรวมตัวกัน
อัลกอริธึมที่ซับซ้อนมากขึ้นทั้งหมดนั้นขึ้นอยู่กับแนวคิดของการทำซ้ำพลัง แต่ท้ายที่สุดก็ซับซ้อนมากขึ้น คณิตศาสตร์ที่จำเป็นจะได้รับจาก subspaces Krylov อัลกอริธึมคือการวนซ้ำของ Arnoldi (สำหรับเมทริกซ์แบบไม่สมมาตรสแควร์), การทำซ้ำ Lanczos (สำหรับเมทริกซ์สมมาตรแบบสี่เหลี่ยมจัตุรัส), และการแปรผันของมันเช่นเช่น "วิธีการเริ่มต้นใหม่แบบ Lanczos โดยปริยาย"
คุณสามารถหาคำอธิบายนี้ได้เช่นตำราเรียนต่อไปนี้:
- สินเชื่อ Golub & Van, การคำนวณเมทริกซ์
- Trefethen & Bau พีชคณิตเชิงเส้นเชิงตัวเลข
- Demmel พีชคณิตเชิงเส้นเชิงตัวเลขที่ใช้
- ซาดวิธีการเชิงตัวเลขสำหรับปัญหาค่าลักษณะเฉพาะขนาดใหญ่
ภาษาการเขียนโปรแกรมที่สมเหตุสมผลและแพ็คเกจสถิติ (Matlab, R, Python เป็นชื่อที่คุณใช้) ใช้ไลบรารี Fortran เดียวกันเพื่อดำเนินการแยกย่อยค่า eigen / เอกพจน์ เหล่านี้เป็นLAPACKและARPACK ARPACK ย่อมาจาก ARnoldi แพคเกจและมันคือทั้งหมดที่เกี่ยวกับการทำซ้ำ Arnoldi / Lanczos เช่นใน Matlab มีสองฟังก์ชั่นสำหรับ SVD: svd
ทำการย่อยสลายแบบเต็มผ่าน LAPACK และsvds
คำนวณจำนวนเวกเตอร์เอกพจน์ที่กำหนดผ่าน ARPACK และที่จริงแล้วมันเป็นเพียง wrapper สำหรับeigs
เรียกใช้เมทริกซ์ "square-ized"
ปรับปรุง
BAABA
มีห้องสมุด Fortran สำหรับวิธีการเหล่านี้ด้วยเช่นกันมันเรียกว่าPROPACK :
แพคเกจซอฟต์แวร์ PROPACK มีชุดของฟังก์ชั่นสำหรับการคำนวณการสลายตัวของเอกพจน์ของเมทริกซ์ขนาดใหญ่และกระจัดกระจายหรือมีโครงสร้าง รูทีน SVD จะขึ้นอยู่กับอัลกอริทึมการปรับเปลี่ยนสองชั้นของ Lanczos พร้อมการทำซ้ำบางส่วน (BPRO)
อย่างไรก็ตาม PROPACK ดูเหมือนว่าจะมีมาตรฐานน้อยกว่า ARPACK มากและไม่ได้รับการสนับสนุนในภาษาการเขียนโปรแกรมมาตรฐาน มันเขียนโดย Rasmus Larsen ที่มีขนาดใหญ่ 90 หน้ายาว 1998 กระดาษLanczos bidiagonalization ด้วย reorthogonalization บางส่วนกับสิ่งที่ดูเหมือนว่าภาพรวมที่ดี ขอบคุณ @MichaelGrant ผ่านชุดการคำนวณทางวิทยาศาสตร์ SEนี้
ในบรรดาเอกสารล่าสุดที่ได้รับความนิยมมากที่สุดดูเหมือนจะเป็น Baglama & Reichel, 2005, Augmented เริ่มต้นใหม่โดยปริยาย Lanczos bidiagonalization วิธีซึ่งอาจจะเป็นรอบของศิลปะ ขอบคุณ @Dougal ที่ให้ลิงค์นี้ในความคิดเห็น
อัปเดต 2
มีวิธีการที่แตกต่างอย่างสิ้นเชิงที่อธิบายโดยละเอียดในเอกสารภาพรวมที่คุณอ้างถึง: Halko และคณะ ปี 2009 โครงสร้างการค้นหาที่มีการสุ่ม: ขั้นตอนวิธีการในการสร้างความน่าจะเป็น decompositions ฉันไม่รู้เกี่ยวกับการแสดงความคิดเห็น