Simulink 를 사용하면서 종종 Algebraic Loop Error를 만나게 되는데요.
오늘은 이 Algebraic Loop에 대해 알아보려고 합니다.
Algebraic Loop 에 대해 이해하기 위해서는 Simulink 의 Direct feedthrough 에 대한 이해가 선행 되어야 합니다.
Direct feedthrough 란 어떤 블록의 출력이 결정되는데 현재의 입력이 영향을 미치는 것을 의미합니다.
예를 들면 Add, Gain 과 같은 블록은 현재의 입력이 있어야 출력을 알 수가 있을 테니깐 이런 블록들이 바로 direct feedthrough 한 블록들인 것입니다.
Algebraic Loop 란 이런 direct feedthrough 한 블록의 출력이 입력에 연결 되었을 때 발생을 합니다.
어떻게 보면 당연한 얘기지만 Algebraic Loop 가 있는 구조는 구현 불가능 블록입니다.
이유는 time 에 있습니다.
t1 이라는 특정 시점에 블록의 현재 출력이 현재의 입력에 들어간다면 물리적으로 불가능 한 거죠.
C 나 MATLAB m 파일 작성 시에도 평소에 이런 구현 불가능한 코딩은 지양 해야겠다고 생각됩니다.
그럼 간단하게 흔히 실수를 저지르는 Simulink 블록의 구조에 대해 알아보죠.
아래 Simulink 블록은 간단한 누적기 입니다.
입력 소스로 카운터를 두고 계속 누적 하도록 한 거죠.
위와 같은 구조의 블록을 실행 시키면 다음과 같은 algebraic loop error 가 발생하게 됩니다.
Simulink 는 기본적으로 Configuration parameters 의 diagnostics à solver 설정에서 algebraic loop 설정이 warning 으로 설정되어 있습니다.
그럼 이러한 algebraic loop 를 피하는 방법은 어떻게 될까요?
해결 방법은 간단 합니다.
위 블록의 feedback path 의 중간에 적절한 delay 블록을 넣어 주는 겁니다.
에러가 나지 않는 구조는 다음과 같습니다.
위 모델을 실행 시키면 다음과 같은 정상적인 결과를 얻을 수 있습니다.
'programming language > MATLAB' 카테고리의 다른 글
MATLAB varargin, varargout (6) | 2012.03.12 |
---|---|
MATLAB GUI 창 크기 조절 (4) | 2012.03.03 |
MATLAB GUI (4) | 2012.02.24 |
MATLAB figure ButtonDownFcn (0) | 2012.02.22 |
MATLAB dos 명령 사용하기 (0) | 2011.12.21 |
MATLAB convolution (151) | 2011.11.20 |
Window command 에서 MATLAB 실행 방법 (0) | 2011.11.20 |
MATLAB, end 를 이용한 데이터 추가 (1) | 2011.11.18 |
댓글