เส้นทแยงมุมของเมทริกซ์ปรับสภาพที่ป่วยหนัก


10

ฉันกำลังพยายามที่จะทำให้เมทริกซ์ที่มีความหนาแน่นและไม่มีเงื่อนไขอยู่ในแนวทแยง ในความแม่นยำของเครื่องผลลัพธ์จะไม่ถูกต้อง (คืนค่าลักษณะลบที่เป็นลบ eigenvector ไม่มีความสมมาตรที่คาดหวัง) ฉันเปลี่ยนไปใช้ฟังก์ชัน Eigensystem [] ของ Mathematica เพื่อใช้ประโยชน์จากความแม่นยำโดยพลการ แต่การคำนวณช้ามาก ฉันเปิดให้โซลูชั่นจำนวนมาก มีแพ็คเกจ / อัลกอริทึมที่เหมาะสมกับปัญหาที่ไม่ดีหรือไม่? ฉันไม่ใช่ผู้เชี่ยวชาญเรื่องการปรับสภาพล่วงหน้าดังนั้นฉันจึงไม่แน่ใจว่าจะสามารถช่วยได้มากแค่ไหน ไม่อย่างนั้นทั้งหมดที่ฉันสามารถนึกได้ก็คือตัวแก้ค่าแบบเฉพาะเจาะจงที่มีความแม่นยำแบบขนาน

เพื่อให้พื้นหลังเกี่ยวกับปัญหาเมทริกซ์มีขนาดใหญ่ แต่ไม่ใหญ่มาก (4096x4096 ถึง 32768x32768 มากที่สุด) พวกเขาเป็นจริงสมมาตรและค่าลักษณะเฉพาะถูกล้อมรอบระหว่าง 0 และ 1 (พิเศษ) โดยที่ค่าลักษณะเฉพาะจำนวนมากอยู่ใกล้กับ 0 และไม่มีใครใกล้กับ 1 เมทริกซ์เป็นตัวดำเนินการสังวัตนา ฉันไม่ต้องการทำให้เมทริกซ์ของฉันเป็นเส้นทแยงมุม แต่ยิ่งฉันไปได้มากเท่าไหร่ ฉันสามารถเข้าถึงกลุ่มคอมพิวเตอร์ที่มีโปรเซสเซอร์จำนวนมากและความสามารถในการคำนวณแบบกระจาย

ขอบคุณ


2
คุณใช้กิจวัตรประจำวันในการทำให้เมทริกซ์สมมาตรที่แท้จริงของคุณเป็นแนวทแยง? และการสลายตัวของค่าลักษณะเฉพาะนั้นไม่ถูกต้องในแง่ใด?
Jack Poulson

นี่คือแนวคิดที่เกี่ยวข้องกับคำตอบของอาร์โนลด์: ทำการสลายตัว Cholesky ของเมทริกซ์ SPD ของคุณแล้วหาค่าเอกฐานของรูปสามเหลี่ยม Cholesky ที่คุณเพิ่งได้รับอาจใช้อัลกอริทึมแบบ dqd เพื่อรักษาความถูกต้อง
JM

1
@JM: การสร้างการสลายตัวของ Cholesky ของเมทริกซ์แน่นอนเชิงบวกเชิงตัวเลขเชิงตัวเลขนั้นไม่เสถียรเชิงตัวเลขด้วยวิธีการปกติเนื่องจากมีแนวโน้มที่จะพบจุดหมุนเชิงลบ (เช่น chol (A) ของ Matlab มักจะล้มเหลว) หนึ่งจะต้องตั้งค่าให้เป็นศูนย์และทำลายแถวที่เกี่ยวข้องของปัจจัยต่างๆ การทำเช่นนี้ทำให้มีวิธีในการรับช่องว่างตัวเลขที่เชื่อถือได้
Arnold Neumaier

@Arnold หากหน่วยความจำทำหน้าที่มีการดัดแปลงของ Cholesky ที่ใช้ pivoting สมมาตรสำหรับกรณีเหล่านั้นที่เมทริกซ์เป็นกึ่งบวกบวก(หรือเกือบจะ) อาจจะสามารถใช้สิ่งเหล่านั้นได้ ...
JM

