Matlab [Q, R, E] = qr (A) 'nın arkasındaki karşılık gelen LAPACK işlevi nedir?


12

Şu anda ucuz bir matrisi için iyi bir rütbe hesaplamaya çalışıyorum . Bu nedenle QR ayrışmasını kullanarak bir sütunlu döner hesaplıyorumA

[Q,R,E]=qr(A)

Matlab. derecesini kullanarak tahmin ediyorumA

tol = size(A,n)*eps*norm(A,'fro'); 
r = sum(abs(diag(R))>tol)

Bu iyi çalışır ve R'nin tüm diyagonal girişleri üzerinde bir çizim şöyle görünür: arsa (çeşit (abs (diag (R)), 1 'alçalma'), 'r *')

R

Giriş matrisi her iki deney için de tamamen aynıdır.

Şimdi sorum Matlab'dan QR ayrıştırma sütunu hangi LAPACK fonksiyonuna dayanıyor?

Herhangi bir yardım için teşekkürler, Grisu

Düzenleme: DGEQPF aynı yanlış sonucu verir.

Edit2:

  • AE+sign(E,F)
  • A
  • R
  • OpenBlas / GotoBLAS (64 bit) ile LAPACK 3.4.0 kullandım
  • Matlab 7, 2007b, 2010b Linux 32bit

Edit3: - GDB kullanarak, Matlab 2010b dgeqp3_ () /usr/ubuntu10.04/matlabr2010b/bin/glnx86/../../bin/glnx86/../ den DGEQP3: # 3 0xaa46ce2f çağırdığını öğrendim. ./bin/glnx86/mllapack.so LAPACK kullanarak neden yanlış sonuç alıyorum (3.4.0, Çalışma Notu 176'da belirtilen düzeltmeleri içerir)?


Burada paylaşabileceğiniz daha küçük bir matrisle aynı davranışı tetikleyebilir misiniz?
GertVdE

A

A

Grisu - Matrisinize bakmak isterim. Ancak, www-e.uni-magdeburg.de/makoehle/A.mtx.gz bağlantısı artık etkin değil (şu anda, zaten). Matrise geçerli bir bağlantınız var mı? Teşekkürler, Les Foster

@LeslieFoster - scicomp'a hoş geldiniz!
Aron Ahmadia

Yanıtlar:


7

Burada iki sorun var:

  • A
  • MATLAB'ın dahili kütüphaneleriyle aynı yazılım yığınına sahip misiniz?

Yoğun mu seyrek mi?

ADGEQP3[Q,R,E] = qr(A)A

MATLAB'ın dahili kütüphaneleriyle aynı yazılım yığınına sahip misiniz?

Muhtemelen hayır, bu da farklı sonuçlar almanızın bir nedeni olabilir.

QR çarpanlarına ayırma kullandığım yazdığım bir kütüphaneyi birim test ederken bu sorunla karşılaştım. İşimi prototiplemek için MATLAB kullandım ve LAPACK veya NumPy kullanmaktan farklı sonuçlar aldım. Anlayabildiğim kadarıyla, MathWorks bu bilgileri bulmayı kolaylaştırmadığı için MATLAB, 3.1.1'den daha önce olmayan bir LAPACK verson ve Intel'in MKL BLAS kütüphanesi (Windows, Intel Mac ve Linux için) sürüm 9.1'i kullanıyor veya daha yüksek ( buraya bakın ). SuiteSparse MATLAB'ın kullandığı sürüm hakkında hiçbir şey bulamadım. Çevrimiçi dolaşarak veya sisteminiz için kütüphane dosyalarına bakarak, ek bilgileri öğrenebilirsiniz. Yazılım paketleri arasında aynı kütüphanelerle karşılaştırabilmek için MATLAB'ın bağlandığı kütüphaneleri değiştirmeyi deneyebilirsiniz; Eric Chu güzel bir yazı sunuyoren azından MATLAB'ın BLAS kütüphanesini kendi kitabınızla nasıl değiştirebileceğinizi gösterir (elbette bunu kendi sorumluluğunuzdadır). Aynı şeyi LAPACK ile de yapabileceğinizi önerir. MATLAB'ın kullandığı SuiteSparse sürümünü kendi sürümünüzle değiştirmek bile mümkün olabilir.

A=QRQR

Sistem BLAS ve LAPACK kütüphanelerini kullandığından QR çarpanlarına ayırma için sonuçlarımı prototiplemek için NumPy'yi kullandım. NumPy ve SciPy, MATLAB'ın yerine geçmez, çünkü iki kütüphanede MATLAB'ın işlevlerinden bazıları yoktur, ancak bu belirli lineer cebir görevi için Python + NumPy + SciPy + Matplotlib iyi çalışmalıdır.


