อันตรายจากการคำนวณทางคณิตศาสตร์ที่ซับซ้อนในการคำนวณทางวิทยาศาสตร์


11

ผลิตภัณฑ์ภายในที่ซับซ้อนได้สองคำนิยามที่แตกต่างกันตัดสินใจโดยการประชุม: ˉ U Tวีหรือยูทีˉวี ใน BLAS ฉันพบกิจวัตร cdotu, zdotu และ cdotc, zdotc สองรูทีนก่อนหน้านี้คำนวณu t v (ผลิตภัณฑ์ด้านในปลอม!) และรูทีนสุดท้ายสองรายการเชื่อมต่อเวกเตอร์แรกในผลิตภัณฑ์ภายใน นอกจากนี้โดยความหมายอย่างใดอย่างหนึ่ง (ผันUหรือV ) U , V = ¯ วี, ยูยู,โวลต์ยู¯Tโวลต์ยูTโวลต์¯ยูTโวลต์ยูโวลต์ยู,โวลต์=โวลต์,ยู¯ด้วยการผัน! ยิ่งไปกว่านั้นตามที่ระบุไว้ในความคิดเห็นการเลือกค่าหลักสำหรับฟังก์ชันที่ซับซ้อนหลายค่าสามารถขึ้นอยู่กับการประชุม

คำถามของฉันคือ: ภาวะแทรกซ้อนนี้ทำให้เกิดอันตรายที่แท้จริงสำหรับการใช้เลขคณิตที่ซับซ้อนในการคำนวณทางวิทยาศาสตร์หรือไม่? ปัญหานี้จะเน้นโดยผู้เขียนของ deal.ii ที่แนะนำให้แบ่งตัวเลขที่ซับซ้อนเป็นส่วนจริงและส่วนจินตภาพและใช้เลขคณิตจริงเท่านั้น แต่ฉันไม่เคยพบวิธีการแยกที่สะดวก ตัวอย่างเช่นลองคิดถึงPMLสำหรับสมการของ Maxwell แบบประสานเวลา

ดูเหมือนว่าการใช้ตัวเลขที่ซับซ้อนนั้นเป็นที่แพร่หลายในซอฟต์แวร์ FEM โอเพนซอร์สส่วนใหญ่ยกเว้น FreeFem ++ และ libmesh แต่สำหรับข้อยกเว้นสองข้อนั้นการคำนวณทางคณิตศาสตร์ที่ซับซ้อนจะถูกทดสอบน้อยกว่าของจริง

คำถามสุดท้ายของฉันคือ: เราจะหลีกเลี่ยงการใช้จำนวนเชิงซ้อนหรือไม่?


3
-1ผม-ผม

@hardmath ขอบคุณ! ฉันเพิ่มเข้าไปในคำถาม
Hui Zhang