@JM: หนึ่งไม่จำเป็นต้องหมุนเพื่อแก้ไขกรณี semidefinite; สูตรที่ฉันให้ก็เพียงพอแล้ว ฉันแค่อยากจะชี้ให้เห็นว่าไม่มีใครสามารถใช้โปรแกรมกระป๋องมาตรฐาน แต่ต้องแก้ไขตัวเอง
Arnold Neumaier

คำตอบ:


7

คำนวณ SVD แทนการสลายตัวของสเปกตรัม ผลลัพธ์จะเหมือนกันในการคำนวณทางคณิตศาสตร์ที่แน่นอนเนื่องจากเมทริกซ์ของคุณเป็นสมมาตร positve แน่นอน แต่ในคณิตศาสตร์ที่มีความแม่นยำแน่นอนคุณจะได้ค่าลักษณะเฉพาะขนาดเล็กที่มีความแม่นยำมากกว่า

แก้ไข: ดู Demmel & Kahan, ค่าเอกพจน์ที่ถูกต้องของเมทริกซ์ Bidiagonal, SIAM J. Sci สถิติ คอมพิวเต 11 (1990), 873-912
ftp://netlib2.cs.utk.edu/lapack/lawnspdf/lawn03.pdf

Edit2; โปรดทราบว่าวิธีการใดจะไม่สามารถแก้ไขค่าลักษณะเฉพาะที่เล็กกว่าประมาณบรรทัดฐานเวลาที่ความแม่นยำของเครื่องจักรที่ใช้การเปลี่ยนรายการเดียวโดยหนึ่ง ulp อาจเปลี่ยนค่าลักษณะเฉพาะขนาดเล็กโดยมากนี้ ดังนั้นการหาค่าลักษณะเฉพาะเป็นศูนย์ในตำแหน่งที่มีขนาดเล็กมากจึงไม่มีความเหมาะสมและไม่มีวิธีการใด (ยกเว้นการทำงานด้วยความแม่นยำสูงกว่า) จะคลี่คลายค่าลักษณะเฉพาะที่เหมือนกัน


[0,BT;B,0]

2
@JackPoulson: ประเด็นก็คือรูปแบบที่มีสองมิติกำหนดค่าเอกพจน์ขนาดเล็กดีกว่ามาก รูปแบบสมมาตร tridiagonal ที่เกี่ยวข้องมีค่าศูนย์บน diagonal ซึ่งถูกรักษาไว้โดยการลด bidiagonal เป็น diagonal แต่ไม่ใช่โดย QR ที่ใช้กับ tridiagonal
Arnold Neumaier

1
อ้างอิง? วิธีการของ Jacobiนั้นมีความแม่นยำสูง (แม้ว่าช้า)
Jack Poulson

@ JackPoulson: ลองและดู Demmel & Kahan, ค่าเอกพจน์ที่ถูกต้องแม่นยำของเมทริกซ์Bidiagonal
Arnold Neumaier

[0,BT;B,0]

1

ขอบคุณสำหรับข้อเสนอแนะนี้. ฉันลองคำสั่ง SVematic ของ Mathematica แต่ฉันไม่ได้รับการปรับปรุงที่เห็นได้ชัด (ยังขาดความสมมาตรที่เหมาะสม 'eigenvalues' ไม่ถูกต้องเป็นศูนย์ที่พวกเขาออกมาไม่ถูกต้องมาก่อน) บางทีฉันอาจจำเป็นต้องใช้อัลกอริทึมอย่างใดอย่างหนึ่งที่คุณอธิบายไว้ข้างต้นแทนที่จะเป็นฟังก์ชันในตัว ฉันอาจต้องการหลีกเลี่ยงปัญหาการใช้วิธีการเฉพาะเช่นนี้เว้นแต่ว่าฉันจะแน่ใจล่วงหน้าว่าจะมีการปรับปรุงที่สำคัญ

