ในการคำนวณเลขทศนิยมทำไมความคลาดเคลื่อนตัวเลขเป็นผลมาจากการเพิ่มคำเล็ก ๆ ให้กับข้อตกลงที่มีขนาดใหญ่


13

ฉันอ่านหนังสือComputer Simulation of Liquidsโดย Allen และ Tildesley ผู้เขียนเริ่มจากหน้า 71 ผู้เขียนอภิปรายอัลกอริทึมต่าง ๆ ที่ใช้เพื่อรวมสมการการเคลื่อนที่ของสมการของนิวตันในการจำลองโมเลกุล (MD) ผู้เริ่มต้นในหน้า 78 ผู้เขียนอภิปรายอัลกอริทึม Verlet ซึ่งอาจเป็นอัลกอริทึมการรวมแบบบัญญัติใน MD พวกเขาระบุ:

บางทีวิธีการที่ใช้กันอย่างแพร่หลายในการรวมสมการการเคลื่อนที่ก็คือการนำ Verlet (1967) มาใช้ในตอนแรกและนำมาประกอบกับ Stormer (Gear 1971) วิธีนี้เป็นวิธีการแก้ปัญหาโดยตรงของสองเพื่อสมmir¨i=fiฉัน วิธีนี้ขึ้นอยู่กับ postions r(t) , การเร่งความเร็วa(t)และตำแหน่งr(tδt)จากขั้นตอนก่อนหน้า สมการสำหรับการเลื่อนตำแหน่งอ่านดังนี้:

(3.14)r(t+δt)=2r(t)r(tδt)+δt2a(t).

มีหลายจุดที่ควรทราบเกี่ยวกับ eqn (3.14) จะเห็นได้ว่าความเร็วนั้นไม่ปรากฏเลย พวกมันถูกกำจัดโดยการเพิ่มสมการที่ได้จากการขยายตัวของเทย์เลอร์เกี่ยวกับr(t) :

r(t+δt)=r(t)+δtv(t)+(1/2)δt2a(t)+...

(3.15)r(tδt)=r(t)δtv(t)+(1/2)δt2a(t)....

จากนั้นในภายหลัง (ในหน้า 80) ผู้เขียนระบุ:

เทียบกับอัลกอริทึม Verlet, ... รูปแบบของอัลกอริทึมอาจไม่จำเป็นต้องแนะนำตัวเลขบางอย่างโดยไม่จำเป็น นี้เกิดขึ้นเพราะในสมการ (3.14) ซึ่งเป็นระยะขนาดเล็ก ( ) จะมีการเพิ่มความแตกต่างของคำที่มีขนาดใหญ่ ( O ( δ T 0 ) ) เพื่อสร้างวิถี O(δt2)O(δt0)

ฉันเดาว่า "คำเล็ก" เป็นและ "ความแตกต่างของคำใหญ่" เป็น2 R ( T ) - R ( T - δ T )δt2a(t)2r(t)r(tδt)

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

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

คำตอบ:


9

การสังเกตรูปแบบของอัลกอริทึมนั้นอาจไม่จำเป็นต้องแนะนำตัวเลขที่ไม่ถูกต้อง แต่คำอธิบายของพวกเขา '' สิ่งนี้เกิดขึ้นเพราะใน eqn (3.14) คำเล็ก ๆ ( ) ถูกเพิ่มเข้าไปในความแตกต่างของคำศัพท์ขนาดใหญ่ ( ) เพื่อสร้างวิถี '' ปลอมO(δt2)O(δt0)

เหตุผลที่แท้จริงสำหรับความไม่แน่นอนเชิงตัวเลขเล็กน้อยของอัลกอริธึมของ Verlet ก็คือมันคงที่เพียงเล็กน้อยเนื่องจากสมการความแตกต่าง (โดยหลักแล้วกรณีที่คุณละเลย Verlet) คำตอบของกาฝากเป็นสัดส่วนกับซึ่งทำให้เกิดข้อผิดพลาดขึ้นในเชิงเส้นในขณะที่สำหรับวิธีการหลายขั้นตอนที่มีเสถียรภาพอย่างเต็มที่นำไปใช้กับสมการเชิงอนุพันธ์แบบกระจาย, การเติบโตของข้อผิดพลาดถูก จำกัด ขอบเขต a k kxk+1=2xkxk1akk

แก้ไข: โปรดทราบว่าหนังสือเล่มนี้เกี่ยวกับการจำลองเชิงตัวเลขของการเปลี่ยนแปลงระดับโมเลกุลและเพื่อให้ได้ความถูกต้องที่สมเหตุสมผลของความคาดหวังที่เกิดขึ้นเราต้องมีจำนวนขั้นตอนจำนวนมากเนื่องจากความแม่นยำของมาตราส่วนด้วยเท่านั้น . (บ่อยครั้งที่ขั้นตอนอยู่ใน picoseconds ตามมาตราส่วนการสั่นภายใน แต่ช่วงเวลาที่เกี่ยวข้องทางชีววิทยาอยู่ในหน่วยมิลลิวินาทีหรือใหญ่กว่า ( ) แต่โดยทั่วไปแล้วคนเราจะไม่คำนวณว่าไกลมาก)O ( N - 1 / 2 ) N ~ 10 9NO(N1/2)N109

