CHOLMOD SuiteSparse paketinin (beta 4.4.5) en son sürümü, bir matlab (ve C) API kullanarak LDLT ayrışması için simetrik bir satır / sütun (sıra 2 güncellemesi) değiştirmeyi destekler . Projelerimden birinde başarıyla kullandım.
Sen yapmak için kullanabilirsiniz nnz(G) çarpanlara güncellemeleri. Bu makaleye dayanmaktadır .
Bu nedenle, karmaşıklık O(nnz(G)∗nnz(L)) . Burada nnz(L) , bir kullanıldığında önemli ölçüde azaltılabilir permütasyon indirgeme dolgu seyrek için A
Paket indirilebilir burada
Paket sahibinin verdiği bazı notlar aşağıdadır (Prof. Tim Davis):
API:
LD = ldlrowmod (LD, k), A (:, k) ve A (k, :) öğelerini k. Satır / kimlik sütununa ayarlayarak satır / sütun k'yi siler.
LD = ldlrowmod (LD, k, C), A'nın kth sırasını / sütununu (kth satırı / kimlik sütunu olması gerekir) seyrek sütun C ile değiştirir.
karmaşıklık:
Satır ekle / silme en alır O(nnz(L)) bu durumda, zaman nnz(L) olan O(n) , o zaman süresi, en fazla bir O(n) .
Doldurmayı azaltan permütasyon:
LDLT = A'da olduğu gibi, bir kullanıcının matrisini çarpanlarına ayırmak iyi bir fikirdir . Bunun yerine, LDLT = PAPT izin veririz, böylece L çok daha az sıfırdan farklıdır.