ฉันกำลังย้ายรหัสที่มีอยู่จาก MATLAB ไปยัง C ++ และมีระบบเชิงเส้นเพื่อแก้ไข (แทนที่จะเป็นรูปแบบทั่วไปA x = b )
เมทริกซ์นั้นหนาแน่นและอยู่ในรูปแบบทั่วไป แต่ไม่ใหญ่กว่า 1,000x1000 ดังนั้นใน MATLAB คำตอบคือฟังก์ชั่นหรือสัญกรณ์ไปข้างหน้าmrdivide(b,A)
x = b/A;
ฉันจะแก้ไขปัญหานี้ในรหัส C ++ ของฉันโดยใช้รูทีน BLAS และ LAPACK ได้อย่างไร
ฉันคุ้นเคยกับกิจวัตรประจำวัน LAPACK DGESV
ซึ่งจะช่วยแก้x = Bสำหรับx
ดังนั้นหนึ่งคิดว่าฉันต้องทำกิจวัตรบางอย่างโดยใช้ตัวแปลงสัญญาณเมทริกซ์:
แล้วแก้รูปแบบสุดท้ายใช้DGESV
การดำเนินงานในการขนย้ายT (ดังนั้นค่าใช้จ่ายในการเคลื่อนย้ายAและค่าใช้จ่ายในการแก้ไขระบบ)
มีวิธีการที่มีประสิทธิภาพมากกว่าหรือดีกว่าอย่างอื่นหรือไม่?
ฉันทำงานกับเมทริกซ์และคลาสเวกเตอร์รวมถึงการใช้ BLAS จากไลบรารี BOOST uBLAS รวมถึงการผูกเข้ากับรูทีนไลบรารี LAPACK ฉันใช้การตั้งค่านี้สำเร็จสำหรับการดำเนินการอื่นและฉันหวังว่าจะหาวิธีแก้ไขปัญหาเฉพาะสำหรับห้องสมุดเหล่านี้
นอกจากนี้ฉันควรทราบว่าฉันกำลังดำเนินการประเภทนี้เพียงไม่กี่ครั้งในระหว่างการตั้งค่ารหัสดังนั้นประสิทธิภาพจึงไม่เป็นปัญหาที่สำคัญ
บางที MATLAB นี้เอกสารบนmrdivide
จะเป็นประโยชน์สำหรับคนอื่น ๆ
boost::numeric::bindings::lapack::gesvx()
แต่นี่ไม่ใช่ส่วนหนึ่งของคำถามของฉันที่นี่ ถ้าฉันประสบความสำเร็จฉันจะกลับมาพร้อมกับบันทึกเกี่ยวกับวิธีการทำ