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













« PREV : 1 : ··· : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : ··· : 68 : NEXT »