การทดสอบว่าเมทริกซ์เป็นค่ากึ่งบวกแน่นอนหรือไม่


12

ฉันมีรายการของเมทริกซ์สมมาตรที่ฉันต้องการตรวจสอบความแน่นอนกึ่งบวก (นั่นคือค่าลักษณะเฉพาะของพวกเขาไม่ใช่ค่าลบ)L

ความคิดเห็นข้างต้นบอกเป็นนัยว่าเราสามารถทำได้โดยการคำนวณค่าลักษณะเฉพาะและตรวจสอบว่าไม่ใช่ค่าลบ (อาจต้องดูแลข้อผิดพลาดในการปัดเศษ)

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

ดังนั้นความคิดจะเป็นที่ได้รับเมทริกซ์หนึ่งการทดสอบถ้าB + ϵ ฉันเป็นบวกแน่นอน ถ้าไม่ใช่Bจะไม่เป็นกึ่งบวกแน่นอนมิฉะนั้นเราสามารถคำนวณค่าลักษณะเฉพาะของBเพื่อให้แน่ใจว่าเป็นบวกกึ่งแน่นอนแน่นอนBLB+ϵIBB

คำถามของฉันตอนนี้คือ:

มีวิธีการทดสอบที่ตรงและมีประสิทธิภาพมากขึ้นหรือไม่ว่าเมทริกซ์นั้นเป็นกึ่งบวกแน่นอนหรือไม่โดยมีเงื่อนไขว่าการทดสอบที่มีประสิทธิภาพสำหรับความแน่นอนเชิงบวกจะได้รับหรือไม่?


1
การทดสอบที่คุณสังเกตเห็นในห้องสมุดน่าจะเป็นไปตามข้อเสนอที่ว่าเมทริกซ์สมมาตรจริงนั้นเป็นผลบวกแน่นอนหากว่าหากแต่ละหลักการนำหลักรองลงมาให้ค่าบวกเป็นบวกสิ่งที่สามารถตรวจสอบได้โดยการกำจัดโดยไม่ต้องคำนวณ ความยากลำบากเล็กน้อยในการขยายไปยังกรณีกึ่งแน่นอนได้ล่อผู้เขียนจำนวนมากเข้าสู่สถานะที่ไม่เหมาะสม ฉันรู้ว่าหัวข้อได้รับการเจาะในคำถาม Math.SE ดังนั้นฉันจะพยายามให้ลิงก์ A
hardmath


1
สำหรับคนที่มีความรู้มากกว่านี้ที่นี่ - มันจะทำงานเพื่อเปลี่ยนสเปกตรัมให้เป็นบวกโดยการเพิ่มสำหรับcขนาดใหญ่แล้วหาค่าลักษณะเฉพาะขั้นต่ำของระบบที่ถูกเลื่อน (เช่นการวนซ้ำของค่าผกผัน) จากนั้นตรวจสอบว่า ระบบ shifted นั้นเล็กกว่า shift cหรือไม่? ยกตัวอย่างเช่นการเปลี่ยนแปลงcเป็นค่า eigenvalue ขนาดใหญ่ที่สุดซึ่งสามารถพบได้อย่างรวดเร็ว B+cIccc
Nick Alger

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

ไม่แน่ใจว่าสิ่งนี้จะเป็นประโยชน์หรือไม่ แต่โปรดทราบว่าเมื่อคุณรู้ว่าเมทริกซ์นั้นไม่ใช่ค่าบวกแน่นอนให้ตรวจสอบว่าเป็นค่าเซมิตีบวกคุณต้องตรวจสอบว่าเคอร์เนลไม่ว่างเปล่าหรือไม่
Abel Molina

คำตอบ:


23

นิยามการทำงานของคุณคือ "positive semidefinite" หรือ "positive positive" ในการคำนวณเลขทศนิยมคุณจะต้องระบุความอดทนบางอย่างสำหรับสิ่งนี้

Aλ=1.01030λ=1.0

λ สูงสุดϵ|λmax|λmax

น่าเสียดายที่การคำนวณค่าลักษณะเฉพาะทั้งหมดของเมทริกซ์ค่อนข้างใช้เวลานาน อีกวิธีที่ใช้กันทั่วไปคือเมทริกซ์สมมาตรถือว่าเป็นบวกแน่นอนถ้าเมทริกซ์มีตัวประกอบ Cholesky ในเลขทศนิยม การคำนวณตัวประกอบแบบ Cholesky เป็นลำดับความสำคัญเร็วกว่าการคำนวณค่าลักษณะเฉพาะ คุณสามารถขยายสิ่งนี้ให้เป็น semidefiniteness ที่เป็นบวกได้โดยการเพิ่มเอกลักษณ์จำนวนน้อยลงในเมทริกซ์ อีกครั้งมีปัญหาการปรับขนาด วิธีการหนึ่งที่รวดเร็วคือทำการปรับสัดส่วนของเมทริกซ์เพื่อให้องค์ประกอบในแนวทแยงเท่ากับ 1.0 และเพิ่มลงในแนวทแยงก่อนคำนวณการแยกตัวประกอบแบบ Cholesky ϵ

