fminunc の step size について

2 views (last 30 days)
Tsuyoshi Yasuda
Tsuyoshi Yasuda on 22 Jan 2018
Commented: michio on 23 Jan 2018
fminuncでstep sizeを固定させる方法はありますか?

Answers (1)

michio
michio on 23 Jan 2018
目的関数の勾配を有限差分で推定する際の差分幅は制御できますが、ステップサイズ自体はアルゴリズムが決定するため直接固定する方法はありません。何か固定されたい理由や困りごと(収束しない等)などありますか?
  2 Comments
Tsuyoshi Yasuda
Tsuyoshi Yasuda on 23 Jan 2018
以下に示すプログラム内の目的関数内の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 on 23 Jan 2018
目的関数の詳細は理解しきれておりませんが、結果に初期値依存性はみられますか?例えば
tca0 = 1;
で計算した場合に、求められたい理想値に収束しますでしょうか。

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!