Main Content

대수 루프 개념

Simulink® 모델에 신호 루프가 존재하고 이 루프 내에 직접 피드스루 블록만 있는 경우 대수 루프가 발생합니다. 직접 피드스루는 Simulink가 현재 시간 스텝에서 출력을 계산하는 데 블록의 입력 신호 값이 필요함을 의미합니다. 이러한 신호 루프는 동일한 시간 스텝에서 블록 출력과 입력의 순환 종속 관계를 생성합니다. 그 결과 각 시간 스텝에서 해를 구해야 하는 대수 방정식이 발생하므로 시뮬레이션에 계산 비용이 추가되게 됩니다.

직접 피드스루 입력을 갖는 블록의 몇 가지 예는 다음과 같습니다.

비직접 피드스루 블록은 상태 변수를 유지합니다. 이에 대한 두 가지 예는 IntegratorUnit Delay입니다.

블록이 직접 피드스루를 가지는지 여부를 확인하려면 블록 도움말 페이지의 특성 섹션을 참조하십시오.

다음 그림은 대수 루프의 예를 보여줍니다. Sum 블록은 대수 변수 xa이며, 이 변수는 첫 번째 입력 u에서 xa를 뺀 값과 같도록 제한됩니다(예: xa = u – xa).

이 간단한 루프의 해는 xa = u/2입니다.

수학적 해석 방식

Simulink에는 다음과 같이 작성 가능한 연립방정식인 상미분 방정식(ODE)을 시뮬레이션하는 데 사용할 수 있는 수치적 솔버 모음이 포함되어 있습니다.

x˙=f(x,t),

여기서 x는 상태 벡터이고 t는 독립 시간 변수입니다.

일부 연립방정식은 독립 변수와 상태 벡터는 포함하지만, 상태 벡터의 도함수는 포함하지 않는 제약 조건을 추가로 갖습니다. 이러한 연립방정식을 미분대수 방정식(DAE)이라고 합니다.

대수라는 용어는 어떠한 도함수도 포함하지 않는 방정식을 의미합니다. 공학 분야에서 나타나는 DAE는 반명시적(semi-explicit) 형식으로 표현할 수 있습니다.

x˙=f(x,xa,t)0=g(x,xa,t),

여기서

  • fg는 벡터 함수일 수 있습니다.

  • 첫 번째 방정식은 미분 방정식입니다.

  • 두 번째 방정식은 대수 방정식입니다.

  • 미분 변수의 벡터는 x입니다.

  • 대수 변수의 벡터는 xa입니다.

Simulink 모델에서 대수 루프는 대수 제약 조건입니다. 대수 루프를 갖는 모델은 연립미분대수방정식을 정의합니다. Simulink는 ODE 솔버의 각 스텝에서 xa에 대해 수치적으로 대수 방정식(대수 루프)을 풉니다.

아래 그림에 나와 있는 모델은 이 연립방정식을 반명시적(semi-explicit) 형식으로 표현한 것과 같습니다.

x˙=f(x,xa,t)=xa0=g(x,xa,t)=x+u2xa.

ODE 솔버의 각 스텝에서 대수 루프 솔버는 도함수 x˙를 계산하기 전에 xa에 대한 대수 제약 조건의 해를 구해야 합니다.

물리적 해석 방식

대수 제약 조건:

  • 물리 시스템을 모델링할 때 대개 보존 법칙(예: 질량과 에너지 보존)으로 인해 발생

  • 모델에 대해 특정 좌표계를 선택하는 경우 발생

  • 동적 시스템에서 시스템 응답에 대한 설계 제약 조건을 부여하는 데 유용

Simscape™를 사용하면 기계, 전기, 유압 및 기타 물리적 도메인에 걸쳐 시스템을 물리적 네트워크로 모델링할 수 있습니다. Simscape는 모델의 동작을 특징짓는 DAE를 생성합니다. 이 소프트웨어는 이러한 방정식을 모델의 나머지 요소와 통합한 후 DAE를 직접 풉니다. Simulink는 다양한 물리적 도메인에서 구성요소에 대한 변수의 값을 동시에 구해 대수 루프 문제가 발생하지 않도록 합니다.

