ฉันต้องการค้นหารากทั้งหมดของฟังก์ชันสเกลาร์ในช่วงเวลาที่กำหนด ฟังก์ชั่นอาจไม่ต่อเนื่อง อัลกอริทึมสามารถมีความแม่นยำของε (เช่นมันก็โอเคถ้าอัลกอริทึมไม่พบสองรากที่แตกต่างที่ใกล้กว่าε)
อัลกอริทึมดังกล่าวมีอยู่จริงหรือไม่? คุณช่วยชี้เอกสารเกี่ยวกับเรื่องนี้ให้ฉันฟังได้ไหม
ที่จริงฉันมีฟังก์ชั่นเพื่อค้นหาศูนย์ในช่วงเวลาที่กำหนดโดยใช้อัลกอริทึมของ 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
และb
extrema มีเครื่องหมายเดียวกันกว่าทั้งสองช่วงเวลาสิ้นสุดและไม่มีความไม่ต่อเนื่องที่ extrema ทั้งสองฉันจะลบช่วงเวลาออกจากสแต็ก อัลกอริทึมจะสิ้นสุดลงเมื่อไม่มีช่วงเวลาอีกต่อไป