ใน MATLAB ความแตกต่างระหว่าง linsolve และ mldivide คืออะไร


10

ใน matlab ทั้งlinsolveและmldivideใช้สำหรับการแก้ระบบสมการเชิงเส้นในทุกกรณีที่กำหนด

อ่านเอกสารของพวกเขาฉันสงสัยว่าความแตกต่างระหว่างพวกเขาคืออะไร? พวกเขาใช้อัลกอริธึมเดียวกันของการแยกตัวประกอบแบบเมทริกซ์และสามเหลี่ยมในเกือบสามกรณีหรือไม่?

ถ้า A มีคุณสมบัติใน opts, linsolve จะเร็วกว่า mldivide เนื่องจาก linsolve ไม่ได้ทำการทดสอบใด ๆ เพื่อตรวจสอบว่า A มีคุณสมบัติที่ระบุ

mldivide ทำการทดสอบเดียวกันเพื่อตรวจสอบว่า A มีคุณสมบัติพิเศษหรือไม่ หรือ mldivide เพียงแค่ถือว่าพวกเขาเป็นกรณีทั่วไปโดยไม่มีคุณสมบัติพิเศษ

ขอบคุณ!

คำตอบ:


16

ทั้งสองเป็นตัวแก้ปัญหาโดยตรงเพื่อแก้ปัญหาระบบเชิงเส้น (ตรงข้ามกับตัวแก้ซ้ำ ๆ )

mldivideไม่ดำเนินการทดสอบสำหรับในการแก้b โปรดดูคำตอบของ Allan ในกระทู้นี้สำหรับข้อมูลเพิ่มเติม ดูความช่วยเหลือของอัลกอริทึมของ MATLAB ได้ที่นี่AAx=mldivide

mldivideสำหรับเมทริกซ์จตุรัส: ถ้า A เป็นสมมาตรและมีองค์ประกอบขวางจริงบวก MATLAB จะพยายามแยกตัวประกอบ Cholesky หากการแยกตัวประกอบแบบ Cholesky ล้มเหลว MATLAB จะทำการแยกตัวประกอบแบบสมมาตรไม่ จำกัด ถ้า A คือ Hessenberg ด้านบน MATLAB ใช้การกำจัดแบบเกาส์เซียนเพื่อลดระบบให้เป็นเมทริกซ์รูปสามเหลี่ยม ถ้า A เป็นสี่เหลี่ยมจัตุรัส แต่ไม่ใช่สามเหลี่ยมมุมฉาก, สมมาตรและบวกแน่นอนหรือ Hessenberg จากนั้น MATLAB จะทำการแยกตัวเป็นรูปสามเหลี่ยมทั่วไปโดยใช้การแยกตัวประกอบ LU ด้วยการหมุนเป็นบางส่วน

linsolve สำหรับเมทริกซ์จตุรัส: การแยกตัวประกอบ LU ด้วยการหมุนบางส่วน

mldivideและlinsolveสำหรับเมทริกซ์รูปสี่เหลี่ยมผืนผ้า: การแยกตัวประกอบของ QR

ในlinsolveเอกสารช่วยแนะนำในเว็บไซต์ mathworks คุณสามารถหลีกเลี่ยงกระบวนการทดสอบพิเศษ (อัลลันใช้คำว่า "ค่าใช้จ่าย" ในคำตอบของเขา) โดยใช้optsถ้าหากคุณรู้ว่าเป็นอย่างไรล่วงหน้า สำหรับปัญหาใหญ่คุณสามารถประหยัดเวลาได้ ตัวอย่างเช่น:A

opts.POSDEF = true; linsolve(A,b,opts)

จะคืนค่าถ้าคุณรู้ว่าเป็นค่าบวกที่แน่นอนล่วงหน้า อย่างไรก็ตามการเลือกที่ไม่ถูกต้องนำไปสู่ผลลัพธ์ที่ไม่ถูกต้องxAopts

หากตรงตามเกณฑ์ที่กำหนดlinsolveและmldivideใช้กระบวนการแยกตัวประกอบแบบเดียวกัน ตัวอย่างเช่นสำหรับระบบบวกแน่นอนที่มีความหนาแน่นสูงซึ่งเป็นที่พอใจของคุณสมบัติบางอย่างหรือคุณมีระบบที่ overdetermined และทั้งคู่ดำเนินการปรับกำลังสองน้อยที่สุด

นอกจากนี้linsolveยังสามารถดำเนินการคำนวณสัญลักษณ์ สิ่งนี้มีประโยชน์เมื่อคุณมีระบบบ่อนทำลายขนาดเล็กที่มีวิธีแก้ปัญหาจำนวนไม่ จำกัด linsolveช่วยให้คุณสามารถแก้มันเป็นสัญลักษณ์mldivideไม่สามารถทำได้ อย่างไรก็ตามหากตัวแปรไม่ได้ถูกประกาศอย่างเป็นสัญลักษณ์mldivideและlinsolveจะให้ข้อความเตือนเหมือนกัน "เมทริกซ์นั้นเป็นเอกสิทธิ์ของความแม่นยำในการทำงาน"

สุดท้าย แต่ไม่ท้ายสุดlinsolveไม่รองรับระบบแบบเบาบางเช่นเมทริกซ์ต่อไปนี้ (จุดสีฟ้าหมายถึงรายการที่ไม่ใช่ศูนย์) ในขณะที่mldivideสามารถจัดการกับระบบเบาบางได้อย่างมีประสิทธิภาพเมื่อขนาดต่ำกว่า 200k โดย 200k ตัวอย่างกระจัดกระจาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.