1

私はMatlabを初めて使用し、この関数を使用して3つのゼロスポットすべてを見つけることになっています。

fm(関数が見つかる私のファイル)

function fval = f(x)
% FVAL = F(X), compute the value of a test function in x
fval = exp(-x) - exp(-2*x) + 0.05*x - 0.25;

したがって、明らかに関数を読み取るために「type f」と記述しますが、fzero('f'、0)のようにしようとすると、ans 0.4347が得られ、3つのゼロスポットのうちの1つであると想定しますが、他の2つを見つける方法?

4

2 に答える 2

2

fzeroのドキュメントから

x = fzero(fun,x0)がスカラーのx0場合、の近くで楽しいゼロを見つけようとします。関数ハンドルです。fzero によって返される値は、fun が符号を変更する点に近いか、検索が失敗した場合は NaN になります。この場合、Inf、NaN、または複素数が見つかるまで検索間隔を拡張すると、検索が終了します。x0funx

したがって、それ自体ですべてのゼロを見つけることはできず、1 つだけを見つけることができます。どちらが入力したかによって異なりますx0

間隔がわかっている場合に、さらにゼロを見つける方法の例を次に示します。ただし、間隔内のさまざまなポイントを繰り返し呼び出すだけfzeroです(離散化が粗すぎる場合は、ゼロを見逃す可能性があります)。より巧妙な手法は明らかに高速です。

http://www.mathworks.nl/support/solutions/en/data/1-19BT9/index.html?product=ML&solution=1-19BT9

上記のドキュメントと例でわかるように、fzero を呼び出す適切な方法は、関数ハンドル ( @fun) を使用することです。したがって、この場合は次のようになります。

zero1 = fzero(@f, 0);

この情報から、実際のルートがと0.434738にあることもわかります。したがって、0.4、1.5、および 4.8 で fzero を呼び出すと、おそらくそれらの値が得られます (fzero の収束は、使用するアルゴリズムとフィードする関数によって異なります)。1.477554.84368

于 2012-09-21T07:28:24.877 に答える
0

Gunther Struyfの答えを補足するために、StephenMorrisによるファイル交換にはFindRealRootsと呼ばれる優れた関数があります。この関数は、任意の区間で任意の関数のすべての根の近似を見つけます。

これは、関数をチェビシェフ多項式で近似し、その多項式の根を計算することで機能します。これは明らかに、連続的で滑らかな、その他の点では正常に動作する関数でのみうまく機能しますが、提供する関数にはそれらの性質があるようです。

あなたはこのようなものを使うでしょう:

%# find approximate roots
R = FindRealRoots(@f, -1, 10, 100);

%# refine all roots thus found
for ii = 1:numel(R)
    R(ii) = fzero(@f, R(ii)); end
于 2012-09-21T09:47:42.447 に答える