@ JackPoulson ฉันอ่านบทความเกี่ยวกับวิธีการของ Jacobi ที่คุณอ้างถึงและมันก็ดูดี คุณหรือใครก็ได้แนะนำวิธีที่ดีในการใช้วิธีการของ Jacobi ในการค้นหาระบบ eigensystem ได้หรือไม่? ฉันเดาว่าถ้าฉันเขียนมันเอง (ใน MATLAB) มันจะช้ามาก


ฉันยังไม่ได้ทดสอบ แต่มีการนำ MATLAB มาใช้ที่นี่: groups.google.com/forum/?fromgroups#!msg/sci.math.num-analysis/…
Jack Poulson

โปรดทราบว่าวิธีการใดจะไม่สามารถแก้ไขค่าลักษณะเฉพาะที่เล็กกว่าประมาณบรรทัดฐานเวลาที่ความแม่นยำของเครื่องจักรที่ใช้เนื่องจากการเปลี่ยนหนึ่งรายการโดยหนึ่ง ulp อาจเปลี่ยนค่าลักษณะเฉพาะขนาดเล็กโดยมากแล้ว ดังนั้นการหาค่าลักษณะเฉพาะเป็นศูนย์ในตำแหน่งที่มีขนาดเล็กมากจึงไม่มีความเหมาะสมและไม่มีวิธีการใด (ยกเว้นการทำงานด้วยความแม่นยำสูงกว่า) จะคลี่คลายค่าลักษณะเฉพาะที่เหมือนกัน แต่เพียงคืนค่าพื้นฐานสำหรับพื้นที่ว่างเชิงตัวเลขทั่วไป คุณต้องการค่าลักษณะเฉพาะเพื่ออะไร
Arnold Neumaier

@ArnoldNeumaier: ฉันทำการทดสอบบางอย่างใน MATLAB ด้วยค่าลักษณะเฉพาะในช่วง [0,1] โดยมีหนึ่งค่าลักษณะเฉพาะตั้งค่าด้วยตนเองเช่น 6.3e-16 และรูทีน SVD ของ Octave (ขึ้นอยู่กับ dvdvd ซึ่งใช้การลดแบบสองมิติ QR) จะรับค่าเหล่านี้แม่นยำกว่า eig ของ Octave รหัส Jacobi ที่เชื่อมโยงดูเหมือนว่าจะใช้งานช้าเกินไปแม้จะอยู่ในเมทริกซ์ขนาดปานกลาง
Jack Poulson

@JackPoulson: ใช่ แต่ Leigh ดูเหมือนจะบ่นเกี่ยวกับหลายค่าลักษณะเฉพาะขนาดเล็กมากและ eigenvectors ของพวกเขาไม่ค่อยจะมีผู้ที่ออกแบบมา แต่จะผสมได้อย่างอิสระไม่ว่าวิธีการที่ไม่ถูกนำมาใช้ และค่าบวกที่เป็นบวกเล็กมาก (น้อยกว่า 1e-16) จะเป็นศูนย์แน่นอน
Arnold Neumaier

@ArnoldNeumaier ถูกต้องที่ฉันค้นหาค่าลักษณะเฉพาะจำนวนน้อยมากซึ่งฉันเดาว่าจะทำให้ปัญหาเลวร้ายลง ฉันไม่ได้ตระหนักถึง (แม้ว่าในการหวนกลับเป็นที่ชัดเจน) ว่าค่าลักษณะเฉพาะน้อยกว่า 1e-16 จะเป็นศูนย์ในจุดลอย ฉันเดาแม้ว่าจะสามารถเก็บหมายเลขได้ แต่ข้อผิดพลาดในการปัดเศษเกิดขึ้นเมื่อทำการเพิ่มเข้าไปในจำนวนที่มากขึ้น eigenvectors บอกฉันว่าปัญหาบางอย่างแก้ไขได้หรือไม่ eigenvector ช่วยให้การสลายตัวของปัญหาเป็นส่วนที่แก้ไขได้และไม่สามารถแก้ไขได้ หากฉันถูก จำกัด ด้วยความแม่นยำพื้นฐานคุณสามารถแนะนำแพ็คเกจใด ๆ เพื่อการแก้ปัญหาที่รวดเร็วกว่าได้หรือไม่?
Leigh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.