fminunc の step size について

4 ビュー (過去 30 日間)
Tsuyoshi Yasuda
Tsuyoshi Yasuda 2018 年 1 月 22 日
コメント済み: michio 2018 年 1 月 23 日
fminuncでstep sizeを固定させる方法はありますか?

回答 (1 件)

michio
michio 2018 年 1 月 23 日
目的関数の勾配を有限差分で推定する際の差分幅は制御できますが、ステップサイズ自体はアルゴリズムが決定するため直接固定する方法はありません。何か固定されたい理由や困りごと(収束しない等)などありますか?
  2 件のコメント
Tsuyoshi Yasuda
Tsuyoshi Yasuda 2018 年 1 月 23 日
以下に示すプログラム内の目的関数内のfitを時定数tcaを変化させて理想値(今回はtc=1)(すなわち,横軸tc,縦軸fitで最急降下法を行いたい)にしたいのですがうまくいかなかったので,どうすればよいか教えていただけますでしょうか。Transfer01は図のものです.
%メイン
%初期化
clc
clear
%時間
time = (0:0.5:5)';
%入力値
u = sin(time);
%時間と入力値の紐づけ(simulinkへ送るデータ)
u_in = horzcat(time,u);
%時定数の理想解
tc = 1;
%simulink実行
sim('transfer01')
%ノイズ
noise = 0.5;
%実測値の代わり
y_vor = y_out + noise;
%目的関数
object_func = @(tca)eval_func(tca,u_in,y_vor);
tca0 = 10;
%最急降下法のオプション
options = optimoptions('fminunc');
options = optimoptions(options,'Display', 'iter');
options = optimoptions(options,'Algorithm', 'quasi-newton');
options = optimoptions(options,'Hessian', 'off');
options = optimoptions(options,'HessUpdate', 'steepdesc');
[tc_ans,fit,exitflag,output] = fminunc(object_func,tca0,options);
%目的関数
function fit = eval_func(tca,u_in,y_vor)
tc = tca;
sim('transfer01')
fit = sum( (y_out - y_vor).^2);
end
michio
michio 2018 年 1 月 23 日
目的関数の詳細は理解しきれておりませんが、結果に初期値依存性はみられますか?例えば
tca0 = 1;
で計算した場合に、求められたい理想値に収束しますでしょうか。

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMultiobjective Optimization についてさらに検索

Community Treasure Hunt

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

Start Hunting!