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













Write your message and submit
« PREV : 1 : ··· : 313 : 314 : 315 : 316 : 317 : 318 : 319 : 320 : 321 : ··· : 634 : NEXT »