Matlab / Octave'da büyük bir matrisin durum sayısını hesaplamak için en hızlı algoritma


9

Koşul numarası tanımından, bunu hesaplamak için bir matris inversiyonunun gerekli olduğu anlaşılıyor, genel bir kare matris için (veya simetrik pozitif kesin ise daha iyisi), daha hızlı bir şekilde.

Yanıtlar:


7

Koşul sayısının hesaplanması (hatta 2 faktörü dahilinde bile olsa), bu yönde bir teorem olmamasına rağmen, bir faktorizasyon hesaplamakla aynı karmaşıklığa sahip gibi görünmektedir.

Seyrek Cholesky faktörü kaynaktan simetrik bir pozitif tanımlı matris ya da seyrek bir mesafede (örtük ile çarpanlara genel kare matrisin), bir seyrek ters alt kümesi hesaplayarak Frobemino normunda durum sayısını elde olabilir , tam tersi hesaplamaktan çok daha hızlıdır. (Bununla ilgili makalem: Aşırı belirlenmiş doğrusal sistemler için hibrit normlar ve sınırlar, Linear Algebra Appl. 216 (1995), 257-266. Http://www.mat.univie.ac.at/~neum/scan/74 .pdf )R,SR,S(R,TR,)-1

Düzenleme: sonra herhangi bir unitarily değişmez norn ile ilgili olarak,Seyrek QR çarpanlarına ayırma işlemlerinin hesaplanması için bakınız, örneğin, http://dl.acm.org/citation.cfm?id=174408 . Seyrek tersin hesaplanması için, bkz., Örneğin, benim kâğıdım: Seyrek doğrusal modellerde kovaryansların kısıtlı maksimum olasılık tahmini, Genetics Selection Evolution 30 (1998), 1-24. https://www.mat.univie.ac.at/~neum/ms/reml.pdf Maliyet, çarpanlara ayırma maliyetinin yaklaşık 3 katıdır.bir=SR,

cÖnd(bir)=cÖnd(R,)=cÖnd(R,TR,).




Yani aşağıdakileri öneriyorsunuz: Bir matris verildi formunun hesaplayın, burada bir üst üçgen matris ve dikey bir matristir ve daha sonra koşul numarası Buradaki nokta, bir QR çarpanlaştırmasını hesaplamak için hızlı bir yöntem bulmaktır. Haklı mıyım? birbir=SR,R,Scond(bir)=||bir||||bir-1||(R,TR,)-1
linello

@linello: pek değil; benim düzenlememe bakın.
Arnold Neumaier

Teşekkürler! Kontrol edeceğim, bu adımın maliyeti nedir?
linello

@linello: Tam bir matris için ; seyrek bir matris için, çok seyreklik yapısına bağlıdır. Ö(n3)
Arnold Neumaier

4

Durum numarasını hesaplamak için simetrik bir matrisin özdeğer / özvektör ayrışmasını veya genel bir matrisin SVD'sini kullanmak kesinlikle kolaydır, ancak bunlar ilerlemenin özellikle hızlı yolları değildir.

hesaplamasının tüm çalışmalarına gitmeden çoğu amaç için yararlı olan koşul sayısının bir tahminini hesaplayabilen yinelemeli algoritmalar vardır . Örneğin MATLAB'deki işleve bakın . bir-1condest


Ancak tahmin bazen çok küçüktür. Durum sayısının hesaplanması (hatta 2 faktörü dahilinde bile olsa), bu yönde bir teorem olmamasına rağmen, bir faktorizasyon hesaplamakla aynı karmaşıklığa sahip gibi görünmektedir.
Arnold Neumaier

1

Seyrek Hermiti matrisleri için 'H, özdeğerlerini hesaplamak için Lanczos algoritmasını kullanabilirsiniz. Eğer'H Hermitiyen değil, özdeğerlerini hesaplayarak tekil değerlerini hesaplayabilirsiniz. 'HT'H.

En büyük ve en küçük özdeğerler / tekil değerler çok hızlı bulunabildiğinden (tridiagonalizasyon tamamlanmadan çok önce), Lanczos yöntemi durum numarasını hesaplamak için özellikle yararlıdır.


Ben her zaman en küçük veya en büyük özdeğer almak için nasıl açıklar lanczos iterasyon için okunabilir bir matlab kodu bulmak için merak ettim. Bana bir tane önerebilir misin?
linello

Lanczos algoritması için MATLAB kodlarım yok.
chaohuang
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.