Bir matrisin yarı yarıya pozitif olup olmadığını test etme


12

Pozitif yarı tanım için kontrol etmem gereken simetrik matrislerin bir listesine Lsahibim (yani özdeğerleri negatif değil.)

Yukarıdaki yorum, ilgili özdeğerleri hesaplayarak ve negatif olup olmadıklarını kontrol ederek (belki de yuvarlama hatalarına dikkat etmek zorunda kalarak) bunu yapabileceğini ima eder.

Özdeğerleri hesaplamak senaryomda oldukça pahalıdır, ancak kullandığım kütüphanenin pozitif doğruluk için oldukça hızlı bir teste sahip olduğunu fark ettim (yani, bir matrisin özdeğerleri kesinlikle pozitifse).

Dolayısıyla fikir bir matris verilen olurdu BL ise, bir test B+ϵI kesin pozitiftir. Değilse, B pozitif yarı-kesin değildir, aksi takdirde gerçekten pozitif yarı-kesin olduğundan emin olmak için özdeğerlerini hesaplayabilir B.

Şimdi sorum şu:

Pozitif kesinlik için etkili bir test verilmesi koşuluyla, bir matrisin yarı yarı-pozitif olup olmadığını test etmenin daha doğrudan ve etkili bir yolu var mı?


1
A


1
B+cIccc

Evet, özdeğerleri değiştirebilir ve en küçük öz değeri hesaplayabilirsiniz, ancak yine de kabul edeceğiniz şeye tolerans belirleme (ve özdeğerlerinizin en azından bu toleransa hesaplandığından emin olma) sorununuz var!
Brian Borchers

Bunun yararlı olup olmayacağından emin değilim, ancak bir matrisin pozitif kesin olmadığını bildiğinizde, pozitif semidefinite olup olmadığını kontrol etmek için sadece çekirdeğinin boş olup olmadığını kontrol etmeniz gerekir.
Abel Molina

Yanıtlar:


23

"Pozitif semidefinit" veya "pozitif kesin" çalışma tanımınız nedir? Kayan nokta aritmetiğinde bunun için bir tür tolerans belirtmeniz gerekir.

Aλ=1.01030λ=1.0

λ maksϵ|λmax|λmax

Ne yazık ki, bir matrisin tüm özdeğerlerini hesaplamak oldukça zaman alıcıdır. Yaygın olarak kullanılan bir başka yaklaşım, eğer matrisin kayan nokta aritmetiğinde bir Cholesky çarpanlarına ayırması durumunda simetrik bir matrisin pozitif olarak tanımlandığıdır. Cholesky çarpanlarına ayırma işlemi, özdeğerleri hesaplamaktan daha hızlı bir büyüklük sırasıdır. Matrise kimliğin küçük bir katını ekleyerek bunu pozitif yarı yarıya genişletebilirsiniz. Yine, ölçekleme sorunları var. Hızlı bir yaklaşım, çapraz elementlerin 1.0 olması ve Cholesky çarpanlarına ayırmadan önce diyagonale eklemesi için matrisin simetrik bir ölçeklendirmesidir . ϵ

Buna dikkat etmelisiniz, çünkü yaklaşımla ilgili bazı sorunlar var. Örneğin, ve kayan nokta Cholesky faktörleştirmeleri olduğu, ancak Cholesky çarpanlarına sahip olmadığı anlamında pozitif olduğu durumlar vardır . Böylece "kayan nokta Cholesky faktörleştirilebilir pozitif belirli matrisler" kümesi dışbükey değildir! AB(A+B)/2


Bu son paragraf hakkında ayrıntılı bilgi verebilir veya bir kaynağa bağlantı gönderebilir misiniz? Oldukça tuhaf.
Daniel Shapero

2
Bu ölçeklemeye klasik bir referans A. van der Slui'dir. Matrislerin durum sayıları ve dengelenmesi Numerische Mathematik 14 (1): 14-23, 1969. Ayrıca Golub ve van Kredisi gibi ders kitaplarında da tartışılmaktadır. Son paragraftaki bit, yarı noktalı bir programlama kodunda kodlama satır aramasında zor kazanılmış kişisel deneyimlerdendir - ve LAPACK tarafından Cholesky faktörizasyonlarına sahip olduğu durumlarla karşılaştım , ancak , LAPACK'e göre Cholesky çarpanlarına ayırmaz. Bu tür sorunlar neredeyse tekil olduğunuzda ortaya çıkmaya başlar. XX+αΔXX+0.95αΔX
Brian Borchers

1
Bazı matrislerin genişletilmiş veya dörtlü hassasiyetle Cholesky olarak kullanılabileceğini, ancak normal çift hassasiyetli veya tek hassasiyetli kayan nokta aritmetiğinde bulunmadığını keşfetmek nadir değildir.
Brian Borchers

3
SDP (CSDP, SDPT3, SDPA) için primal-çift iç nokta kodlarının birçoğu her zaman pozitif kesin ve Cholesky faktörizasyonlarına sahip matrisleri döndürürken, başka bir popüler çözücü (SeDuMi) bir özdeğer ayrışması kullanır ve çok küçük negatif olan çözümleri döndürür özdeğer.
Brian Borchers

3

5
Kullanıcı adı, cevabın yazarı ile yazıların yazarı arasındaki ilişkiyi açıklamaktadır. Gazetede neler olduğuna dair biraz daha fazla bilgi iyi olurdu; yine de, bu çok ilginç ve makale soru listesi ile ilgili!
Anton Menshov

0

@Brian Borchers'ın önerisi için Python, Cholesky ayrışmasını deneyin:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.