このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
fzero
非線形関数の根
説明
例
1 つの点から開始して求める根
3
の近傍の正弦関数のゼロ点を求めることにより を計算します。
fun = @sin; % function x0 = 3; % initial point x = fzero(fun,x0)
x = 3.1416
区間から開始して求める根
1
と 2
の間で余弦のゼロ点を求めます。
fun = @cos; % function x0 = [1 2]; % initial interval x = fzero(fun,x0)
x = 1.5708
と の符号が異なることに注意してください。
ファイルで定義される関数の根
関数 f(x) = x3 – 2x – 5. のゼロ点を求めます。
まず、f.m
という名前のファイルを作成します。
function y = f(x)
y = x.^3-2*x-5;
MATLAB® パス上に f.m
を保存します。
2
の近傍で f(x) がゼロになる点を見つけます。
fun = @f; % function x0 = 2; % initial point z = fzero(fun,x0)
z = 2.0946
f(x)
は多項式なので、roots
コマンドを使用して、同じ実数零点と零点の複素共役対を検出できます。
roots([1 0 -2 -5])
ans = 2.0946 -1.0473 + 1.1359i -1.0473 - 1.1359i
追加パラメーターをもつ関数の根
追加のパラメーターをもつ関数の根を求めます。
myfun = @(x,c) cos(c*x); % parameterized function c = 2; % parameter fun = @(x) myfun(x,c); % function of x alone x = fzero(fun,0.1)
x = 0.7854
既定ではないオプション
いくつかのプロット関数を設定して、解を求めるプロセスをプロットします。
関数と初期点を定義します。
fun = @(x)sin(cosh(x)); x0 = 1;
プロット関数を含むオプションを設定して、解を求めるプロセスを調べます。
options = optimset('PlotFcns',{@optimplotx,@optimplotfval});
options
を含めて fzero
を実行します。
x = fzero(fun,x0,options)
x = 1.8115
問題構造体の解決
問題構造体によって定義された問題を解きます。
根を求める問題をエンコードする構造体を定義します。
problem.objective = @(x)sin(cosh(x)); problem.x0 = 1; problem.solver = 'fzero'; % a required part of the structure problem.options = optimset(@fzero); % default options
問題を解きます。
x = fzero(problem)
x = 1.8115
解についての詳細な情報
exp(-exp(-x)) = x
となる点を見つけ、解を求めるプロセスについての情報を表示します。
fun = @(x) exp(-exp(-x)) - x; % function x0 = [0 1]; % initial interval options = optimset('Display','iter'); % show iterations [x fval exitflag output] = fzero(fun,x0,options)
Func-count x f(x) Procedure 2 1 -0.307799 initial 3 0.544459 0.0153522 interpolation 4 0.566101 0.00070708 interpolation 5 0.567143 -1.40255e-08 interpolation 6 0.567143 1.50013e-12 interpolation 7 0.567143 0 interpolation Zero found in the interval [0, 1]
x = 0.5671
fval = 0
exitflag = 1
output = struct with fields:
intervaliterations: 0
iterations: 5
funcCount: 7
algorithm: 'bisection, interpolation'
message: 'Zero found in the interval [0, 1]'
fval
= 0 ということは、求めたとおり fun(x) = 0
であるということです。
入力引数
fun
— 解を求める関数
関数ハンドル | 関数名
スカラー値関数へのハンドルとして指定された、解を求める対象の関数またはそのような関数の名前です。fun
はスカラー x
を受け入れ、スカラー fun(x)
を返します。
fzero
は fun(x) = 0
を解きます。方程式 fun(x) = c(x)
を解くには、代わりに fun2(x) = fun(x) - c(x) = 0
を解きます。
関数に追加のパラメーターを含める方法については、追加パラメーターをもつ関数の根の例と追加パラメーターの受け渡しのセクションを参照してください。
例: 'sin'
例: @myFunction
例: @(x)(x-a)^5 - 3*x + a - 1
データ型: char
| function_handle
| string
x0
— 初期値
スカラー | 2 要素ベクトル
実数のスカラーまたは 2 要素の実数ベクトルとして指定された初期値。
スカラー —
fzero
はx0
から開始し、fun(x1)
の符号がfun(x0)
に対し反転する点x1
の探索を試みます。次に、fzero
は反復によってfun
の符号が変化する区間を縮め、解に到達します。2 要素ベクトル —
fzero
はfun(x0(1))
とfun(x0(2))
の符号が反転することをチェックし、符号が反転していない場合にはエラーを返します。次に、反復によってfun
の符号が変化する区間を縮め、解に到達します。区間x0
は有限である必要があります。すなわち、±Inf
. は含めません。
ヒント
区間 (2 つの要素をもつ x0
) を伴った fzero
を呼び出すと、スカラー x0
を呼び出すより高速になる場合があります。
例: 3
例: [2,17]
データ型: double
options
— 求解プロセスのオプション
構造体 (通常、optimset
で作成)
構造体として指定される、求解プロセスのオプション。optimset
を使用して options
構造体を作成または変更します。fzero
によって、これら options
構造体のフィールドが使用されます。
| 表示レベル (反復表示を参照):
|
| 目的関数値が正しいかどうかチェックします。
|
| 各反復で最適化関数が呼び出すユーザー定義の関数を 1 つ以上指定します (関数ハンドルか関数ハンドルの cell 配列として)。既定の設定はなし ( |
| アルゴリズムを実行しながら、進行状況に関するさまざまな測定値をプロットします。定義済みのプロットから選択するか、自身で記述します。関数ハンドルか、関数ハンドルの cell 配列を渡します。既定の設定はなし (
カスタムのプロット関数は、出力関数と同じ構文を使用します。詳細は、Optimization Toolbox の出力関数と出力関数とプロット関数の構文を参照してください。 |
|
|
例: options = optimset('FunValCheck','on')
データ型: struct
problem
— 根を求める問題
構造体
根を求める問題は、以下のすべてのフィールドをもつ構造体として指定されます。
| 目的関数 |
| x の初期点、スカラーまたは 2 次元ベクトル |
| 'fzero' |
| 通常は optimset を使用して作成されるオプション構造体 |
データ型: struct
出力引数
x
— 根または符号変化の位置
実数スカラー
根または符号が変化する位置がスカラーとして返されます。
fval
— x
における関数値
実数スカラー
x
における関数値がスカラーとして返されます。
exitflag
— 終了状況をエンコードする整数
整数
終了状況、つまり fzero
が反復を停止した理由をエンコードする整数。
| 関数が解 |
| アルゴリズムが出力関数またはプロット関数により停止したことを示します。 |
| 符号変化を含む区間の探索中に、関数値 |
-4 | 符号変化を含む区間の探索中に複素関数値が発生したことを示します。 |
-5 | アルゴリズムは、特異点に収束した可能性があります。 |
-6 |
|
output
— 根を求めるプロセスについての情報
構造体
構造体として返される、根を求めるプロセスについての情報です。構造体のフィールドは、次のとおりです。
intervaliterations | 解を含む区間を見つけるための反復数 |
iterations | ゼロ点を見つける反復数 |
funcCount | 関数評価の回数 |
algorithm |
|
message | 終了メッセージ |
アルゴリズム
fzero
コマンドは関数ファイルです。T. Dekker が作成したこのアルゴリズムでは、2 分法、正割および逆二次内挿法の組み合わせを使用します。いくつかの改良がなされた Algol 60 バージョンは [1] にあります。fzero
が基づいている Fortran 版は [2] にあります。
代替機能
アプリ
[最適化] ライブ エディター タスクが fzero
にビジュアル インターフェイスを提供します。
参照
[1] Brent, R., Algorithms for Minimization Without Derivatives, Prentice-Hall, 1973.
[2] Forsythe, G. E., M. A. Malcolm, and C. B. Moler, Computer Methods for Mathematical Computations, Prentice-Hall, 1976.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
C/C++ コード生成の場合:
fun
入力引数は、構造体または文字ベクトルではなく、関数ハンドルでなければなりません。fzero
は、TolX
およびFunValCheck
を除くすべてのオプションを無視します。fzero
は、4 番目の出力引数の出力構造体はサポートしていません。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)