พื้นหลังทางคณิตศาสตร์
ให้ A เป็นเมทริกซ์ N คูณ N ของจำนวนจริง, เวกเตอร์ ba ของจำนวนจริง N และเวกเตอร์ xa N ไม่ทราบจำนวนจริง สมการเมทริกซ์คือ Axe = b
วิธีการของ Jacobi มีดังต่อไปนี้: ย่อยสลาย A = D + R โดยที่ D คือเมทริกซ์ของเส้นทแยงมุมและ R คือรายการที่เหลือ
หากคุณสร้างโซลูชันเดาเริ่มต้น x0 โซลูชันที่ได้รับการปรับปรุงคือ x1 = inverse (D) * (b - Rx) โดยการคูณทั้งหมดเป็นการคูณเมทริกซ์เวกเตอร์และอินเวอร์ส (D) เป็นเมทริกซ์ผกผัน
ข้อกำหนดของปัญหา
- อินพุต : โปรแกรมที่สมบูรณ์ของคุณควรยอมรับว่าป้อนข้อมูลต่อไปนี้: เมทริกซ์ A, เวกเตอร์ b, การเดาเริ่มต้น x0 และหมายเลข 'ข้อผิดพลาด' e
- เอาท์พุท : โปรแกรมจะต้องส่งออกจำนวนรอบต่ำสุดของการทำซ้ำเพื่อให้โซลูชั่นล่าสุดแตกต่างจากการแก้ปัญหาที่แท้จริงโดยมากที่สุด e นี่หมายความว่าแต่ละองค์ประกอบของเวกเตอร์ที่มีขนาดสมบูรณ์แตกต่างกันมากที่สุด e คุณต้องใช้วิธีการของ Jacobi สำหรับการทำซ้ำ
วิธีการป้อนข้อมูลเป็นทางเลือกของคุณ ; มันอาจเป็นไวยากรณ์ของคุณเองในบรรทัดคำสั่งคุณสามารถรับอินพุตจากไฟล์อะไรก็ได้ที่คุณเลือก
คุณเลือกเอาท์พุทข้อมูลอย่างไร มันสามารถเขียนลงในไฟล์ที่แสดงในบรรทัดคำสั่งเขียนเป็นศิลปะ ASCII ทุกอย่างตราบเท่าที่มนุษย์สามารถอ่านได้
รายละเอียดเพิ่มเติม
คุณไม่ได้รับโซลูชันที่แท้จริง: วิธีคำนวณโซลูชันที่แท้จริงนั้นขึ้นอยู่กับคุณทั้งหมด คุณสามารถแก้ไขได้โดยกฎของ Cramer เช่นหรือคำนวณคำผกผันโดยตรง สิ่งที่สำคัญคือคุณมีทางออกที่แท้จริงเพื่อให้สามารถเปรียบเทียบกับการทำซ้ำได้
ความแม่นยำเป็นปัญหา 'การแก้ปัญหาที่แน่นอน' ของบางคนสำหรับการเปรียบเทียบอาจแตกต่างกัน สำหรับจุดประสงค์ของรหัสนี้กอล์ฟทางออกที่แน่นอนจะต้องเป็นจริงถึงทศนิยม 10 ตำแหน่ง
เพื่อให้มีความชัดเจนอย่างแน่นอนหากองค์ประกอบหนึ่งในโซลูชันการทำซ้ำปัจจุบันของคุณเกินกว่าองค์ประกอบที่เกี่ยวข้องในโซลูชันที่แท้จริงโดย e คุณจะต้องทำการวนซ้ำ
ขีด จำกัด สูงสุดเป็น N แตกต่างกันไปตามฮาร์ดแวร์ที่คุณใช้และเวลาที่คุณยินดีจ่ายในการใช้งานโปรแกรม สำหรับจุดประสงค์ของกอล์ฟรหัสนี้ให้ถือว่า N สูงสุด 50
ปัจจัยพื้นฐาน
เมื่อโปรแกรมของคุณถูกเรียกใช้คุณมีอิสระที่จะคิดว่าสิ่งเหล่านี้มีอยู่ตลอดเวลา:
- N> 1 และ N <51 นั่นคือคุณจะไม่ได้สมการสเกลาร์มาเป็นสมการเมทริกซ์เสมอ
- อินพุตทั้งหมดอยู่เหนือสนามจำนวนจริงและจะไม่ซับซ้อน
- เมทริกซ์ A เป็นวิธีการที่แปรเปลี่ยนเป็นวิธีแก้ปัญหาที่แท้จริงเสมอซึ่งคุณสามารถค้นหาจำนวนซ้ำเพื่อลดข้อผิดพลาด (ตามที่กำหนดไว้ด้านบน) ด้านล่างหรือเท่ากับ e
- A ไม่เคยเป็นศูนย์เมทริกซ์หรือเมทริกซ์เอกลักษณ์นั่นคือมีวิธีแก้ปัญหาเดียว
กรณีทดสอบ
A = ((9, -2), (1, 3)), b = (3,4), x0 = (1,1), e = 0.04
ทางออกที่แท้จริงคือ (0.586, 1.138) การวนซ้ำครั้งแรกให้ x1 = (5/9, 1), แตกต่างกันมากกว่า 0.04 จากการแก้ปัญหาจริงโดยอย่างน้อยหนึ่งองค์ประกอบ เราพบการวนซ้ำอีกครั้ง, x2 = (0.555, 1.148) ซึ่งแตกต่างน้อยกว่า 0.04 จาก (0.586, 1.138) ดังนั้นผลลัพธ์คือ
2
A = ((2, 3), (1, 4)), b = (2, -1), x0 = (2.7, -0.7), e = 1.0
ในกรณีนี้ทางออกที่แท้จริงคือ (2.2, -0.8) และการเดาเริ่มต้น x0 มีข้อผิดพลาดน้อยกว่า e = 1.0 ดังนั้นเราจึงเอาท์พุท 0 นั่นคือเมื่อใดก็ตามที่คุณไม่จำเป็นต้องทำการวนซ้ำ
0
การประเมินผลการส่ง
นี่คือรหัสกอล์ฟโดยที่ช่องโหว่มาตรฐานทั้งหมดไม่อนุญาต โปรแกรมที่สมบูรณ์ที่สั้นที่สุดที่ถูกต้อง(หรือฟังก์ชัน) คือจำนวนไบต์ต่ำสุดที่ชนะ มันเป็นกำลังใจที่จะใช้สิ่งที่ต้องการ Mathematica ซึ่งห่อขึ้นมากของขั้นตอนที่จำเป็นเป็นหนึ่งในฟังก์ชั่น แต่ใช้ภาษาที่คุณต้องการ