หนึ่งจะทดสอบการใช้งานตัวแก้ ODE เชิงตัวเลขได้อย่างไร


26

ฉันกำลังจะเริ่มต้นทำงานกับห้องสมุดซอฟต์แวร์ของตัวแก้ ODE ที่เป็นตัวเลขและฉันกำลังดิ้นรนกับวิธีการสร้างแบบทดสอบสำหรับการใช้งานตัวแก้ปัญหา ความใฝ่ฝันของฉันอยู่ที่ห้องสมุดในที่สุดจะรวมถึงการแก้สำหรับทั้งปัญหา nonstiff และแข็งและอย่างน้อยหนึ่งแก้นัย (มากหรือน้อยในหุ้นที่มีความสามารถของกิจวัตรใน Matlab ) เพื่อตอบสนองความต้องการวิธีการทดสอบเพื่อสะท้อนให้เห็นถึงต่างๆ ประเภทของปัญหาและเกณฑ์สำหรับนักแก้ปัญหาต่าง ๆode

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

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

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

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

    ในทางกลับกันวิธีนี้ใช้ทดสอบอัลกอริธึมซึ่งใช้ได้กับฉัน - ถ้ามีคนอื่นพิสูจน์ว่าลำดับที่ 4 ที่Runge-Kutta ทำงานได้ฉันก็ไม่รู้สึกว่าจำเป็นต้องสิ้นหวัง อย่างไรก็ตามฉันกังวลว่ามันจะยุ่งยากมากในการสร้างกรณีทดสอบเนื่องจากฉันไม่รู้วิธีการที่ดีในการสร้างข้อมูลทดสอบ (ยกเว้นอาจใช้มือซึ่งจะทำงานมาก ... )

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

มีวิธีอื่นในการตรวจสอบตัวแก้ ODE ที่เป็นตัวเลขหรือไม่ มีเกณฑ์อื่น ๆ เกี่ยวกับการใช้งานที่ควรได้รับการตรวจสอบหรือไม่? จะมีผู้ใดที่ดี (ฟรี) แหล่งข้อมูลเกี่ยวกับการทดสอบการแก้ ODE ออกมี1 ?

แก้ไข:
เนื่องจากคำถามนี้กว้างมากฉันต้องการชี้แจงเล็กน้อย ชุดทดสอบที่ฉันต้องการสร้างจะมีวัตถุประสงค์หลักสองข้อ:

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

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


1ใช่ฉัน Googling ออกไปแล้ว แต่สิ่งที่ฉันพบส่วนใหญ่คือบันทึกการบรรยายพร้อมตัวอย่างที่น่าสนใจมากยกเว้นข้อสังเกตที่น่าทึ่งของชุดการทดสอบ CWI ODE จากบารีซึ่งฉันไม่รู้ว่าเป็นอย่างไรหรืออย่างไรฉัน สามารถใช้เพื่อจุดประสงค์ของฉันเนื่องจากเป็นนักแก้ปัญหาที่ซับซ้อนกว่าที่ฉันต้องการทดสอบ ...


2
@ user75064: อย่างแน่นอน! ฉันไม่รู้ว่าไซต์นั้นมีอยู่จริง =) โมเดอเรเตอร์ใด ๆ โปรดโยกย้ายฉันไปที่นั่น
Tomas Aschan

มีการเชื่อมโยงไปยังชุดทดสอบอื่น ๆ ในคำตอบเกี่ยวกับเรื่องนี้เป็นคณิตศาสตร์ Stack แลกเปลี่ยน
Geoff Oxberry

@GeoffOxberry: ฉันเคยพบมาหลาย ๆ อันมาก่อน ส่วนใหญ่ของพวกเขาจะดำเนินการใน FORTRAN และสมมติว่าผู้อ่านต้องการทดสอบนักแก้ปัญหาในภาษาเดียวกันซึ่งเพิ่มแหล่งที่มาของข้อผิดพลาดอื่น ... อย่างไรก็ตามคู่ (บทความในชุด DETEST) พิสูจน์แล้วว่ามีประโยชน์จริง ๆ ขอบคุณมาก!
Tomas Aschan

คำตอบ:


12

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

ขอบเขตของปัญหา

  • คุณต้องกำหนดอินเทอร์เฟซของวิธีการระบุปัญหา
  • คุณจะอนุญาตให้พารามิเตอร์ที่สามารถแก้ไขได้หรืออาจแตกต่างกันไปสำหรับการแก้ปัญหา?
  • ε
  • คุณจะให้ความแม่นยำไม่สิ้นสุดหรือไม่
  • คุณจะทดสอบความเร็วและความไวต่อความแม่นยำเชิงตัวเลขหรือไม่?
  • คุณได้เลือกห้องสมุดสองแห่ง (อาจมากกว่า) ที่มีอยู่แล้วเพื่อเปรียบเทียบผลลัพธ์หรือไม่
  • คุณจะเลือกเกณฑ์การหยุดคุณจะใช้วิธีการต่าง ๆ และให้ผู้ใช้เลือกหรือกำหนดเอง
  • คุณจะวัดข้อผิดพลาดโดยใช้มาตรการต่างๆและอนุญาตให้ผู้ใช้เปิดและปิดหรือไม่
  • คุณเคยดูแพ็คเกจระดับมืออาชีพเช่น Computer-Algebra-Systems (CAS) และเข้าใจตัวเลือกทั้งหมดที่อนุญาตหรือไม่?
  • คุณจะอนุญาตให้แสดงผลและ / หรือการเปรียบเทียบและ / หรือแปลงหรือไม่?

