เขียนโปรแกรมที่มีอยู่ในตัวเองซึ่งเมื่อได้รับพหุนามและขอบเขตจะพบรากแท้จริงทั้งหมดของพหุนามนั้นไปสู่ข้อผิดพลาดสัมบูรณ์ไม่เกินขอบเขต
ข้อ จำกัด
ฉันรู้ว่า Mathematica และภาษาอื่นอาจมีวิธีแก้ปัญหาแบบสัญลักษณ์เดียวและนั่นก็น่าเบื่อดังนั้นคุณควรยึดติดกับการดำเนินงานดั้งเดิม (การบวกการลบการคูณการหาร)
มีความยืดหยุ่นบางอย่างในรูปแบบอินพุตและเอาต์พุต คุณสามารถรับอินพุตผ่าน stdin หรืออาร์กิวเมนต์บรรทัดคำสั่งในรูปแบบที่สมเหตุสมผล คุณอาจอนุญาตให้ใช้ทศนิยมหรือต้องการให้ใช้การแทนจำนวนตรรกยะ คุณอาจใช้ขอบเขตหรือส่วนกลับของขอบเขตและถ้าคุณใช้จุดลอยตัวคุณอาจสมมติว่าขอบเขตนั้นจะต้องไม่น้อยกว่า 2 ulp พหุนามควรจะแสดงเป็นรายการของสัมประสิทธิ์ monomial แต่มันอาจจะใหญ่หรือเล็ก - endian
คุณต้องสามารถพิสูจน์ได้ว่าทำไมโปรแกรมของคุณถึงใช้งานได้ตลอดเวลา (ปัญหาเชิงตัวเลขแบบโมดูโล) แม้ว่าจะไม่จำเป็นที่จะต้องพิสูจน์หลักฐานแบบอินไลน์
โปรแกรมจะต้องจัดการกับพหุนามด้วยรากซ้ำ
ตัวอย่าง
x^2 - 2 = 0 (error bound 0.01)
อินพุตอาจเป็นเช่น
-2 0 1 0.01
100 1 0 -2
1/100 ; x^2-2
ผลผลิตอาจเป็นเช่น
-1.41 1.42
แต่ไม่
-1.40 1.40
ตามที่มีข้อผิดพลาดแน่นอนประมาณ 0.014 ...
กรณีทดสอบ
ง่าย:
x^2 - 2 = 0 (error bound 0.01)
x^4 + 0.81 x^2 - 0.47 x + 0.06 (error bound 10^-6)
หลายราก:
x^4 - 8 x^3 + 18 x^2 - 27 (error bound 10^-6)
พหุนามของ Wilkinson:
x^20 - 210 x^19 + 20615 x^18 - 1256850 x^17 + 53327946 x^16 -1672280820 x^15 +
40171771630 x^14 - 756111184500 x^13 + 11310276995381 x^12 - 135585182899530 x^11 +
1307535010540395 x^10 - 10142299865511450 x^9 + 63030812099294896 x^8 -
311333643161390640 x^7 + 1206647803780373360 x^6 -3599979517947607200 x^5 +
8037811822645051776 x^4 - 12870931245150988800 x^3 + 13803759753640704000 x^2 -
8752948036761600000 x + 2432902008176640000 (error bound 2^-32)
NB คำถามนี้อยู่ในSandbox เป็นเวลาประมาณ 3 เดือน หากคุณคิดว่าจำเป็นต้องปรับปรุงก่อนโพสต์ให้ไปที่ Sandbox และแสดงความคิดเห็นเกี่ยวกับคำถามที่เสนออื่น ๆก่อนโพสต์บนหน้าหลัก
fractions.Fraction
(ชนิด rational) หรือไม่? (c) เราต้องจัดการกับชื่อพหุนามองศา <1 หรือไม่? (d) เราสามารถสรุปได้ไหมว่าค่าสัมประสิทธิ์นำคือ 1?