สำหรับรายละเอียดเพิ่มเติมดูที่ http://en.wikipedia.org/wiki/Linear_multistep_method#Stability_and_convergence


10

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

หากคุณมีห้องสมุดที่ดีผมขอแนะนำให้ไมเคิลโอเวอร์ตัวเลข Computing กับ IEEE Floating Point เลขคณิตหรือไม่กี่ครั้งแรกบทของนิคฮิกคั่มของความถูกต้องและความมั่นคงของตัวเลขอัลกอริทึม

สิ่งที่อัลเลนและ Tildesley จะหมายถึงเฉพาะเป็นตัวเลขการยกเลิก ระยะสั้นของมันก็คือว่าถ้าคุณมีการพูดเพียงตัวเลขสามหลักและคุณลบ100จาก101คุณจะได้รับ1.00(ในตัวเลขสามหลัก) ตัวเลขดูเหมือนว่าจะมีความถูกต้องถึงสามหลัก แต่ที่จริงแล้วมีเพียงตัวเลขแรกเท่านั้นที่เป็นจริงและส่วนท้าย.00เป็นขยะ ทำไม? ทีนี้100และ101มันก็เป็นเพียงตัวแทนที่ไม่แน่นอนของพูด100.12345และ101.4321แต่คุณสามารถเก็บไว้เป็นตัวเลขสามหลัก


δtr(\tδt)r(t)r(t)=1

@ArnoldNeumaier: ใช่ตัวอย่างของอัลเลนและ Tildesley ดูเหมือนจะไม่สมเหตุสมผลฉันแค่ต้องการอ้างอิงบางอย่างสำหรับปัญหาที่เกิดขึ้นเมื่อ "คำเล็ก ๆ [.. ] ถูกเพิ่มลงในความแตกต่างของคำศัพท์ขนาดใหญ่" ซึ่งเป็นสิ่งที่ OP ถามไม่ว่าจะเป็นปัญหาในกรณีที่กำหนดหรือไม่
เปโดร

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

@ ArnoldNeumaier: เป็นฉันคิดว่าค่อนข้างชัดเจนจากคำตอบของฉันฉันหมายถึงปัญหาการคำนวณความแตกต่างไม่ใช่ผลรวม
Pedro

1
@ArnoldNeumaier: จุดที่นำมา แต่ฉันหวังว่าคุณจะเข้าใจว่าฉันคิดว่าเล็กน้อยสำหรับ "-1"
เปโดร

5

(3.14)

r(t)=101
r(tδt)=100
δt2a(t)=1.49

(3.14)

r(t+δt)=103.49

แต่เนื่องจากเราสามารถใช้ตัวเลขสามหลักเท่านั้นผลที่ได้จะถูกปัดเศษเป็น

r(t+δt)=103

a(t)r(t+20δt)=331433.90


แต่เอฟเฟ็กต์นั้นใหญ่ในเลขทศนิยม 3 หลักเท่านั้น
Arnold Neumaier

3

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

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


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

-1: โดยทั่วไปสูตร Verlet จะรักษาความถูกต้องของตัวเลขทั้งหมดไม่ใช่แค่ 1 หรือ 2 จาก 8 ในความแม่นยำเดียว
Arnold Neumaier

@ArnoldNeumaier: แน่นอนว่าคุณสามารถรับปัญหาแบบเดียวกันได้ด้วยความแม่นยำสองเท่า ทั้งหมดที่ฉันพูดคือไม่พบพวกเขาค่อนข้างบ่อย
Wolfgang Bangerth

หากคุณสูญเสีย 6 หลักสามครั้งในสายการคำนวณคุณสูญเสียตัวเลขทั้งหมดแม้ในความแม่นยำสองเท่า อัลกอริทึมที่ทุกข์ทรมานจากการยกเลิกมักจะไม่ดีแม้จะมีความแม่นยำสองเท่า อัลกอริธึมของ Verlet นั้นแตกต่างกันเนื่องจากไม่มีการยกเลิก แต่มีข้อผิดพลาดเพิ่มขึ้นเล็กน้อย ดังนั้นการสูญเสียความแม่นยำจึงไม่สามารถทวีคูณทำให้เหมาะสำหรับการรวมนานกว่ามาก นี่เป็นที่รู้กันว่า Allen & Tildesley
Arnold Neumaier

ขวา. แต่สิ่งที่ฉันหมายถึงคือถ้าคุณมีอัลกอริทึมโดยไม่มีการยกเลิกคุณยังคงมีข้อผิดพลาดตามลำดับ 1e-8 ในความแม่นยำเดียวและถ้าคุณทำตามขั้นตอนเวลา 1e8 คุณอาจมีปัญหาแม้ว่าทุกอย่างจะแน่นอน 1e8 step time เป็นลำดับความสำคัญที่คุณอาจมีสำหรับ ODE ในอีกทางหนึ่งด้วยความแม่นยำสองเท่าความไม่ถูกต้องของคุณในแต่ละขั้นตอนคือ 1e-16 และจะต้องใช้เวลา 1e16 ขั้นตอนเพื่อให้สูญเสียความแม่นยำโดยสมบูรณ์ นั่นคือหลายขั้นตอนที่คุณจะไม่ต้องเผชิญในทางปฏิบัติ
Wolfgang Bangerth
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.