@hardmath: "ตัวอย่างชุดทดสอบขนาดเล็ก" - ในห้องสมุดส่วนใหญ่ที่ใช้การดำเนินงานพีชคณิตเชิงเส้นอย่างครอบคลุมอาจมีหลายสิบหรือหลายร้อยแห่งที่มีการใช้ผลิตภัณฑ์ภายใน ต้องใช้การทดสอบหลายร้อยครั้งเพื่อตรวจสอบความถูกต้องอาจใช้เวลาหลายเดือนในการดำเนินการอย่างถูกต้อง แน่นอนว่าเป็นไปไม่ได้และห้องสมุดบางแห่งก็ทำเช่นนั้น มันเป็นงานจำนวนมากและไม่ใช่ผู้เขียนห้องสมุดทุกคนที่มั่นใจว่าพวกเขาเข้าใจถูกต้อง :-(
Wolfgang Bangerth

@ WolfgangBangerth บางทีคุณสามารถอธิบายการตัดสินใจจัดการ design.ii?
Bill Barth

3
เราจะหลีกเลี่ยงการใช้ตัวเลขที่ซับซ้อนได้หรือไม่ ได้โปรดไม่ใช่ ฉันเชื่อว่านักวิทยาศาสตร์การคำนวณทุกคนต้องการการแยกย่อยค่าลักษณะเฉพาะที่ไม่สมดุล
Federico Poloni

คำตอบ:


2

คุณบอกว่าปัญหาเกี่ยวกับเลขคณิตที่ซับซ้อนคือมีวิธีการกำหนดผลิตภัณฑ์สเกลาร์ที่หลากหลายสำหรับเวกเตอร์ที่ซับซ้อนเมื่อเปรียบเทียบกับวิธีเดียวในกรณีจริง ฉันคิดว่าปัญหาที่แท้จริงของผลิตภัณฑ์สเกลาร์เชิงซ้อนนั้นเป็นอีกปัญหาหนึ่งซึ่งเกี่ยวข้องกับการสังเกตของคุณอย่างใกล้ชิด

ในการคำนวณทางคณิตศาสตร์ที่ซับซ้อนลำดับของข้อโต้แย้งของผลิตภัณฑ์สเกลาร์นั้นมีความสำคัญในขณะที่ในการคำนวณทางคณิตศาสตร์ที่แท้จริงพวกเขาไม่ได้ทำ อัลกอริธึมหลายอย่างนั้นเหมือนกันในทางคณิตศาสตร์ที่ซับซ้อนและจริงซึ่งหมายความว่าคุณเพียงแค่ต้องเขียนมันครั้งเดียวแล้วใช้รหัสเดียวกันสำหรับความซับซ้อนและคณิตศาสตร์จริง (ตัวอย่างเช่นใน C ++ คุณสามารถใช้เทมเพลตเพื่อจุดประสงค์นี้) เมื่อคุณเขียนโค้ดเสร็จแล้วคุณมักจะทดสอบมัน ในการเปิดเผยข้อผิดพลาดในการเรียงลำดับอาร์กิวเมนต์ในผลิตภัณฑ์สเกลาร์บางรายการคุณต้องทดสอบโค้ดของคุณด้วยเคสทดสอบที่มีมูลค่าซับซ้อน

คุณมักจะได้รับรหัสมูลค่าจริงสำหรับอัลกอริทึมฟรีเมื่อคุณมีรหัสที่ใช้งานได้สำหรับปัญหาที่มีมูลค่าซับซ้อน เมื่อคุณทดสอบโค้ดของคุณด้วยกรณีทดสอบที่ซับซ้อนค่ารหัสมักจะถูกต้องสำหรับตัวเลขจริง การเปลี่ยนรหัสที่มีมูลค่าจริงให้กลายเป็นรหัสที่ซับซ้อนต้องใช้งานเพิ่มเติม ดังนั้นจึงมีเพียงรหัสเพิ่มเติมที่ใช้งานได้ (และผ่านการทดสอบอย่างละเอียด) สำหรับมูลค่าจริงมากกว่าสำหรับปัญหามูลค่าที่ซับซ้อน

คำถามของฉันคือ: ภาวะแทรกซ้อนนี้ทำให้เกิดอันตรายที่แท้จริงสำหรับการใช้เลขคณิตที่ซับซ้อนในการคำนวณทางวิทยาศาสตร์หรือไม่?

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

คำถามสุดท้ายของฉันคือ: เราจะหลีกเลี่ยงการใช้จำนวนเชิงซ้อนหรือไม่?

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


-1

เอกสารนี้มีความเกี่ยวข้อง:

สาขาตัดสำหรับฟังก์ชั่นระดับประถมศึกษาหรือความกังวลใจมากเกี่ยวกับบิตเครื่องหมายไม่มีอะไร

http://people.freebsd.org/~das/kahan86branch.pdf


5
ยินดีต้อนรับสู่ SciComp! บางทีคุณสามารถอธิบายเพิ่มเติมเกี่ยวกับสาเหตุที่กระดาษเชื่อมโยงคุณมีความเกี่ยวข้อง? บทสรุปจะทำให้คำตอบของคุณมีค่ามากขึ้นและมีแนวโน้มที่จะถูกโหวตมากขึ้น เรามักจะไม่สนับสนุนคำตอบที่เพิ่มลิงก์โดยไม่มีบริบทเพียงพอ
Geoff Oxberry
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.