จะระบุการคำนวณจุดลอยตัวที่ไม่เสถียรได้อย่างไร?


15

ในตัวเลขมันเป็นสิ่งสำคัญมากที่จะสามารถระบุรูปแบบที่ไม่เสถียรและเพื่อปรับปรุงเสถียรภาพของพวกเขา จะระบุการคำนวณจุดลอยตัวที่ไม่เสถียรได้อย่างไร?

ฉันกำลังทำงานกับการจำลองที่ซับซ้อนมากซึ่งมีรูปแบบตัวเลขจำนวนมากทำงานร่วมกันและฉันกำลังมองหาวิธีการระบุส่วนที่อ่อนแอของมัน ฉันกำลังทำงานกับแบบจำลองทางกายภาพที่เกี่ยวข้องกับสมการเชิงอนุพันธ์ มุมมองตานกของกระบวนการโดยรวมคือ:

  1. (Preliminary ขั้นตอน) รวบรวมข้อสังเกตทางกายภาพP

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

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

  4. ในตอนท้ายของการจำลองเราคำนวณฟังก์ชั่นProof (S)ของสถานะSสุดท้ายและเปรียบเทียบกับปริมาณที่ต้องการ (P) ซึ่งอนุมานได้จากปริมาณที่สังเกตได้ นี่ไม่ใช่หลักฐานที่เป็นทางการของผลการตรวจสอบความน่าเชื่อถือมากขึ้น

นอกจากนี้ฉันยังเห็นหอคอยแห่งการดำเนินงานที่ซับซ้อน (การคำนวณคำศัพท์ไดนามิกภายในโครงการออยเลอร์ภายในหลักฐาน ) และต้องการรับรู้“ ส่วนที่ไม่ดี” และแก้ไขได้

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

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


อาจเป็นได้ว่าคุณจะได้คำตอบที่น่าสนใจมากขึ้นในmath.stackexchange.com
Simon Bergot

@Simon คุณอาจพูดถูก แต่นี่เป็นคำถามข้ามโดเมนแน่นอน ฉันเดาว่าคนที่สามารถตอบได้นั้นจะได้รับการลงทะเบียนทั้งทางคณิตศาสตร์และโปรแกรมเมอร์หรือไม่เลย ... ลองมาดูกันก่อนว่าคำถามนี้หาคำตอบได้ที่นี่หรือไม่!
user40989

1
ช่วงเลขคณิต?
SK-logic


2
การใช้ออยเลอร์เพื่อเผยแพร่สถานะไม่จำเป็นต้องชั่วร้าย ไม่ใช่การเพิ่มประสิทธิภาพ แต่คุณต้องแยกปัญหาออกเป็นงานย่อย ความไม่แน่นอนเชิงตัวเลขอาจจะเป็นสิ่งที่ต่ำที่สุดของคุณ - การบรรจบกับจำนวนสูงสุดที่ผิดพลาดและปัญหาที่เกี่ยวข้องกับความฝืดของ ODEs / PDEs มีขนาดใหญ่กว่านั้น และใช่ไม่เคยใช้ความแม่นยำเดียว :)
Deer Hunter

คำตอบ:


6

การศึกษาความมั่นคงของการคำนวณจุดลอยตัวเป็นส่วนหนึ่งของการวิเคราะห์เชิงตัวเลขและถ้าคุณต้องการผลลัพธ์ที่ดีจริงๆคุณต้องการให้ใครสักคนที่มีความรู้ในโดเมนนั้นทำการวิเคราะห์อัลกอริธึมที่ใช้

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

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


3

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

นิวเจอร์ซีย์ไฮ ความแม่นยำและความเสถียรของอัลกอริธึมเชิงตัวเลข. สมาคมอุตสาหกรรมและคณิตศาสตร์ประยุกต์ฟิลาเดลเฟียเพนซิลเวเนียสหรัฐอเมริการุ่นที่สอง 2545 ไอ 0-89871-521-0

ไม่รู้เพิ่มเติมเกี่ยวกับประเภทของการคำนวณภาษา ฯลฯ ทำให้ยากที่จะให้คำตอบที่เป็นรูปธรรม มีการบรรยายที่ดีอยู่ที่นี่: http://introcs.cs.princeton.edu/java/91float/นี่อาจเป็นพื้นฐานเล็กน้อย แต่เป็นการแนะนำที่ดีถ้าคุณใช้จาวา


1

จะระบุการคำนวณจุดลอยตัวที่ไม่เสถียรได้อย่างไร? นี่เป็นเทคนิคทั่วไปในการตรวจสอบคำถามนี้หรือไม่?

ฉันคิดว่าหากคุณไม่ต้องการแสดงสถิติข้อผิดพลาดคุณไม่จำเป็นต้องรวบรวมตัวอย่าง สิ่งที่คุณต้องการคือการวิเคราะห์เชิงตัวเลขซึ่งอยู่ภายใต้หัวข้อของวิธีการเชิงตัวเลข, พีชคณิตเชิงเส้นเชิงตัวเลข ฯลฯ และพวกเขาเป็นส่วนหนึ่งของวิทยาศาสตร์คอมพิวเตอร์ดังนั้นคุณอาจได้รับคำตอบบางอย่างใน cs.stackexchange

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

  1. ใช้จุดลอยตัวเพื่อคำนวณค่าเงิน
  2. ใช้จุดลอยตัวสำหรับตัวเลขขนาดใหญ่
  3. ไม่ทำการแบ่งเขตก่อนการดำเนินการอื่นเมื่อเป็นไปได้ (เพื่อทำให้ค่าใกล้เคียงกับ 0)
  4. การคำนวณที่ยาวนานโดยไม่มีการดูแลเป็นพิเศษสำหรับการแพร่กระจายข้อผิดพลาด

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


ขอบคุณสำหรับคำตอบของคุณ แต่ฉันกำลังมองหาข้อมูลรายละเอียดเพิ่มเติม ฉันมีการคำนวณขนาดใหญ่มากและต้องการระบุส่วนที่อ่อนแอของมัน ฉันแก้ไขคำถามตามนั้น
user40989

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

0

คุณสามารถหลีกเลี่ยงข้อผิดพลาดเชิงตัวเลขโดยใช้ชนิดข้อมูลที่เหมาะสม (เช่นเศษส่วนต่อเนื่อง) หากคุณต้องการหรือต้องการใช้เลขทศนิยมคุณต้องใช้ความรู้เชิงตัวเลขเพื่อทราบข้อผิดพลาด


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

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