2016-09-04 5 views
1

私は最大化したい尤度を与える関数を持っています。問題は、私が推定する必要がある4つのパラメータを与える必要があることです。Matlab maximize関数

[likelihood, z0, z1, z2, z3]= myfun(g, g1, g2, x1, g3, x2, x3) 

出力で、私はそれを最大限に高めることができますどのように可能性を与える:私はこの機能がありますか?私はすべてgを知っていますが、私はxを知らないので、それらを尤度の最大化で推定する必要があります。さらに、私はzも知らない。

私はfminsearchを行うべきだと思いますが、私はこのようなパラメータ推定のドキュメントを見つけることができませんでした。

答えて

1

fminsearchここでうまくいくように思えます。検索の問題を抽象化する入力を、関数が期待する方法で行う必要があります。単一配列引数

  • 0が賢明な初期値であると仮定すると
  • を最大化していない、最小限にする値を返しますよう

    1. は未知のパラメータを取ります。ここで私は、この関数を作成することを意味だと思いますを見つけるに

      x = fminsearch(@(x) -myfun(g, g1, g2, x(1), g3, x(2), x(3)), [0,0,0]); 
      x1 = x(1); 
      x2 = x(2); 
      x3 = x(3); 
      

      :すべてのxのパラメータのために、これは次のようになります値と検索結果が返されたからlikelihoodを結果すると、あなたは、単にmyfunに戻し、結果を置くことができます。

      [likelihood, z0, z1, z2, z3] = myfun(g, g1, g2, x1, g3, x2, x3) 
      
    +0

    正しい - 入力が厳密に1次元配列に並んスカラーである必要はありません。それらは行列で配列することができますが、検索は行列のすべての要素を最適化しようとします。この場合、最適化するための素数がありますので、1行7列の配列が唯一の選択肢です。 'ss = fminsearch(@(ss)-kalcvf(y、lead、a、reshape(s:1:4)、2,2)、b、H、diagのように7つの値をより簡潔に整理することができます。 (ss(5:7))、z0、vz0)、0(1、7)) 'である。 – Will

    +0

    最適化ツールボックスをお持ちの場合、 'fmincon'は、探している種類の制約を提供します。私はツールボックスを持っていませんが、あなたの例は、 'fmincon(@ ss)-kalcvf(y、lead、a、reshape(s:1:4)、2,2)、b、 (0,1)、0(0)、0(0)、0(0)、0(0)、0 1; 1]) ')。あなたがそれを持っていない場合は、オンラインで議論される無制約検索で使用できるさまざまな戦略があります。目的関数を使用するかどうかにかかわらず、非線形関数を検索しても最適な、または良い答えが得られるわけではないことを覚えておいてください。 – Will

    +0

    'params'から抽出する要素の数変更しようとしている行列のサイズと一致しません。 'H 'を9行2列の行列に変更するには、18要素が必要ですが、' params(5:23) 'は19です。' reshape(params(24:145)、11,11) 'と同じです。 1つは多すぎます。しかし、あなたの2番目の質問に答えるためには、143パラメータは、賢明な時間枠で良好な結果を得るには、確かに多すぎます。無制限の検索で良い結果が得られれば、おそらく同じ結果を得るためのより効率的な方法があります。 – Will