คำตอบของสมการควอร์ติก


10

มีการใช้ C แบบเปิดสำหรับการแก้สมการควอร์ติกหรือไม่:

ax+x³+x²+dx+อี=0

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

ฉันต้องการทางออกที่แท้จริงเท่านั้น


คุณต้องการโซลูชั่น (ของจริง) ทั้งหมดพร้อมกันหรือไม่? ดังที่ GertVdE กล่าวไว้ด้านล่างหากคุณมีปัญหาด้านความมั่นคงกับโซลูชันปิดแบบฟอร์มไม่มีเหตุผลที่ดีที่จะไม่ใช้อัลกอริทึมการค้นหารูท
Godric Seer

3
ฉันคิดว่ามันตลกว่านี่เป็นแท็กที่ไม่ใช่เชิงเส้นพีชคณิตเนื่องจากคุณสามารถคำนวณค่าลักษณะเฉพาะของเมทริกซ์ร่วมซึ่งอยู่ในรูปแบบของ Hessenberg แล้วการใช้ QR sweeps นั้นค่อนข้างง่าย
Victor Liu

2
มีลักษณะที่ลูกบาศก์ / quartic แก้การตีพิมพ์ใน ACM TOMS (อัลกอริทึม 954) รหัสที่ทำให้เป็นวารสารนั้นมักจะมีคุณภาพสูงมาก กระดาษอยู่ด้านหลังของ paywall แต่สามารถดาวน์โหลดรหัสได้จากลิงค์นี้
GoHokies

... (แก้ไขในภายหลัง) รหัส ACM เขียนด้วย FORTRAN 90 แต่ความประทับใจแรกของฉันคือสามารถเรียกจาก C โดยไม่ต้องใช้ความพยายามมาก
GoHokies

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

คำตอบ:


20

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

ตัวอย่างคลาสสิกเป็นหนึ่งสำหรับสมการกำลังสอง 0 การคำนวณรากเป็นจะทำให้คุณมีปัญหากับชื่อที่ประกอบด้วยหลายคำที่ตั้งแต่นั้นคุณจะถูกยกเลิกใน เศษ. คุณต้องคำนวณ{x_1}ax2+x+=0

x1,2=-±2-4a2a
»4a
x1=-(+sผมก.n()2-4a)2a;x2=a1x1

Higham ในผลงานชิ้นเอกของเขา "ความแม่นยำและความเสถียรของอัลกอริธึมเชิงตัวเลข" (2nd ed, SIAM) ใช้วิธีการค้นหาโดยตรงเพื่อค้นหาสัมประสิทธิ์ของพหุนามลูกบาศก์ซึ่งโซลูชันลูกบาศก์วิเคราะห์เชิงคลาสสิคให้ผลลัพธ์ที่ไม่แม่นยำมาก ตัวอย่างเช่นที่เขาให้เป็น1.2704] สำหรับพหุนามนี้รากนั้นแยกออกจากกันอย่างดีและด้วยเหตุนี้ปัญหาจึงไม่ได้มีเงื่อนไข อย่างไรก็ตามถ้าเขาคำนวณรูตโดยใช้วิธีการวิเคราะห์และประเมินพหุนามในรากเหล่านี้เขาจะได้รับเศษในขณะที่ใช้วิธีมาตรฐานที่เสถียร (เมทริกซ์สหาย) ส่วนที่เหลือมีคำสั่ง[a,,]=[1.732,1,1.2704]O(10-2)O(10-15). เขาเสนอการดัดแปลงอัลกอริทึมเล็กน้อย แต่ถึงอย่างนั้นเขาก็สามารถหาชุดของค่าสัมประสิทธิ์ที่นำไปสู่การตกค้างของซึ่งไม่ดีอย่างแน่นอน ดูหน้า p480-481 ของหนังสือที่กล่าวถึงข้างต้นO(10-11)

ในกรณีของคุณผมจะใช้วิธีการ Bairstow ของ มันใช้การวนซ้ำของนิวตันซ้ำในรูปแบบสมการกำลังสอง (จากนั้นรากของสมการกำลังสองจะถูกแก้ไข) และภาวะเงินฝืด มันใช้งานได้ง่ายและมีแม้กระทั่งการใช้งานบางอย่างบนเว็บ


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

@EmmadKareem ฉันได้อัปเดตคำตอบของฉันด้านบนแล้ว
GertVdE

3

ดูเหล่านี้:


2
x1=-1.602644912244132อี+00O(10-8)O(10-7)O(10-15). ขึ้นอยู่กับคุณไม่ว่าจะเป็นที่ดีพอ (สำหรับคอมพิวเตอร์กราฟิกมันอาจจะเป็นสำหรับการใช้งานอื่น ๆ บางมันจะไม่เป็น)
GertVdE

1

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


ฉันได้รูทของตัวอย่างลูกบาศก์ที่อ้างถึงภายใน 2e-16 (ตาดความแม่นยำของโฟลทของฉัน) โดยใช้สูตรตัวเลขในสูตรลูกบาศก์ (กด et al) สูตรลูกบาศก์ ดังนั้นจึงมีเหตุผลที่จะหวัง
Nemocopperfield
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.