matlabにてargminやargmaxを計算する.
やり方としては非常に簡単.
minとmax関数を使う.
[min_val, min_ind] = min(y); [max_val, max_ind] = max(y);
と書くと,min_ind,max_indにyが最小値,最大値となる時のインデックスが入る.
終わり!閉廷!
簡単な例で確認
例として
のargminを計算してみる.
(最小値はy=3で,argminはx=5である.)
上の式をmatlabで書くと,
x = 0:0.1:10; y = 2*((x-5).^2)+3; % グラフを描く plot(x, y) xlabel('x'); ylabel('y'); title('y=(x-5)^2+3');
グラフを描くと以下の通り.
この関数のargminを求める.
matlab標準のminを使った例
% テスト用関数の用意 x = 0:0.1:10; y = 2*((x-5).^2)+3; % argminを求める [y_min, ind] = min(y); % 結果の表示 fprintf('最小値はy[%d] = %f\n', ind, y(ind)); fprintf('argminはx[%d] = %f\n', ind, x(ind));
実行結果
最小値はy[51] = 3.000000 argminはx[51] = 5.000000
となり,無事にargminが求まった.
手で書いてみた例
% テスト用関数の用意 x = 0:0.1:10; y = 2*((x-5).^2)+3; % argminを求める ind = 1; min_val = inf; for itr = 1:length(y) if(y(itr) < min_val) min_val = y(itr); ind = itr; end end % 結果の表示 fprintf('最小値はy[%d] = %f\n', ind, y(ind)); fprintf('argminはx[%d] = %f\n', ind, x(ind));
実行結果
最小値はy[51] = 3.000000 argminはx[51] = 5.000000
となり,こちらも無事にargminが求まった.
結論
とくになし.
matlab標準のmin関数で最小値が複数ある場合はどういう処理になるの?とか,
多次元配列のargminはどうなの?とかはドキュメントを読むと分かる.
参考
配列の最小要素 - MATLAB min - MathWorks 日本