- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다. - (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date |
2016/11/28 17:34:28 |
Name |
mcmc |
Subject |
[질문] matlab ODE45 많이 사용해보신분들 계신가요? |
대략적으로 풀려고 하는 문제는 아래와 같습니다.
variable: x(rho), rho
objective function: x(rho) 값에 따라 index set이 계속 변하면서 함수가 바뀜 (여기서 index set은 constraint 를 나타내며 각 index에 해당하는 함수의
gradient, hessian값들을 계산하고 이 값들이 objective function에 반영됨)
여기서 PI라는 set이 index set이라고 했을때, PI가 empty set이 될때까지 반복적으로 ODE를 풀어야하는 상황인데요.
초기값에서의 index set이 1,2,3 이라고 할때 rho값이 증가하며 점차적으로 set이 empty set이 되고, 따라서 ODE의 stopping criterion을
isempty(PI)로 잡은 상황인데 분명 evaluate하는 값들을 추적해봐도 PI가 empty set이 되는데 ODE가 멈추지 않고 계속해서 문제를 풀려고 하네요.
대략적인 코드는 아래와 같습니다.
options = odeset('Events', @event_function);
[rho x] = ode45(@obj_fn, [0 10], [1 1.5]', options);
event function은 아래와 같이 작성했습니다.
function [value,isterminal,direction] = event_function(t, PI)
value = isempty(PI) - 1.0; % when value = 0, an event is triggered
isterminal = 1; % terminate after the first event
direction = 0; % get all the zeros
ode45에서 error가 발생하는 부분은 PI가 empty가 됐을때 objective function이 제대로 define되지가 않는 부분 같습니다.
|
통합규정 1.3 이용안내 인용
"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
|