우리가 minimize하고자 하는 함수 h1을 정의하고
function output = h1(X, para1, para2, para3)
...
output = norm(X-para1+para2-para3);
end
Main에서는 이 h1을 minimize한다.
para1 = [...]; % <=== optimization variable이 아닌 constant
para2 = [...]; % <=== optimization variable이 아닌 constant
para3 = [...]; % <=== optimization variable이 아닌 constant
Xinit = [...]; % <=== initial state
[Xhat, fmin, ~, ~] = fminsearch( @(X)h(X, para1, para2, para3) ...
, Xinit, optimset('MaxFunEvals',fmin_iter,'MaxIter', fmin_iter,'TolFun',10^(-10),'TolX',10^(-10)));
만약 minimize하고자 하는 함수의 variable이 두 개 라면 번갈아가면서 minimize한다.
function output = h2(X, Y, para1, para2, para3)
...
output = norm(X-Y-para1+para2-para3);
end
Main에서는 h2의 X와 Y를 번갈아가면서 minimize한다.
para1 = [...]; % <=== optimization variable이 아닌 constant
para2 = [...]; % <=== optimization variable이 아닌 constant
para3 = [...]; % <=== optimization variable이 아닌 constant
Xinit = [...]; % <=== initial state
Yinit = [...]; % <=== initial state
% 초기화한다.
Xhat = Xinit;
Yhat = Yinit;
while 1
% 1. X에 대해서 optimize한다.
[Xhat, fmin, ~, ~] = fminsearch( @(X)h(X, Yhat, para1, para2, para3) ...
, Xhat, optimset('MaxFunEvals',fmin_iter,'MaxIter', fmin_iter,'TolFun',10^(-10),'TolX',10^(-10)));
% 2. Y에 대해서 optimize한다.
[Yhat, fmin, ~, ~] = fminsearch( @(Y)h(Xhat, Y, para1, para2, para3) ...
, Yhat, optimset('MaxFunEvals',fmin_iter,'MaxIter', fmin_iter,'TolFun',10^(-10),'TolX',10^(-10)));
% 3. 적절한 break 조건을 추가한다.
end
'Enginius > Matlab' 카테고리의 다른 글
Matlab과 Linux 사이의 socket 통신 예제 (0) | 2013.04.02 |
---|---|
multi-colum legend (0) | 2013.02.18 |
Extremely useful Surface Plot (0) | 2012.12.19 |
plot option. 이쁘게 그려보자. (0) | 2012.12.19 |
Save a figure into PNG image / save to a TXT file (0) | 2012.11.17 |