인위적 대수 루프

Atomic Subsystem 블록 또는 Model 블록으로 인해 Simulink가 대수 루프를 감지하면 서브시스템의 내용에 입력에서 출력으로의 직접 피드스루가 없어도 인위적 대수 루프가 발생합니다. Atomic Subsystem을 만들면 모든 Inport 블록이 직접 피드스루이기 때문에 결과적으로 대수 루프가 발생합니다.

먼저 포함된 모델로 시작해 보겠습니다. 다음은 플랜트의 단순 비례 제어를 표현합니다.

$$ G(s) = \frac{1}{s^2+2s+1}$$

이는 다음과 같이 상태공간 형식으로 다시 작성할 수 있습니다.

$$
\dot{x} = \left[
 \begin{array}{cc}
 -2 & -1 \\
1 & 0
 \end{array}
 \right]
+ \left(
\begin{array}{c}
0\\1
\end{array}
\right)
$$

$$
y = \left[\begin{array}{cc}0&1\end{array}\right]
$$

시스템에는 대수 변수도 직접 피드스루도 없으며 대수 루프도 포함되지 않습니다.

다음 단계에서 설명하는 대로 모델을 수정하십시오.

  1. Controller 블록과 Plant 블록을 서브시스템으로 만듭니다.

  2. 서브시스템 대화 상자에서 아토믹 단위로 처리를 선택하여 서브시스템을 아토믹으로 만듭니다.

  3. 모델 구성 파라미터의 진단 창에서 대수 루프 파라미터를 error로 설정합니다.

이 모델을 시뮬레이션하면 Atomic Subsystem 내의 경로가 직접 피드스루가 아니지만 서브시스템이 직접 피드스루이기 때문에 대수 루프가 발생합니다. 대수 루프 오류와 함께 시뮬레이션이 중지됩니다.

대수 루프 솔버의 작동 방식

모델에 대수 루프가 포함된 경우 Simulink는 각 시간 스텝에서 비선형 솔버를 사용하여 대수 루프의 해를 구합니다. 이 솔버는 반복 수행을 통해 대수 제약 조건이 있는 경우 이에 대한 해를 구합니다. 따라서 대수 루프가 있는 모델은 대수 루프가 없는 모델보다 실행 속도가 느릴 수 있습니다.

Simulink는 dogleg 신뢰 영역 알고리즘을 사용하여 대수 루프의 해를 구합니다. 사용되는 허용오차는 ODE 솔버 ReltolAbstol보다 작습니다. 그 이유는 Simulink는 “양함수 ODE 방법”을 사용하여 지수-1 미분대수 방정식(DAE)을 풀기 때문입니다.

대수 루프 솔버가 작동하려면 다음 조건을 충족해야 합니다.

  • 루프 솔버가 루프를 분절하고 루프의 해를 구하려고 시도할 수 있는 블록이 하나 있어야 합니다.

  • 모델이 double형 실수 신호를 가져야 합니다.

  • 기본 대수 제약 조건이 매끄러운 함수여야 합니다.

예를 들어, 모델에 가산식 입력과 감산식 입력이 하나씩 있는 2개의 입력을 갖는 Sum 블록이 있다고 가정해 보겠습니다. Sum 블록의 출력을 입력 중 하나에 전달하면 모든 블록이 직접 피드스루를 포함하는 대수 루프가 생성됩니다.

Sum 블록은 입력을 알지 못한 상태에서는 출력을 계산할 수 없습니다. Simulink가 대수 루프를 감지하며, 대수 루프 솔버가 반복 루프를 사용하여 루프의 해를 구합니다. Sum 블록 예제에서 소프트웨어는 다음과 같은 방식으로 올바른 결과를 계산합니다.

