与えられた間隔でスカラー関数のすべての根を見つける必要があります。関数に不連続がある可能性があります。アルゴリズムの精度はεにすることができます(たとえば、アルゴリズムがεよりも近い2つの異なるルートを検出しなくても問題ありません)。
そのようなアルゴリズムは存在しますか?それについての論文を私に教えてもらえますか?
実際には、ブレントのアルゴリズムを使用して特定の間隔でゼロを見つける関数と、特定の間隔で最小値を見つける関数があります。これらの2つの関数を使用して、独自のアルゴリズムを作成しましたが、より良いアルゴリズムが存在するかどうか疑問に思いました。私のアルゴリズムはそのようなものです:
インターバル[a,b]
と機能から始めますf
。場合はsign(f(a+ε)) ≠ sign(f(b-ε))
、私が間に少なくとも1つのゼロがあると知っている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[
。2つのポイントa
との間b
で、極値が両方の区間の端よりも同じ符号を持ち、両方の極値で不連続性がない場合、スタックから区間を削除します。アルゴリズムは、間隔がなくなると終了します。