Belirli bir aralıkta skaler fonksiyonun tüm köklerini bulmam gerekiyor . Fonksiyonun süreksizlikleri olabilir. Algoritma ε hassasiyetine sahip olabilir (örneğin, algoritma ε'dan daha yakın iki farklı kök bulamazsa sorun olmaz).
Böyle bir algoritma var mı? Bana bu konudaki kağıtları gösterebilir misin?
Aslında, Brent'in algoritmasını kullanarak belirli bir aralıkta sıfır bulmak için bir fonksiyonum var ve belirli bir aralıkta minimum bulmak için bir fonksiyonum var. Bu iki işlevi kullanarak kendi algoritmamı oluşturdum, ancak daha iyi bir algoritma olup olmadığını merak ediyordum. Benim algoritma şöyle:
Bir aralık [a,b]
ve bir işlevle başlıyorum f
. Eğer sign(f(a+ε)) ≠ sign(f(b-ε))
, a
ve arasında en az bir sıfır olduğunu biliyorum b
ve buluyorum z = zero(]a,b[)
. Ben testi eğer z
gerçekten bir değerini bakarak, (bir süreksizlik olabilir) bir sıfırdır z-ε
ve z+ε
. Öyleyse, bulunan sıfırlar listesine eklerim. Eğer f(a+ε)
ve f(b-ε)
ikisi olumlu, ben arama m = min(]a, b[)
. Eğer f(m)
hala olumlu, ben aramak m = max(]a,b[)
arasında bir boşluk olabileceğini çünkü a
ve b
. Eğer tersini yapmak f(a+ε)
ve f(b-ε)
negatifleriydi.
Şimdi bulduğum noktadan ( z
veya m
) işlevimin sıfırlarını, süreksizliklerini ve bükülme noktalarını içeren bir yığın oluşturuyorum. İlk yinelemeden sonra yığın şimdi benziyor [a, z, b]
. Algoritmayı aralıklarla tekrar başlatıyorum ]a,z[
ve ]z,b[
. İki nokta a
ile b
ekstrema her iki aralık ucundan aynı işarete sahip olduğunda ve her iki ekstremada herhangi bir süreksizlik olmadığında, aralığı yığından kaldırırım. Daha fazla aralık kalmadığında algoritma sona erer.