คำถามของคุณเป็นเหมือนถามว่าไขควงให้เลือกขึ้นอยู่กับไดรฟ์ (ช่อง, ฟิลลิป, Torx, ... ): นอกจากจะมีมากเกินไปตัวเลือกยังขึ้นอยู่กับว่าคุณต้องการขันสกรูหนึ่งตัวหรือประกอบ ชั้นวางห้องสมุดทั้งชุด อย่างไรก็ตามในคำตอบบางส่วนคำถามของคุณที่นี่เป็นบางส่วนของปัญหาที่คุณควรเก็บไว้ในใจเมื่อเลือกวิธีการแก้ระบบเชิงเส้นx = B ฉันจะ จำกัด ตัวเองเป็นเมทริกซ์กลับด้าน; กรณีของระบบที่มากเกินไปหรือต่ำเกินไปนั้นเป็นเรื่องที่แตกต่างกันและควรเป็นคำถามแยกต่างหากA x = b
ดังที่คุณได้กล่าวไว้อย่างถูกต้องตัวเลือกที่ 1 และ 2 นั้นถูกต้อง: การคำนวณและการใช้เมทริกซ์ผกผันเป็นแนวคิดที่ไม่ดีอย่างมากเนื่องจากมีราคาแพงกว่าและมักจะมีเสถียรภาพน้อยกว่าการใช้อัลกอริทึมอย่างอื่น นั่นทำให้คุณมีตัวเลือกระหว่างวิธีการโดยตรงและซ้ำ สิ่งแรกที่ต้องพิจารณาไม่ใช่เมทริกซ์แต่สิ่งที่คุณคาดหวังจากโซลูชันตัวเลข˜ x :Ax~
- มันต้องแม่นยำแค่ไหน? ไม่ต้องแก้ระบบได้ถึงความแม่นยำเครื่องหรือคุณมีความพึงพอใจกับ~ xความพึงพอใจ (พูด) ‖ ~ x - x * ‖ < 10 - 3ที่x *เป็นทางออกที่แน่นอน?x~x~∥ x~- x* * * *∥ < 10- 3x* * * *
- วิธีที่รวดเร็วคุณไม่ต้องการหรือไม่ ตัวชี้วัดที่เกี่ยวข้องเพียงอย่างเดียวที่นี่คือเวลานาฬิกาบนเครื่องของคุณ - วิธีการที่ปรับขนาดได้อย่างสมบูรณ์แบบบนคลัสเตอร์ขนาดใหญ่อาจไม่ใช่ทางเลือกที่ดีที่สุดหากคุณไม่มีหนึ่งในนั้น แต่คุณมีการ์ด Tesla ใหม่ ๆ
เนื่องจากไม่มีสิ่งดังกล่าวเป็นอาหารกลางวันฟรีคุณมักจะต้องตัดสินใจเกี่ยวกับการแลกเปลี่ยนระหว่างสอง หลังจากนั้นคุณเริ่มดูเมทริกซ์ (และฮาร์ดแวร์ของคุณ) เพื่อตัดสินใจเกี่ยวกับวิธีการที่ดี (หรือค่อนข้างเป็นวิธีที่คุณสามารถค้นหาการใช้งานที่ดี) (สังเกตว่าฉันหลีกเลี่ยงการเขียน "ดีที่สุด" ที่นี่ ... ) คุณสมบัติที่เกี่ยวข้องมากที่สุดที่นี่คือA
- โครงสร้าง : Is สมมาตร? มันหนาแน่นหรือหร็อมแหร็ม? สี?A
- ค่าลักษณะเฉพาะ : พวกเขาเป็นบวกทั้งหมด (เช่นเป็นบวกแน่นอน)? พวกเขาเป็นกลุ่มหรือไม่ บางคนมีขนาดเล็กหรือใหญ่มาก?A
เมื่อคำนึงถึงสิ่งนี้คุณจะต้องติดตามวรรณกรรม (ขนาดใหญ่) และประเมินวิธีการต่าง ๆ ที่คุณพบสำหรับปัญหาเฉพาะของคุณ ต่อไปนี้เป็นคำพูดทั่วไป:
ถ้าคุณต้องการความแม่นยำของเครื่องจักร (ใกล้) จริง ๆ สำหรับวิธีแก้ปัญหาของคุณหรือถ้าเมทริกซ์ของคุณมีขนาดเล็ก (พูดมากถึงแถว) มันยากที่จะเอาชนะวิธีการโดยตรงโดยเฉพาะอย่างยิ่งสำหรับระบบที่หนาแน่น (เนื่องจากในกรณีนี้ จะเป็นO ( n 2 )และหากคุณต้องการการวนซ้ำจำนวนมากสิ่งนี้อาจไม่ไกลจากO ( n 3 )จำเป็นต้องใช้วิธีการโดยตรง) นอกจากนี้การย่อยสลาย LU (ด้วยการหมุน) ทำงานกับเมทริกซ์กลับด้านได้ซึ่งตรงข้ามกับวิธีการทำซ้ำส่วนใหญ่ (แน่นอนถ้าAเป็นสมมาตรและแน่นอนแน่นอนคุณต้องใช้ Cholesky)1000O ( n2)O ( n3)A
สิ่งนี้ก็เป็นจริงสำหรับเมทริกซ์กระจัดกระจาย (ใหญ่) ถ้าคุณไม่พบปัญหาหน่วยความจำ: เมทริกซ์กระจัดกระจายโดยทั่วไปไม่มีการสลายตัว LU กระจัดกระจายและหากปัจจัยไม่พอดีกับหน่วยความจำ (เร็ว) วิธีเหล่านี้จะใช้ไม่ได้
นอกจากนี้วิธีการโดยตรงยังคงมีมาเป็นเวลานานและมีซอฟต์แวร์ที่มีคุณภาพสูงมาก (เช่น UMFPACK, MUMPS, SuperLU สำหรับการฝึกอบรมแบบเบาบาง) ซึ่งสามารถใช้โครงสร้างวงดนตรีของอัตโนมัติA
AA
หากคุณต้องการแก้ระบบเชิงเส้นด้วยเมทริกซ์เดียวกันและด้านขวามือต่าง ๆ ซ้ำ ๆ วิธีการโดยตรงยังคงเร็วกว่าวิธีการทำซ้ำเนื่องจากคุณต้องคำนวณการสลายตัวเพียงครั้งเดียว (ซึ่งถือว่าเป็นวิธีแก้ปัญหาตามลำดับหากคุณมีด้านขวาทั้งหมดในเวลาเดียวกันคุณสามารถใช้วิธีการบล็อก Krylov)
แน่นอนว่าสิ่งเหล่านี้เป็นเพียงแนวทางคร่าวๆ: สำหรับข้อความใด ๆ ข้างต้นอาจมีเมทริกซ์ที่การสนทนาเป็นจริง ...
เมื่อคุณขอการอ้างอิงในความคิดเห็นต่อไปนี้เป็นหนังสือเรียนและเอกสารทบทวนเพื่อให้คุณเริ่มต้นได้ (ทั้งสองอย่างนี้ไม่ครอบคลุม) คำถามนี้กว้างเกินไปและขึ้นอยู่กับปัญหาเฉพาะของคุณมากเกินไป)