与えられた間隔で関数のすべての根を見つける


9

与えられた間隔でスカラー関数のすべての根を見つける必要があります。関数に不連続がある可能性があります。アルゴリズムの精度はεにすることができます(たとえば、アルゴリズムがεよりも近い2つの異なるルートを検出しなくても問題ありません)。

そのようなアルゴリズムは存在しますか?それについての論文を私に教えてもらえますか?


実際には、ブレントのアルゴリズムを使用して特定の間隔でゼロを見つける関数と、特定の間隔で最小値を見つける関数があります。これらの2つの関数を使用して、独自のアルゴリズムを作成しましたが、より良いアルゴリズムが存在するかどうか疑問に思いました。私のアルゴリズムはそのようなものです:

インターバル[a,b]と機能から始めますf。場合はsign(f(a+ε)) ≠ sign(f(b-ε))、私が間に少なくとも1つのゼロがあると知っているab、私は見つけます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で、極値が両方の区間の端よりも同じ符号を持ち、両方の極値で不連続性がない場合、スタックから区間を削除します。アルゴリズムは、間隔がなくなると終了します。


2
区間演算に基づく方法があります。
lhf 2013年

回答:


6

Matlabを使用している場合は、Chebfunシステムを試してみてください(免責事項:私はこのプロジェクトのアクティブな開発者でした)。1次元関数のすべての根を閉じた間隔または開いた間隔で見つけて、機械の精度を求めることができます。

Chebfunルートファインダーの背後にある主なアイデアは、ターゲット関数の内挿の係数に対して、再帰二分法とCompanion Matrixに類似したColleague Matrixの組み合わせを使用することです。

ここにコードの簡略版があります。この関数chebrootsは、最初の入力として匿名関数、2番目と3番目の引数として有限区間、N4番目と最後の引数として次数を取ります。合理的な結果を得るために、あなたが設定することができますN100


0

一般に、これは絶望的な探求です。関数の継続性や微分可能性に関する情報がなければ、何でも起こり得ます。たとえば、0から1までの間隔で定義されたMATLAB関数を考えます。

関数y = f(x)

y = 1.0;

(x == 0.01)の場合

y = 0.0;

終わり

if(x == 0.013)

y = 0.0;

終わり

if(x == 0.753124)

y = 0.0;

終わり

この関数をブロックボックスとして扱うと、0から1までのすべての浮動小数点数をチェックしないと、これらの3つの点にゼロがあり、0から1までの間隔に他の点がないことを確認する方法はありません。


1
これらの種類のゼロを見つけることは明らかに不可能ですが、@ Charlesは、最悪の場合、ジャンプの不連続性を持つブラックボックス関数に関心があるようですが、いわゆるリムーバブルな不連続性には関心がありません。
Bill Barth

1
ジャンプの不連続に制限したり、連続関数に制限したりしても、関数が既知の間隔でリプシッツ連続ではない場合、有限数の点での評価からすべてのゼロを見つけても、すべてのルーツを取得します。
Brian Borchers 2013年

特に、区間すべてのゼロを見つけることが困難な例として、関数を考えてください。[ 0 1 ]sin(1/x)[0,1]
Wolfgang Bangerth 2013年

OPはを指定する。関数が病理学的である場合、それは多くのゼロを見つけますが、それは人生のようです。そのような病理を回避するために、検索の間隔の最大数を設定する必要がある場合もあります。ϵ
Bill Barth 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.