xa(t) = u(t) / 2.(1)

대수 루프 솔버는 기울기 기반 탐색 방법을 사용하며, 이 방법에는 대수 루프에 대응하는 대수 제약 조건의 연속 1계 도함수가 필요합니다. 따라서 대수 루프에 불연속이 있는 경우 대수 루프 솔버가 실패할 수 있습니다.

자세한 내용은 Solving Index-1 DAEs in MATLAB and Simulink 항목을 참조하십시오. 1

대수 루프 솔버의 신뢰 영역 및 직선 탐색 알고리즘

Simulink 대수 루프 솔버는 다음 두 알고리즘 중 하나를 사용하여 대수 루프의 해를 구합니다.

  • 신뢰 영역

  • 직선 탐색

기본적으로 Simulink는 최적의 대수 루프 솔버를 선택하고 시뮬레이션 중에 두 방법 간에 전환할 수 있습니다. 모델에 대한 자동 대수 루프 솔버 선택을 명시적으로 활성화하려면 MATLAB® 명령줄에 다음을 입력하십시오.

set_param(model_name, 'AlgebraicLoopSolver','Auto');

신뢰 영역 알고리즘으로 전환하려면 MATLAB 명령줄에 다음을 입력하십시오.

set_param(model_name, 'AlgebraicLoopSolver', 'TrustRegion');

대수 루프 솔버가 신뢰 영역 알고리즘을 사용하여 대수 루프의 해를 구할 수 없다면 직선 탐색 알고리즘을 사용하여 모델을 시뮬레이션해 보십시오.

직선 탐색 알고리즘으로 전환하려면 MATLAB 명령줄에 다음을 입력하십시오.

set_param(model_name, 'AlgebraicLoopSolver', 'LineSearch');

자세한 내용은 다음 항목을 참조하십시오.

대수 루프 솔버의 제한 사항

대수 루프의 해를 구하는 과정은 반복적인 과정입니다. Simulink 대수 루프 솔버는 대수 루프가 일정한 값으로 수렴하는 경우에만 성공합니다. 루프가 수렴하지 않거나 수렴 속도가 너무 느린 경우 시뮬레이션이 종료되고 오류가 표시됩니다.

대수 루프 솔버는 다음을 포함하는 대수 루프의 해를 구할 수 없습니다.

  • 이산 값 출력을 갖는 블록

  • 비double형 또는 복소수 출력을 갖는 블록

  • 불연속

  • Stateflow® 차트

모델에서 대수 루프가 미치는 영향

모델에 대수 루프가 포함된 경우 다음과 같은 영향이 있습니다.

  • 모델에 대한 코드를 생성할 수 없습니다.

  • Simulink 대수 루프 솔버가 대수 루프의 해를 구하지 못할 수 있습니다.

  • Simulink가 대수 루프의 해를 구하려고 하지만 시뮬레이션의 실행 속도가 느려질 수 있습니다.

    대부분의 모델에 대해 대수 루프 솔버는 첫 번째 시간 스텝에서 많은 계산량을 요합니다. 후속 시간 스텝의 경우, 이전 시간 스텝에서 xa에 대한 좋은 시작점을 얻을 수 있기 때문에 Simulink의 풀이 속도가 빨라집니다.

참고 항목

| | |

관련 항목


1 Shampine, Lawrence F., M.W.Reichelt, and J.A.Kierzenka. ”Solving Index-1 DAEs in MATLAB and Simulink.”Siam Review.Vol.18,No.3,1999,pp.538–552.

2 More,J.J.,B.S.Garbow, and K.E.Hillstrom. User guide for MINPACK-1. Argonne, IL:Argonne National Laboratory,1980.

3 Rabinowitz, Philip, ed. Numerical Methods for Nonlinear Algebraic Equations, New York: Gordon and Breach Science Publishers, 1970.