본문 바로가기

Enginius/Matlab

fminsearch 를 사용한 optimization 예제

우리가 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