Saya perlu menemukan semua akar fungsi skalar dalam interval yang diberikan. Fungsi mungkin memiliki diskontinuitas. Algoritme dapat memiliki ketepatan ε (mis. Ok jika algoritma tidak menemukan dua akar berbeda yang lebih dekat dari ε).
Apakah ada algoritma seperti itu? Bisakah Anda menunjukkan kepada saya makalah tentang itu?
Sebenarnya, saya memiliki fungsi untuk menemukan nol dalam interval yang diberikan menggunakan algoritma Brent, dan fungsi untuk menemukan minimum dalam interval yang diberikan. Dengan menggunakan dua fungsi itu, saya membuat algoritma saya sendiri, tetapi saya bertanya-tanya apakah ada algoritma yang lebih baik. Algoritme saya seperti itu:
Saya mulai dengan interval [a,b]
dan fungsi f
. Jika sign(f(a+ε)) ≠ sign(f(b-ε))
, saya tahu setidaknya ada satu nol di antara a
dan b
, dan saya menemukan z = zero(]a,b[)
. Saya menguji apakah z
benar-benar nol (bisa berupa diskontinuitas), dengan melihat nilai z-ε
dan z+ε
. Jika ya, saya menambahkannya ke daftar nol yang ditemukan. Jika f(a+ε)
dan f(b-ε)
keduanya positif, saya mencari m = min(]a, b[)
. Jika f(m)
masih positif, saya mencari m = max(]a,b[)
karena mungkin ada diskontinuitas antara a
dan b
. Saya melakukan sebaliknya jika f(a+ε)
dan f(b-ε)
negatif.
Sekarang, dari titik saya menemukan ( z
atau m
) saya membangun tumpukan berisi nol, diskontinuitas, dan titik belok fungsi saya. Setelah iterasi pertama, tumpukan sekarang terlihat seperti [a, z, b]
. Saya mulai lagi algoritma dari interval ]a,z[
dan ]z,b[
. Ketika, di antara dua titik a
dan b
, ekstrema memiliki tanda yang sama dari kedua ujung interval, dan tidak ada diskontinuitas pada kedua ekstrema, saya menghapus interval dari tumpukan. Algoritma berakhir ketika tidak ada lagi interval.