Matlabでfzeroを使って数値的に方程式を解いてみようとしています。それはより大きな運動の一部です。私はここにはあまり掲載していないので、あなたはこの練習について必要な背景情報がどれほどであるか分かりませんので、それを短くしてください。ガンマパラメータ推定を数値的に解く
これは私のコードです:
fun = @(a)log(a/xBar) + (1/n) * log(dataProd) + diff(gamma(a))/gamma(a);
x0 = 0.8014;
x = fzero(fun,x0)
は、これらは、値は次のとおりです。 のn = 209 XBARは0.6078 dataProd = 3.1554e-77
である私は、MATLABで次のエラーメッセージを取得:
を|| & &演算子は、論理 スカラー値に変換可能でなければなりません。関数fzeroで
エラー(ライン306)
のelseif〜isfiniteの(FX)|| 〜isreal(fx)
なぜこのエラーメッセージが表示されるのですか?
あなたには「diff」とは何ですか? 'diff'は配列内の隣接する値の差を計算するためです。 1値配列の値の違いは、「存在しない」または「[]」なので、diff(gamma(a))は '[]'です。これは、 'a'が単一の値であるときに' fun(a) 'を返す' [] 'とします。この' fzero'は失敗します。実際には 'fun'は単一の値に対してのみ定義されているので、常に' [] 'を返します –
' diff'の意味がガンマ関数の派生である場合は、Matlab関数 'psi'を見てください。これを使ってガンマの導関数を計算することができます。しかし、あなたがしようとしていることがわからないので、これは単なる推測です。 – Florian
私はこのページを見ていました:https://se.mathworks.com/help/symbolic/differentiation.html。だから私はdiffが関数の差別化だと思ったのです。だから、私が欲しいのは、ガンマをガンマで割った点のガンマの導関数です。私はこれがpsi(a)であるように思えます。 diff(gamma(a))/ gamma(a)をpsi(a)に変更しました。ありがとう:) –