Matlab ile aynı yazılım yığınını elde etmek bence imkansız. Prototip oluşturmak için başka bir ortam kullanmak da istenmez. Sorun kod Matlab düzgün çalışıyor, ama C değil
MK aka Grisu

@Grisu: Sanırım aynı yazılım yığınını elde etmek çok zor olurdu, kitaplıklarında bağlantı kurmaya çalışmazdı. Kafan karıştığım şey MATLAB'daki sonucun nasıl doğru olduğunu ve C'deki sonucun yanlış olduğunu nasıl bildiğinizdir. Bu bilinen özelliklere sahip bir çeşit test matrisi mi? Daha da önemlisi, AronAhmadia haklı; mimariyi ve yazılım yığınını kopyalamanın ötesinde, aynı sonuçları kararsız bir algoritma ile elde etmeyi bekleyemezsiniz. Aynı şeyi bana iki yıl önce MATLAB forumlarında söyledim.
Geoff Oxberry

Bence QR kararsız değil. Hangi QR ayrışmasının doğru olduğunu doğrudan kontrol edemiyorum, ancak rütbe ve Q matrisinden bir projektör hesaplıyorum ve orada iyi ya da kötü bir sonuç alıp almadığınızı ve Matlab'ın iyi olup olmadığını kolayca doğrulayabilirim. Ama Matlab kütüphanelerine bağlanmaya çalışıyorum.
MK aka Grisu

@Grisu: İyi sonuçlar ve doğru sonuçlar arasında belirgin bir fark var. Son zamanlarda sonuçlarımın harika görünmesini sağlayan yanlış bir hesaplama yaptım. Bununla birlikte, hesaplama yanlıştı ve doğru hesaplama, sonuçlarımın daha az etkileyici görünmesine neden oldu (ancak neyse ki, sonuçlarımın doğru olduğunu gösteriyor). Dik bir projektörü veya eğik bir projektörü hesaplamaya mı çalışıyorsunuz? (Soruyorum çünkü
tezimin

1
@GeoffOxberry: fwiw, MATLAB sürümümde BLAS ve LAPACK sürümlerini arayabilir internal.matlab.language.versionPlugins.blasve internal.matlab.language.versionPlugins.lapackalabilirim
Amro

6

Leslie Foster'ın rütbe açıcı yazılım hakkındaki sayfasına bakın . Ayrıca , sıralama gösteren QR hatalarını analiz edenxGEQP3 bu LAPACK Çalışma Notuna bakın .

Bir hata ayıklayıcıda kesme noktaları ayarlayıp yığını inceleyerek MATLAB'ın hangi yordamları kullandığını öğrenebilmeniz gerekir. Son olarak, birkaç yıl önce, MATLAB, paylaşılan kütüphaneler kullandı, bu durumda sembol adları çıkartılamaz, bu nedenle çağrı yığınında işlev adlarını göreceksiniz (ancak hata ayıklama bilgilerini kesinlikle tutmadığı için argümanlar değil).


Dereceyi açığa çıkaran yazılımdaki sayfa yardımcı olmadı. RRQR prosedürü, fikrimde kullandığım ilk şey olduğunu açıkladı, ancak sütun döndürme fikrinden daha kötü sonuçlar veriyor.
MK aka Grisu

2
@Grisu - Size yardımcı olmalıydı. xGEQP3Algoritma rütbe ifşa ettiği için tamamen güvenli değildir. Eğer doğru sonuç almak olduğunu garanti etmek istiyorsanız, gibi SVD veya daha güvenli bir QR kullanmalıdır xGEQPXveya xGEQPY. Kararsız bir algoritmanın aynı sonucu farklı mimarilerde veya farklı uygulamalarda döndürmesini bekleyemezsiniz (MATLAB muhtemelen daha eski bir LAPACK kullanıyor).
Aron Ahmadia

GEQP3'ün sıralama açığa vurmadığını biliyorum ama RRQR altyordamlarından daha doğru sonuçlar veriyor. Dış algoritmamda SVD kullanmak çok pahalı. Ayrıca LAWN-176'nın yazarlarından biriyle konuşacağım ve bu hatanın hata tarafından kapsanmadığını düşünüyor. Ayrıca LAPACK 3.0.0 DGEQPF / DGEQP3 aynı sonuçları ile denedim.
MK aka Grisu
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.