ฉันกำลังพยายามคำนวณการจัดอันดับที่ดีสำหรับเมทริกซ์อย่างถูก ดังนั้นฉันจึงคำนวณการถอดรหัสคอลัมน์โดยใช้การถอดรหัส QR
[Q,R,E]=qr(A)
ใน Matlab ฉันประเมินระดับใช้
tol = size(A,n)*eps*norm(A,'fro');
r = sum(abs(diag(R))>tol)
มันใช้งานได้ดีและพล็อตในแนวทแยงทั้งหมดของ R มีลักษณะดังนี้:
หากพอร์ตอัลกอริธึมทั้งหมดเป็น C / Fortran ฉันจะแทนที่ [Q, R, E] = qr (A) โดยใช้ DGEQP3 จาก LAPACK ซึ่งคำนวณคอลัมน์ที่มีการแยกย่อย QR แต่ถ้าฉันใช้การประมาณแบบเดียวกันกับอันดับฉันส่วนใหญ่เข้าใจผิด พล็อตเดียวกันสำหรับผลิตจาก DGEQP3 ดูเหมือนว่า
อินพุตเมทริกซ์เหมือนกันทั้งสองการทดลอง
คำถามของฉันตอนนี้ฟังก์ชั่น LAPACK คือคอลัมน์ใดที่หมุนแกน QR การสลายตัวจาก Matlab พึ่งพา?
ขอบคุณสำหรับความช่วยเหลือใด ๆ Grisu
แก้ไข: DGEQPF ให้ผลลัพธ์ที่ผิดเหมือนกัน
Edit2:
- อินพุตเมทริกซ์มีความหนาแน่นสูงและสร้างตามE + s ฉันกรัมn ( E , F )
- สามารถใช้ได้ที่นี่: http://www-e.uni-magdeburg.de/makoehle/A.mtx.gz (รูปแบบ MatrixMarket)
- ผิด : http://www-e.uni-magdeburg.de/makoehle/R_wrong.mtx.gz
- ฉันใช้ LAPACK 3.4.0 กับ OpenBlas / GotoBLAS (64 บิต)
- Matlab 7, 2007b, 2010b Linux 32 บิต
แก้ไข 3: - จากการใช้ GDB ฉันพบว่า Matlab 2010b เรียก DGEQP3: # 3 0xaa46ce2f ใน dgeqp3_ () จาก /usr/ubuntu10.04/matlabr2010b/bin/glnx86/../../bin/glnx86/..// ./bin/glnx86/mllapack.so เหตุใดฉันจึงได้รับผลลัพธ์ที่ไม่ถูกต้องโดยใช้ LAPACK (3.4.0 รวมถึงการแก้ไขที่กล่าวถึงในหมายเหตุการทำงาน 176)