ค้นหารากทั้งหมดของฟังก์ชันในช่วงเวลาที่กำหนด


9

ฉันต้องการค้นหารากทั้งหมดของฟังก์ชันสเกลาร์ในช่วงเวลาที่กำหนด ฟังก์ชั่นอาจไม่ต่อเนื่อง อัลกอริทึมสามารถมีความแม่นยำของε (เช่นมันก็โอเคถ้าอัลกอริทึมไม่พบสองรากที่แตกต่างที่ใกล้กว่าε)

อัลกอริทึมดังกล่าวมีอยู่จริงหรือไม่? คุณช่วยชี้เอกสารเกี่ยวกับเรื่องนี้ให้ฉันฟังได้ไหม


ที่จริงฉันมีฟังก์ชั่นเพื่อค้นหาศูนย์ในช่วงเวลาที่กำหนดโดยใช้อัลกอริทึมของ Brent และฟังก์ชั่นเพื่อค้นหาขั้นต่ำในช่วงเวลาที่กำหนด เมื่อใช้ทั้งสองฟังก์ชั่นฉันสร้างอัลกอริทึมของตัวเอง แต่ฉันสงสัยว่ามีอัลกอริทึมที่ดีกว่า อัลกอริทึมของฉันเป็นเช่นนั้น:

ผมเริ่มต้นด้วยช่วงเวลาและฟังก์ชั่น[a,b] fถ้าsign(f(a+ε)) ≠ sign(f(b-ε))ฉันรู้ว่ามีอย่างน้อยหนึ่งศูนย์ระหว่างaและและผมพบว่าb z = zero(]a,b[)การทดสอบผมถ้าzจริงๆเป็นศูนย์ (มันอาจจะไม่ต่อเนื่องก) โดยดูค่าของและz-ε z+εถ้าเป็นฉันจะเพิ่มเข้าไปในรายการศูนย์ที่พบ ถ้าf(a+ε)และทั้งสองเป็นบวกฉันค้นหาf(b-ε) m = min(]a, b[)หากf(m)ยังคงเป็นบวกฉันค้นหาm = max(]a,b[)เพราะอาจจะมีต่อเนื่องระหว่างและa bฉันทำตรงกันข้ามถ้าf(a+ε)และf(b-ε)เป็นเชิงลบ

ตอนนี้จากจุดที่ฉันพบ ( zหรือm) ฉันสร้างกองซ้อนที่มีค่าศูนย์ความไม่ต่อเนื่องและจุดผันแปรของการทำงานของฉัน หลังจากซ้ำแรก, [a, z, b]สแต็คในขณะนี้ดูเหมือนว่า ฉันเริ่มต้นอีกครั้งอัลกอริทึมจากช่วงเวลาและ]a,z[ ]z,b[เมื่อระหว่างสองจุดaและbextrema มีเครื่องหมายเดียวกันกว่าทั้งสองช่วงเวลาสิ้นสุดและไม่มีความไม่ต่อเนื่องที่ extrema ทั้งสองฉันจะลบช่วงเวลาออกจากสแต็ก อัลกอริทึมจะสิ้นสุดลงเมื่อไม่มีช่วงเวลาอีกต่อไป


2
มีวิธีการตามช่วงเวลาทางคณิตศาสตร์
LHF

คำตอบ:


6

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

แนวคิดหลักที่อยู่เบื้องหลังการค้นหารูตของ Chebfun คือการใช้การผสมผสานระหว่าง recursive bisection และ Colleague Matrix ซึ่งเป็นอะนาล็อกของCompanion Matrixบนค่าสัมประสิทธิ์ของหน่วยสอดแทรกของฟังก์ชันเป้าหมาย

ผมมีรุ่นที่เรียบง่ายของรหัสที่นี่ ฟังก์ชั่นchebrootsใช้ฟังก์ชั่นที่ไม่ระบุชื่อเป็นอินพุตแรกช่วงเวลา จำกัด เป็นอาร์กิวเมนต์ที่สองและสามและระดับที่Nเป็นอาร์กิวเมนต์ที่สี่และสุดท้าย เพื่อให้ได้ผลลัพธ์ที่เหมาะสมคุณสามารถตั้งค่าการN100


0

โดยทั่วไปนี่เป็นภารกิจที่สิ้นหวัง - โดยไม่มีข้อมูลเกี่ยวกับความต่อเนื่องและ / หรือความสามารถในการหาค่าได้ของฟังก์ชัน ลองพิจารณาตัวอย่างฟังก์ชัน MATLAB ที่กำหนดในช่วงจาก 0 ถึง 1:

ฟังก์ชั่น y = f (x)

การ y = 1.0;

ถ้า (x == 0.01)

การ y = 0.0;

ปลาย

ถ้า (x == 0.013)

การ y = 0.0;

ปลาย

ถ้า (x == 0.753124)

การ y = 0.0;

ปลาย

การใช้ฟังก์ชั่นนี้เป็นกล่องบล็อกไม่มีทางที่จะเห็นว่ามันมีเลขศูนย์ที่สามจุดนี้และไม่มีจุดอื่น ๆ ในช่วงจาก 0 ถึง 1 โดยไม่ตรวจสอบทุกเลขทศนิยมระหว่าง 0 ถึง 1


1
เลขศูนย์เหล่านี้หาไม่ได้อย่างชัดเจน แต่ดูเหมือนว่า @Charles จะสนใจฟังก์ชั่นกล่องดำที่แย่ที่สุดที่มีความไม่ต่อเนื่องของการกระโดด แต่ไม่ได้เรียกว่าความไม่ต่อเนื่องที่ถอดออกได้
Bill Barth

1
แม้ว่าคุณจะ จำกัด ตัวเองให้ข้ามความไม่ต่อเนื่องและแม้ว่าคุณจะ จำกัด ตัวเองกับฟังก์ชั่นต่อเนื่องหากฟังก์ชั่นไม่ได้เป็น Lipschitz อย่างต่อเนื่องในช่วงเวลาที่รู้จักกันดังนั้นการหาศูนย์ทั้งหมดจากการประเมินด้วยคะแนนจำนวน จำกัด จะไม่แน่ใจว่า รับรากทั้งหมด
Brian Borchers

โดยเฉพาะอย่างยิ่งให้พิจารณาฟังก์ชั่น บาป(1/x) เป็นตัวอย่างที่ค้นหาศูนย์ทั้งหมดในช่วงเวลา [0,1]จะเป็นเรื่องยาก
Wolfgang Bangerth

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