คุณควรระมัดระวังในเรื่องนี้เนื่องจากมีปัญหาบางอย่างเกี่ยวกับวิธีการ ยกตัวอย่างเช่นมีสถานการณ์ที่และเป็น postive แน่นอนในแง่ที่ว่าพวกเขามีจุดลอยตัว Cholesky factorizations แต่ไม่มีตัวประกอบ Cholesky ดังนั้นชุดของ "จุดลอยตัวของเมทริกซ์แน่นอนบวกบวกแน่นอนแบบโคลอสกี้" จึงไม่นูน! B ( A + B ) / 2AB(A+B)/2


คุณช่วยอธิบายรายละเอียดในย่อหน้าสุดท้ายหรือโพสต์ลิงก์ไปยังแหล่งที่มา นั่นเป็นสิ่งที่แปลกมาก
Daniel Shapero

2
การอ้างอิงแบบคลาสสิกสำหรับมาตราส่วนนี้คือ A. van der Slui หมายเลขเงื่อนไขและการปรับสมดุลของเมทริกซ์ Numerische Mathematik 14 (1): 14-23, 1969 นอกจากนี้ยังกล่าวถึงในตำราเช่น Golub และ Van Loan บิตในย่อหน้าสุดท้ายนั้นมาจากประสบการณ์ส่วนตัวที่ได้รับรางวัลอย่างหนักในการค้นหาบรรทัดการเข้ารหัสในโค้ดโปรแกรมแบบ semidefinite - ฉันได้พบกับสถานการณ์ที่และมี Cholesky factorizations โดย LAPACK แต่ไม่มีตัวประกอบ Cholesky ตาม LAPACK ปัญหาประเภทนี้เริ่มเกิดขึ้นเมื่อคุณเกือบเอกพจน์ X + อัลฟ่าΔ X X + 0.95 อัลฟ่าΔ XXX+αΔXX+0.95αΔX
Brian Borchers

1
มันก็ไม่ใช่เรื่องแปลกที่จะค้นพบว่าเมทริกซ์บางตัวสามารถเป็นตัวประกอบของ Cholesky ในความแม่นยำแบบขยายหรือสี่เท่า แต่ไม่ใช่ความแม่นยำสองเท่าปกติหรือความแม่นยำจุดเดียว
Brian Borchers

3
รหัสจุดภายในแบบดูอัลคู่สำหรับ SDP (CSDP, SDPT3, SDPA) มักแสดงเมทริกซ์ที่แน่นอนแน่นอนและมี Cholesky factorizations ในขณะที่ตัวแก้ปัญหายอดนิยมอีกตัวหนึ่ง (SeDuMi) ใช้การสลายตัวแบบเฉพาะ ค่าลักษณะเฉพาะ
Brian Borchers

3

5
ดูเหมือนว่าชื่อผู้ใช้จะเปิดเผยความสัมพันธ์ระหว่างผู้เขียนคำตอบและผู้เขียนบทความค่อนข้างมาก ข้อมูลเพิ่มเติมเล็กน้อยเกี่ยวกับสิ่งที่มีอยู่ในกระดาษจะดี แต่อย่างไรก็ตามมันเป็นเรื่องที่น่าสนใจและเกี่ยวข้องกับรายการคำถามของเอกสาร!
Anton Menshov

0

Python สำหรับคำแนะนำของ @Brian Borchers ลองใช้การสลายตัวของ Cholesky:

from sksparse.cholmod import cholesky, CholmodNotPositiveDefiniteError
    # https://scikit-sparse.readthedocs.io/en/latest/cholmod.html

def testposdef( A, beta=1e-6, pr="" ):
    """ try cholesky( a scipy.sparse matrix  + beta I )

    Why A + beta I, beta say 1e-6 ?
    If A has tiny eigenvalues, 0 to within machine precision,
    about half of these "zeros" may be negative -- tough on solvers.
    Also the condition number improves to ~ rho(A) / beta.
    """
    try:
        solve = cholesky( A, beta=beta )  # A + beta I
        if pr:
            print( "%s + %g I is positive-definite" % (pr, beta ))
        return solve  # x = solve( b )
    except CholmodNotPositiveDefiniteError:
        if pr:
            print( "%s + %g I is not positive-definite" % (pr, beta ))
        return False
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.