คำแนะนำปัญหา

  • คุณต้องเขียนข้อมูลจำเพาะของการทดสอบที่กำหนดแหล่งที่มาของปัญหาขอบเขตของวิธีการทดสอบปัญหาจับผลลัพธ์และตัวชี้วัดของการทำงานประจำ
  • แน่นอนฉันจะดูห้องสมุดอื่น ๆ ที่มีอยู่แล้วสำหรับปัญหาที่พวกเขาใช้ (อาจทดสอบไฟล์)
  • ฉันจะไปที่ห้องสมุดของวิทยาลัยและอ่านหนังสือเกี่ยวกับ ODE และดึงปัญหาทุกประเภทออกมาผู้ที่มีรูปแบบปิดหรือรู้วิธีแก้ปัญหาตัวเลขเท่านั้น
  • กรณีที่ 1: เราต้องการปัญหาการแก้ปัญหาแบบปิดหลายรูปแบบที่เราจะได้รับเพื่อเปรียบเทียบผลลัพธ์ที่แน่นอนกับตัวเลข
  • กรณีที่ 2: ฉันจะไปที่หนังสือการวิเคราะห์เชิงตัวเลขทุกเล่มที่ฉันสามารถค้นหาและจับภาพตัวอย่างการทำงานและทำซ้ำพวกเขา ฉันจะจับชุดปัญหาเพิ่มเติมโดยเฉพาะอย่างยิ่งสิ่งที่มีพยาธิวิทยาบางอย่างที่มีอยู่ในหนังสือส่วนใหญ่ (ความไวต่อสิ่งนี้หรือประเภทนั้น)
  • กรณีที่ 3: ฉันจะไปวิชาคณิตศาสตร์ประยุกต์สาขาฟิสิกส์ฟิสิกส์นิเวศวิทยาเศรษฐศาสตร์เศรษฐศาสตร์และอื่น ๆ และจับปัญหาจากแต่ละโดเมนเหล่านั้นเพื่อตรวจสอบว่าภาษาสเปคของคุณสำหรับปัญหาช่วยให้ตัวอย่างเช่น
  • กรณีที่ 4: ฉันจะวิจัยเอกสาร / วารสารที่มีตัวอย่างที่มีประโยชน์ที่สุดที่ผู้เขียนคนนั้นต้องปรับเปลี่ยนวิธีการเฉพาะสำหรับบัญชีสำหรับพยาธิวิทยาหรือความแปลกประหลาดหรือความแข็ง
  • กรณีที่ 5: ค้นหาเว็บสำหรับตัวอย่างเพิ่มเติม สำหรับความแข็งดูการอ้างอิงที่นี่และอ่านพวกเขาทั้งหมดเพื่อค้นหาปัญหาการทดสอบ นี่คือตัวอย่างMATLABที่จะอ่าน

มันไม่ซ้ำกัน หากคุณดูหนังสือ "วิธีการเชิงตัวเลขสำหรับการปรับให้เหมาะสมแบบไม่ จำกัด และสมการไม่เชิงเส้น" โดย Dennis and Schnabel, ภาคผนวก B, "ปัญหาการทดสอบ" คุณสามารถดูวิธีที่พวกเขาทำ หลังจากพัฒนาชุดอัลกอริทึมที่สวยที่สุดชุดหนึ่งที่ฉันเคยเห็นมาพวกเขาก็รวบรวมปัญหาที่เกิดขึ้นถ้าทำถั่ว คุณต้องปรับแต่งที่นี่และที่นั่น! พวกเขารวมห้าปัญหาที่แตกต่างกันมากและพยาธิสภาพที่ทำให้ความสามารถของนักแก้เครียดลดลง สิ่งนี้สอนฉันว่าเราสามารถดำเนินการต่อไปเพื่อแก้ไขปัญหาตามขั้นตอนวิธีที่พวกเขาไม่สามารถจัดการได้ด้วยเหตุผลหลายประการ หมายเหตุพวกเขายังยืมชุดของปัญหาจาก More ', Garbow และ Hillstrom (คุณสามารถค้นหาการอ้างอิงนั้นและอาจมีคนอื่น ๆ ที่คุณสามารถใช้เป็นแนวทาง)

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


2

หนึ่งการตรวจสอบสติที่ฉันทำงานกับตัวแก้ ODE ของฉันคือการตรวจสอบบนระบบเชิงเส้นที่เล็กกว่าผ่านการคำนวณเลขชี้กำลังของเมทริกซ์ของระบบ เช่นที่ได้รับ

dยูdเสื้อ=Aยู

ตรวจสอบข้อผิดพลาดใน

ประสบการณ์(เสื้อA)ยู0-ยู^(เสื้อ)

ยู^(เสื้อ)

อย่าคำนวณเลขชี้กำลังด้วยหนึ่งในเครื่องมือจับเวลาของคุณ (เช่นวิธีที่น่าสงสัยหมายเลข 6 :) http://www.cs.cornell.edu/cv/researchpdf/19ways+.pdf )


เพียงทราบ: ผู้ประกอบการ DE ถือว่า "น่าสงสัย" ในการที่พวกเขาค่อนข้างไม่มีประสิทธิภาพเมื่อเทียบกับสเกล + กำลังสองไม่ใช่เพราะความไม่ถูกต้อง
JM

1

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

http://prod.sandia.gov/techlib/access-control.cgi/2000/001444.pdf

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