fminuncのIt​erationを横軸​に変数を縦軸にしてグ​ラフを作りたい

3 views (last 30 days)
Tsuyoshi Yasuda
Tsuyoshi Yasuda on 13 Feb 2018
Commented: Tsuyoshi Yasuda on 14 Feb 2018
fminuncにおいて,Iterationを横軸,変数を縦軸のグラフを作る方法について教えていただきたいです.
  5 Comments
Tsuyoshi Yasuda
Tsuyoshi Yasuda on 13 Feb 2018
変数は2つです. できるのであればiteration毎の値を確保しておきたいです.
michio
michio on 13 Feb 2018
Edited: michio on 13 Feb 2018
分かりました。すでに試されてご存じの通り、目的関数にそのまま変数確保のコードを書いてしまうと関数の評価回数分の値が確保されてしまうので、Iteration毎に確保する(もしくは後ほど削除する)ような仕組みが必要ですね。少し考えてみます。
他の閲覧者の方もよいアイデアがあればぜひ書き込んでください。

Sign in to comment.

Accepted Answer

michio
michio on 13 Feb 2018
で紹介されている出力関数を設定するのがよさそうです。実際には
options = optimoptions(@solvername,'OutputFcn', @outfun);
などと 'OutputFcn' を設定します。outfun 関数を作る必要がありますが、上記URL先にも紹介がありますが
function stop = outfun(x,optimValues,state)
switch state
case 'init'
case 'iter'
case 'done'
otherwise
end
end
といった形で、各"状態"に応じで処理内容を記載します。詳細: アルゴリズムの状態
冒頭で紹介したURL先にあるサンプルコードで、history.x = []; として確保しているのが、各Iterationでの変数x の値です。サンプルコードのように、outfun を入れ込関数の形にすることで history 変数を共有するか、global 変数を用いてもよいと思います。取り急ぎ最小限のご紹介まで。実装する際に困ったことがあれば相談してください。
  1 Comment
Tsuyoshi Yasuda
Tsuyoshi Yasuda on 14 Feb 2018
できました.ありがとうございました!

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!