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 CenterFile Exchange에서 Multiobjective Optimization에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!