Bir matrisin SVD'si pratikte nasıl hesaplanır?


11

Örneğin MATLAB, belirli bir matrisin SVD'sini nasıl hesaplar? Cevabın muhtemelen özvektörlerini ve özdeğerlerini hesaplamayı içerdiğini varsayıyorum A*A'. Eğer durum buysa, bunları nasıl hesapladığını da bilmek isterim?



4
Aslında, hayır, o gelmez değil öz vektörlerini ve değerlerini hesaplamak içerir ! Bu, sonucun doğruluğunu önemli ölçüde azaltacaktır. bir*birT
Michael Grant

Yanıtlar:


11

Bu genellikle Golub-Reinsch algoritması kullanılarak yapılır ve hayır, A A'nın özdeğerlerini ve özvektörlerini hesaplamayı içermezbirbirT

Görmek

GH Golub ve C. Reinsch. Tekil Değer Ayrışımı ve En Küçük Kareler Çözümleri. Numerische Mathematik 14: 403-420, 1970.

Bu materyal, sayısal doğrusal cebir üzerine birçok ders kitabında tartışılmıştır.


13

Brian (şimdi klasik) Golub-Reinsch gazetesinin yanı sıra, cevabında ( kağıdın El Kitabı sürümüne bağlandım ) ve (şimdi de klasik) öncülü not ediyor Golub-Kahan ait kağıt , bir dizi olmuştur o zamandan bu yana SVD'nin hesaplanmasındaki önemli gelişmeler. İlk olarak, olağan yöntemin nasıl çalıştığını özetlemeliyim.

Bir matrisin SVD'sini hesaplama fikri, simetrik bir matrisin özdenkompozisyonunu hesaplamak için kullanılan yönteme niteliksel olarak benzerdir (ve OP'de belirtildiği gibi, aralarında samimi bir ilişki vardır). Özellikle, iki aşamada ilerler: bir bidiagonal matrise dönüşüm ve sonra bir bidiagonal matrisin SVD'sini bulma. Bu, ilk önce simetrik bir matrisin üçgen şekle indirilmesi ve daha sonra elde edilen üçgenin özünün bileşiminin hesaplanması prosedürüne tamamen benzer.

Bir bidiagonal matrisin SVD işlem için, özellikle ilginç bir hamle olmuştur Jim Demmel ve Velvel Kahan kağıt bir uygun ilk önerilen yöntem değiştirerek, iyi doğruluk ile bidiagonal matrisin daha küçük tekil değerlerini hesaplamak göstermiştir, Golub-Reinsch. Bu, daha sonra takip etmiştir (re?) Keşfini dqd algoritması RUTISHAUSER eski bölüm farkı algoritmasının bir soyundan,. (Beresford Parlett güzel bir tartışma yapıyor burada.) Bellek hizmet veriyorsa, bu artık LAPACK tarafından dahili olarak kullanılan tercih edilen yöntemdir. Bunun dışında simetrik öz problemlerin çözümünde gelişmelerin SVD versiyonlarını elde etmek her zaman mümkün olmuştur; örneğin, bölme ve fethetmenin bir SVD sürümü ve eski Jacobi algoritmasının bir SVD sürümü vardır ( bazı durumlarda daha doğru olabilir ).

Bidiagonalizasyona gelince, Barlow'un makalesinde , Golub ve Reincsh'in orijinal prosedüründen biraz daha fazla çalışma gerektiren, ancak daha doğru teklifli matrisler veren geliştirilmiş bir yöntem özetlenmiştir .


1
@Jack, gördüğünüz bu bir ihtimal?
JM

Şaşırtıcı bir şekilde, ben yoktu!
Jack Poulson
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.