Belirli bir aralıkta bir işlevin tüm köklerini bulma


9

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-ε)), ave arasında en az bir sıfır olduğunu biliyorum bve buluyorum z = zero(]a,b[). Ben testi eğer zgerç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ü ave b. Eğer tersini yapmak f(a+ε)ve f(b-ε)negatifleriydi.

Şimdi bulduğum noktadan ( zveya 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 aile bekstrema 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.


2
Aralık aritmetiğine dayalı yöntemler vardır.
22:00

Yanıtlar:


6

Matlab kullanıyorsanız, Chebfun sistemini denemek isteyebilirsiniz (feragatname: Bu projenin aktif bir geliştiricisiydim). Tek boyutlu bir işlevin tüm köklerini makine hassasiyetine açık veya kapalı bir aralıkta bulabilir.

Chebfun kök bulucusunun arkasındaki ana fikir, özyinelemeli bölünmenin ve Companion Matrix'in bir analogu olan Meslektaş Matrisinin, hedef fonksiyonun bir ara katsayısının katsayıları üzerinde bir kombinasyonunu kullanmaktır .

Burada kodun basitleştirilmiş bir sürümü var . İşlev chebroots, ilk girdisi olarak anonim bir işlevi, ikinci ve üçüncü bir bağımsız değişken olarak sonlu aralığı ve Ndördüncü ve son bağımsız değişken olarak bir dereceyi alır . Makul sonuçlar için ayarlayabileceğiniz Niçin 100.


0

Genel olarak, bu umutsuz bir görevdir - işlevin sürekliliği ve / veya farklılaştırılabilirliği hakkında bazı bilgiler olmadan, herhangi bir şey olabilir. Örneğin, 0 ile 1 arasında tanımlanan MATLAB işlevini düşünün:

işlev y = f (x)

y = 1.0;

eğer (x == 0.01)

y = 0.0;

son

eğer (x == 0.013)

y = 0.0;

son

eğer (x == 0.753124)

y = 0.0;

son

Bu işlevi bir blok kutusu olarak ele aldığımızda, bu üç noktada sıfır olduğunu ve 0 ile 1 arasındaki her bir kayan nokta sayısını kontrol etmeden 0 ile 1 arasında başka noktalar olmadığını görmenin bir yolu yoktur.


1
Bu tür sıfırları bulmak imkansızdır, ancak @Charles, en kötü ihtimalle atlama süreksizliklerine sahip kara kutu işlevleriyle ilgileniyor gibi görünüyordu, ancak söz konusu çıkarılabilir süreksizliklerle değil.
Bill Barth

1
Süreksizlikleri atlamak için kendinizi sınırlasanız ve sürekli işlevlerle sınırlasanız bile, işlev bilinen aralıklarda Lipschitz sürekli değilse, sonlu noktalarda değerlendirmelerdeki tüm sıfırları bulmak, tüm kökleri al.
Brian Borchers

Özellikle, fonksiyonu göz önünde bulundurun sin(1/x) aralıktaki tüm sıfırları bulmanın bir örneği olarak [0,1]zor olacak.
Wolfgang Bangerth

OP bir ϵ. İşlev patolojik ise, birçok sıfır bulacaktır, ancak bu hayat gibi görünüyor. Bu tür patolojilerden kaçınmak için arama yapmak için maksimum sayıda aralık ayarlaması gerekebilir.
Bill Barth
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.