[解決済み] 1変数に対するfzeroとfsolveの差分
質問
1変数の方程式に対してfzeroとfsolveを使うことに違いはあるのでしょうか?
どのように解決するのですか?
はい、あります。一番わかりやすい違いを挙げておきますね。
fsolve
は、1変数の方程式の0を求めるのに使うことができる。しかしfzero
はゼロを見つけます。 もし が x 軸を横切る。
簡単な例を挙げましょう。次のような関数を考えてみましょう。
f=x^2
. のすべての実数値に対して非負の関数です。
x
. に根を持つ。
x=0
. 無名関数を次のように定義します。
f=@(x)x.^2;
という2つのメソッドを使って、ルートを探してみましょう。
fsolveを使用する
options=optimset('MaxIter',1e3,'TolFun',1e-10);
fsolve(f,0.1,options)
Equation solved.
fsolve completed because the vector of function values is near zero
as measured by the selected value of the function tolerance, and
the problem appears regular as measured by the gradient.
<stopping criteria details>
ans =
1.9532e-04
ゼロではないけれど、近い。
fzeroを使用する
fzero(f,0.1)
Exiting fzero: aborting search for an interval containing a sign change
because NaN or Inf function value encountered during search.
(Function value at -1.37296e+154 is Inf.)
Check function or try again with a different starting value.
ans =
NaN
それは できない はゼロを見つける。
別の例として、関数
f=@(x)x.^3;
に根を持ち、X 軸を横切る。
x=0
.
fsolve(f,0.1)
ans =
0.0444
fzero(f,0.1)
ans =
-1.2612e-16
fsolve
が正確に返されるわけではありません。
0
この場合も を使っても
options
上で定義したのは
0.0017
と
fsolve
. しかし
fzero
の答えは、機械精度の範囲内で正しいのです! 答えの違いは、非効率的なアルゴリズムのせいではありません。それは、彼らの
目的が違う
.
fzero
は、「ゼロを見つける」という明確な目標を持っています。シンプルですね。そこに曖昧さはない。もしそれがX軸を横切るなら、そこには
は
があり、それを見つけることができます(リアルのみ)。交差しない場合は、泣き言を言います。
しかし
fsolve
の範囲はより広い。これは非線形方程式系を解くために設計されています。多くの場合、それらの方程式の厳密な解を見つけることはできず、解を答えとして受け入れる許容範囲を設定する必要があります。その結果、正確なルートを算出するために手動で設定しなければならないオプションや公差が多数存在します。確かに、より細かい制御が可能ですが、単一変数方程式のゼロを見つけるには、私はそれが苦痛であると考えています。私なら
fzero
その場合、(X軸を横切ると仮定して)。
この大きな違い以外にも、実装や使用するアルゴリズムに違いがあります。それについては、関数のオンラインドキュメントを参照してほしい(上のリンクを参照)。
関連
-
[解決済み】MATLABの&と&&の違いは何ですか?
-
[解決済み】"配列のインデックスは正の整数または論理値でなければならない"
-
[解決済み] Matlab. 位置2のインデックスが配列の境界を越えています(1を超えてはいけません)。
-
[解決済み] 第一差分フィルタ
-
[解決済み] MATLABによるパワーメソッド
-
[解決済み] グラフ理論 Matlab BFSアルゴリズム
-
[解決済み] 行列の行にノルム関数を適用する - Matlab [duplicate]
-
[解決済み] Matlabで'symfun'によって記号関数の微分を実装するには?
-
[解決済み] Matlab - 収束率を計算する
-
[解決済み] ホールドオンでセミログプロット
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Matlabのfprintfを使用してテーブルを作成する
-
[解決済み] MATLAB: symからlogicalへの変換ができない
-
[解決済み] matlabで関数ハンドルを使った操作
-
[解決済み] matlabで補強行列を作成し、縮小行エシュロン形式を作成する。
-
[解決済み] データの補間は失敗:グリッドベクトルは与えられた値に一致する点のグリッドを定義しない
-
[解決済み] MATLABで関数のパラメータにデフォルト値を設定するにはどうすればよいですか?
-
[解決済み] Ax = B の形の行列を解く ==> エラー。行列が特異に近い、またはスケールが悪い
-
[解決済み] Matlabで'symfun'によって記号関数の微分を実装するには?
-
[解決済み] Matlabでforward inputnames?
-
[解決済み] ホールドオンでセミログプロット