# 상태방정식 기초

#### 연립 미분방정식에서 상태방정식으로의 전환

고전적인 제어이론에서는 주로 단일 입력과 단일 출력(SISO) 구조의 시스템을 다루며, 라플라스 변환을 통해 전이함수(transfer function)를 구하여 해석한다. 그러나 이러한 방식으로는 다중입력 다중출력(MIMO) 구조에서 발생하는 상호작용, 혹은 비선형성을 체계적으로 다루기 어려워진다. 이때 더욱 일반적이고 직관적인 방식이 바로 상태방정식(state-space equation)을 이용하는 방법이다.

상태방정식은 시간에 대한 연립 1차 미분방정식을 벡터-행렬 형태로 표현한 것으로서, 내부 상태(state)라 불리는 변수를 적절히 정의하여 시스템을 체계적으로 표현한다. 연립 고차 미분방정식을 체계적으로 분석하고 시뮬레이션하기 위해서는, 우선 고차 미분방정식을 1차 미분방정식으로 분할하는 과정을 수행한다. 예를 들어 $n$차 미분방정식으로 표현된 시스템을 생각할 때, 상태(state) 변수를 $\mathbf{x}(t) = \begin{bmatrix} x\_1(t) \ x\_2(t) \ \vdots \ x\_n(t) \end{bmatrix}$ 로 정의하여 $x\_1(t) = y(t), \quad x\_2(t) = \dot{y}(t), \quad \ldots, \quad x\_n(t) = \frac{d^{n-1}y(t)}{dt^{n-1}}$ 의 형태로 두면, 원래의 $n$차 미분방정식을 1차 미분방정식 여러 개로 분할할 수 있다.

상태방정식 일반형은 다음과 같다.

$$
\begin{aligned}
\mathbf{\dot{x}}(t) = A \mathbf{x}(t) + B \mathbf{u}(t)
\\
\mathbf{y}(t) = C \mathbf{x}(t) + D \mathbf{u}(t)
\end{aligned}
$$

여기서 $\mathbf{x}(t)$ 는 차원이 $n$인 상태벡터이며, $\mathbf{u}(t)$ 는 차원이 $r$인 입력벡터, $\mathbf{y}(t)$ 는 차원이 $m$인 출력벡터이다. $A$ 는 $n\times n$ 크기의 시스템 행렬(system matrix), $B$ 는 $n\times r$ 크기의 입력 행렬(input matrix), $C$ 는 $m\times n$ 크기의 출력 행렬(output matrix), $D$ 는 $m\times r$ 크기의 전달 행렬(feedthrough matrix)이다.

시스템의 동역학은 $A$와 $B$를 통해 결정되며, 출력방정식에는 $C$와 $D$가 등장한다. 만일 $D$가 영 행렬이라면, 출력은 입력에 직접적으로 의존하지 않고 오직 상태벡터를 통해서만 결정된다. 반면 $D$가 비영 행렬이면, 입력이 그대로 출력에 즉시 반영되는 물리적 구조가 존재함을 의미한다.

#### 블록선도 표현

상태방정식을 블록선도(block diagram)로 나타내면, 시스템의 내부 상태 변화 과정을 보다 직관적으로 살펴볼 수 있다. 아래는 입력과 상태, 출력을 연결한 개략적인 블록선도이다.

{% @mermaid/diagram content="flowchart LR
A\["입력 u(t)"] --> B\["상태방정식: \n \dot{x}(t) = A x(t) + B u(t)"]
B --> C\["상태 x(t)"]
C --> D\["출력방정식: \n y(t) = C x(t) + D u(t)"]
A --> D" %}

입력 $\mathbf{u}(t)$가 주어지면, 현재 상태 $\mathbf{x}(t)$가 $A \mathbf{x}(t) + B \mathbf{u}(t)$에 의해 변화한다. 즉, 시간에 따라 $\mathbf{x}(t)$가 진화(evolve)하고, 이 상태벡터가 다시 $C \mathbf{x}(t) + D \mathbf{u}(t)$를 통해 출력으로 변환된다.

#### 선형시간불변 시스템의 가정

위 상태방정식은 가장 일반적인 비선형 모델에도 적용할 수 있지만, 초급 단계에서는 보통 선형 시간불변(Linear Time-Invariant, LTI) 모델을 가정한다. 즉, 계수가 시간에 따라 변하지 않으며(linear time-invariant), 상태와 입력을 곱하는 행렬 $A, B, C, D$도 모두 상수 행렬로 본다. LTI 모델에서는 선형 중첩(superposition)이 적용되므로, 여러 종류의 해석법이 단순화된다. 이 때문에 고등 과정의 제어이론에서 주로 LTI 모델을 기반으로 다양한 제어 기법(상태피드백, 옵저버 설계 등)을 다루게 된다.

LTI 시스템에서의 상태방정식을 해석하기 위해서는 우선 $A$ 행렬의 고유값과 고유벡터분해 또는 조르당 표준형과 같은 기법을 사용하여 시스템의 성질을 분석한다. 이를 통해 안정성, 응답특성, 과도특성 등을 명확히 규명할 수 있다.

#### 시간영역 해석

선형시간불변 시스템에서 상태방정식을 초기값 $\mathbf{x}(0) = \mathbf{x}\_0$로부터 해석하면, 해는 지수 행렬(exponential matrix)을 통해 다음과 같이 표현된다.

$$
\mathbf{x}(t) = e^{At} \mathbf{x}*0 + \int*{0}^{t} e^{A(t-\tau)} B \mathbf{u}(\tau), d\tau
$$

여기서 $e^{At}$는 행렬지수(matrix exponential)로 정의된다. 행렬 $A$가 대각화되거나, 혹은 조르당 표준형으로 표현 가능하면, 행렬지수의 계산이 상대적으로 단순해진다. 입력 $\mathbf{u}(\tau)$가 특정 형태(예: 계단 입력, 임펄스 입력 등)라면 적분항이 보다 간단히 정리될 수 있다.

출력 $\mathbf{y}(t)$에 대해서도 직접 대입하면

$$
\mathbf{y}(t)  = C \mathbf{x}(t) + D \mathbf{u}(t)  = C e^{A t}\mathbf{x}*0   + C \int*{0}^{t} e^{A(t-\tau)}B,\mathbf{u}(\tau), d\tau   + D \mathbf{u}(t)
$$

와 같은 형태로 기술된다.

#### 초기조건과 상태의 물리적 의미

상태벡터 $\mathbf{x}(t)$는 시스템의 '내부 메모리'에 해당한다. 예를 들어 메커니즘이 포함된 물리시스템에서 질량의 변위와 속도는 각각 필요한 초깃값(initial conditions)을 가지므로, 이를 구성요소로 갖는 상태벡터는 매 시각마다의 동역학적 '현재 상태'를 나타낸다. 이 상태를 통해 시스템의 과거 이력(history)을 요약적으로 표현할 수 있으며, 이를 기반으로 미래 응답을 예측한다.

#### 전달함수와 상태방정식의 대응

선형시간불변 시스템을 해석할 때, 고전적 접근법에서는 주어진 입력-출력 관계를 라플라스 변환하여 전달함수(transfer function)로 표현한다. 한편 현대제어이론에서는 동차(초기조건이 0인) 시스템에 대하여 상태방정식을 통해 같은 시스템을 기술한다. 특정한 LTI 시스템에 대해, 전달함수 표현과 상태방정식 표현은 서로 본질적으로 동일한 정보를 담고 있다. 다만 상태방정식은 여러 개의 입력과 출력이 있을 때 훨씬 유연하고 직관적인 구조를 제공한다.

예를 들어 단일 입력-단일 출력(SISO) 시스템의 전달함수 $G(s)$가

$$
G(s) = \frac{Y(s)}{U(s)}
$$

로 표현되고, 그것이 $n$차 미분방정식으로부터 유도되었다고 하자. 해당 미분방정식을 상태변수로 분할하여

$$
\mathbf{\dot{x}}(t) = A \mathbf{x}(t) + B u(t),  \quad  y(t) = C \mathbf{x}(t) + D u(t)
$$

의 형태로 만들면, 이에 대한 라플라스 변환(초기조건이 모두 영이라고 가정)은

$$
s \mathbf{X}(s) = A \mathbf{X}(s) + B U(s), \quad Y(s) = C \mathbf{X}(s) + D U(s)
$$

가 된다. 여기서 $\mathbf{X}(s)$는 상태벡터 $\mathbf{x}(t)$의 라플라스 변환이며, 입력과 출력의 라플라스 변환은 각각 $U(s)$, $Y(s)$로 쓴다.

행렬연산을 통해 $\mathbf{X}(s)$를 소거하면

$$
\mathbf{X}(s) = (sI - A)^{-1} B U(s)
$$

가 되고, 이를 출력 방정식에 대입하면

$$
Y(s)  = C (sI - A)^{-1} B U(s) + D U(s) = \left\[ C (sI - A)^{-1} B + D \right] U(s).
$$

결국

$$
G(s) = \frac{Y(s)}{U(s)} = C (sI - A)^{-1} B + D
$$

가 성립한다. 이와 같이 $A, B, C, D$ 행렬을 통해 정의된 상태방정식은 특정한 전달함수 형태와 일대일 대응된다. 다만 전이함수가 유일하게 정의되듯이, 상태방정식의 표현 또한 유일하게 정의되는 것은 아니다. 상태변수의 선택에 따라 $A, B, C, D$ 행렬의 형태는 매우 다양해질 수 있다.

#### 상태방정식 표현의 다양성

상태변수의 선정은 시스템 해석자(설계자)의 자유도 중 하나다. 즉, 동일한 물리시스템을 표현하더라도, 위치와 속도를 상태로 둘 수 있고(예: 기계계), 전류와 전압을 상태로 둘 수도 있으며(예: 전기회로), 더 간단하게는 어떤 적분 변수와 미분변수를 상태로 선택해도 무방하다.

이는 외형적으로는 서로 다른 $A, B, C, D$ 행렬 형태를 초래하지만, 모두 같은 입력-출력 동특성을 지니는 모델이 된다. 단, 특정 제어 알고리즘(예: 선형화 기법, 상태피드백, 옵저버 설계)을 적용할 때, 어떤 상태변수를 고르느냐에 따라 계산이 단순해지거나 복잡해질 수 있다는 점을 고려하여 상태변수를 선정한다.

#### 가제어성 및 가관측성

상태공간에서 중요한 개념으로 가제어성(controllability)과 가관측성(observability)이 있다. 이는 시스템의 상태를 원하는 대로 조작하거나 관측할 수 있는지 여부를 나타낸다. 가제어성과 가관측성을 살피기 위해서는 $A, B, C$ 행렬을 이용하는 다음의 고전적인 판별법이 자주 사용된다.

가제어성(controllability)은 상태방정식 내의 모든 상태를 입력으로부터 제어할 수 있는 능력을 의미한다. 일반적으로 $\[B \quad AB \quad A^2B \quad \cdots \quad A^{n-1}B]$를 가제어행렬(controllability matrix)이라 부르는데, 이 행렬이 완전한 랭크($n$)를 가진다면 시스템은 가제어적이라 한다.

가관측성(observability)은 모든 상태를 출력 측정만으로 추정(observe)할 수 있음을 의미한다. 가관측행렬(observability matrix)은

$$
\begin{bmatrix} C \ C A \ C A^2 \ \vdots \ C A^{n-1} \end{bmatrix}
$$

로 정의되며, 이 행렬의 랭크가 $n$이라면 시스템은 가관측적이라 한다.

가제어성이 확보되지 않으면 일부 상태를 아무리 입력을 바꾸어도 원하는 값으로 조작할 수 없고, 가관측성이 깨져 있으면 일부 상태가 어떤 입력-출력 계산으로도 알아낼 수 없는 '블랙박스' 상태로 남아 있게 된다. 따라서 상태공간 모델을 기반으로 제어기를 설계하는 경우, 해당 시스템의 가제어성과 가관측성을 먼저 확인해야 한다.

#### 연속시간과 이산시간에서의 상태방정식

현재까지 살펴본 상태방정식은 연속시간 연립 미분방정식으로 구성된 케이스였으나, 이산시간(discrete-time) 시스템에 대해서도 상태방정식을 비슷한 구조로 표현할 수 있다. 이산시간에서는 미분 대신에 1샘플 전 시각의 상태를 고려하는 차분방정식(difference equation)으로 구성한다. 예를 들어,

$$
\mathbf{x}\[k+1] = A\_d \mathbf{x}\[k] + B\_d \mathbf{u}\[k], \quad \mathbf{y}\[k] = C\_d \mathbf{x}\[k] + D\_d \mathbf{u}\[k]
$$

의 형태로, $k$번째 샘플 시점에서의 상태 $\mathbf{x}\[k]$를 업데이트해 나간다. 따라서 선형시불변(LTI)라는 가정이 유지되면, 연속시간에서와 마찬가지로 시스템 행렬을 이용한 해석과 제어기 설계를 수행할 수 있다.

#### 안정성의 개념과 고유값

상태방정식으로 표현되는 선형시불변 시스템의 안정성은 행렬 $A$의 고유값(eigenvalue)에 의해 결정된다. 연속시간 시스템에서 행렬 $A$의 모든 고유값의 실수가음(real part)이 음수이면 시스템은 극점(pole)이 왼쪽 반평면에 위치하므로 내부적으로 안정하다고 한다. 실수가음이 0보다 큰 고유값이 하나라도 존재하면 불안정하다고 판단하며, 실수가음이 정확히 0이고 나머지는 모두 음수이면 한계 사이(limit case)로서 특별한 조건을 추가로 확인해야 한다.

행렬 $A$가 대각화(diagonalization)될 수 있거나 조르당(Jordan) 표준형으로 표현된다면, 고유값 분해를 통해 상태벡터의 해석이 단순해진다. 예를 들어 $A$가 대각화 가능하여

$$
A = V \Lambda V^{-1}
$$

로 분해될 때,

$$
\mathbf{x}(t)  = e^{At}\mathbf{x}\_0  = V e^{\Lambda t} V^{-1} \mathbf{x}\_0
$$

가 되며, 이때 $\Lambda$의 대각원소들은 $A$의 고유값들이다. 이 고유값들이 모두 음의 실수가음을 가지면 $e^{\Lambda t}$는 $t \rightarrow \infty$에서 영행렬로 수렴하므로(각 대각 원소가 $e^{\lambda\_i t}$ 형태로 감소), 시스템은 안정적이다.

#### Lyapunov 안정성

선형 시스템에서의 안정성 판별에는 Lyapunov 함수(에너지 함수와 유사한 형태)를 사용할 수 있다. 가장 널리 알려진 것은 Lyapunov 행렬방정식으로부터 안정성을 판별하는 기법이다. 대체로 $P$가 대칭 양의 definite 행렬(symmetric positive definite)이고 $A^T P + P A$가 음의 definite(negative definite)이면, 시스템은 안정이라고 결론지을 수 있다. 이는 고차원 행렬 $A$가 지배하는 동역학에 대해, 에너지나 포텐셜과 유사한 스칼라 함수를 구하여 시스템 반응을 조사하는 절차이다.

#### 제어가능 형식과 관측가능 형식

선형시불변 시스템을 상태방정식으로 나타낼 때, 특정 형태로 행렬들을 구성하면 가제어성이나 가관측성 분석 및 제어기 설계가 더욱 간단해진다. 대표적인 예로 제어가능 형식(controllable canonical form)과 관측가능 형식(observable canonical form)이 있다.

제어가능 형식은 모든 계수가 입력행렬 $B$를 통해 명확히 제어된다는 구조를 최대한 드러낸 표준형이며, 다항식 계수를 통해 $A, B$ 행렬을 구성한다. 이 방식으로 시스템을 표현하면, 가제어성이 즉각적으로 확인될 뿐 아니라 폴 배치(pole placement) 등을 간단히 계산할 수 있다.

관측가능 형식은 출력행렬 $C$에서 모든 상태가 관측될 수 있는 구조를 표준화한 것으로, $C$ 행렬의 형태가 단순화된 방식이다. 상태옵저버(observer)를 설계하거나, 가관측성을 확인하고자 할 때 유리하다.

#### 최소 실현(Minimal Realization)

어떤 단일 입력-단일 출력(SISO) 시스템에서 전달함수로 표현한 $G(s)$가 있을 때, 이를 상태방정식으로 옮기면 여러 가지 차수의 실현(realization)이 가능하다. 그 중에서도 차수가 가장 낮으면서 동일한 입력-출력 특성을 만족하는 상태방정식을 최소 실현(minimal realization)이라 한다.

전달함수의 분해 형태에서 약분이 존재하면 불안정된 영모드나 관측 불가능한 모드 등이 나타날 수 있는데, 최소 실현은 이러한 불필요한 모드들을 제거한 상태공간 표현이다. 최소 실현이 아닌 경우, 전달함수상에 드러나지 않는 고차 모드를 상태공간으로 유지하고 있을 수 있다. 이는 물리적으로는 특정 상태가 입력이나 출력과 전혀 연관되지 않아 제어나 관측에 기여하지 않는 경우에 해당한다.

#### 조르당 표준형을 통한 해석

행렬 $A$가 대각화되지 않는 경우, 고유값이 중복되거나 대각화가 불가능하여 조르당(Jordan) 표준형으로 표현할 수 있다. 이때

$$
A = V J V^{-1}
$$

에서 $J$는 조르당 블록으로 구성된 상삼각 행렬이다. 연속시간 모델에서 각 블록의 대각원소는 고유값 $\lambda\_i$이며, 초대각선(super-diagonal)은 1로 배치되어 해당 블록의 크기를 결정한다. 이 구조가 크면 클수록, 특정 고유값에 대한 기저벡터가 충분히 독립적이지 않다는 뜻이고, 지배 미분방정식이 상호 연관된 미분항을 더 복잡하게 포함하고 있음을 의미한다.

조르당 표준형을 이용하면 행렬지수 $e^{At} = V e^{Jt} V^{-1}$를 비교적 체계적으로 계산할 수 있다. 조르당 블록이 1차원이면 보통의 지수항으로 처리되지만, 2차원 이상의 블록에 대해서는 지수함수와 다항식 항이 섞여 나타난다.

#### Cayley-Hamilton 정리

상태방정식 해석에서 행렬 $A$가 만족하는 특성방정식(characteristic equation)을 이용하면, Cayley-Hamilton 정리를 통해 여러 증명이나 연산을 단순화할 수 있다. Cayley-Hamilton 정리에 따르면 행렬 $A$는 자기 자신의 특성다항식을 0으로 만든다. 예를 들어

$$
p(\lambda) = \det(\lambda I - A)  = \lambda^n + a\_{n-1}\lambda^{n-1} + \cdots + a\_1 \lambda + a\_0
$$

라고 하면,

$$
p(A)  = A^n + a\_{n-1}A^{n-1} + \cdots + a\_1 A + a\_0 I  = 0
$$

가 성립한다. 이를 통해 지수행렬 $e^{At}$의 급수 전개에서 불필요한 고차항을 소거하거나, 상태방정식을 해석하는 과정에서 제어위상(Controllability Gramian)이나 관측위상(Observability Gramian)을 단순화하는 데 활용할 수 있다.

#### 상태궤환(State Feedback)과 극 배치

가제어성(controllability)이 만족되는 시스템에서는 상태궤환(state feedback)을 통해 닫힌루프(closed-loop) 극점 위치를 원하는 곳으로 배치할 수 있다. 상태궤환은

$$
\mathbf{u}(t) = -K \mathbf{x}(t)
$$

형태로 정의하며, 이때 궤환 이득행렬(feedback gain matrix) $K$를 적절히 선택해

$$
A - B K
$$

의 고유값을 설계자가 원하는 영역으로 위치시킬 수 있다. 예를 들어 2차 시스템에서 감쇠비와 고유진동수를 맞추고 싶거나, 고차 시스템에서 과도응답 특성을 조절하고 싶은 경우에 유용하다. 시스템이 가제어적이라면, 적절한 $K$가 항상 존재한다.

#### 상태옵저버(Observer)와 폴 배치

상태공간 제어기 설계에서 시스템의 모든 상태 $\mathbf{x}(t)$를 직접 측정할 수 있는 경우는 흔치 않다. 이에 측정 가능한 출력 $\mathbf{y}(t)$와 시스템 모델을 이용하여 내부 상태를 추정(estimation)하는 장치를 상태옵저버(observer)라고 한다. 선형옵저버는

$$
\mathbf{\hat{x}}(t)  = A \mathbf{\hat{x}}(t)  + B \mathbf{u}(t) + L\left\[\mathbf{y}(t) - C \mathbf{\hat{x}}(t)\right]
$$

형태로 구성되며, 옵저버 이득행렬(observer gain) $L$을 통해 실제 상태 $\mathbf{x}(t)$와 추정 상태 $\mathbf{\hat{x}}(t)$ 간의 오차가 빠르게 소멸하도록 설계한다. 이때 닫힌루프(오차 방정식)에서 등장하는 유효 행렬은

$$
A - L C
$$

이며, 이 행렬의 고유값이 적절히 선택되면(가관측성을 전제) 상태추정 과정이 안정적으로 수렴한다.

#### 분리원리(Separation Principle)

선형시불변 시스템에서 상태피드백과 옵저버 설계를 독립적으로 수행한 뒤에 이 둘을 결합해도 원하는 닫힌루프 응답을 얻을 수 있다는 것이 분리원리(separation principle)다. 즉, 먼저 가제어성을 이용해 상태피드백 궤환이득 $K$를 설정하고, 그 다음 가관측성을 활용해 옵저버 이득 $L$을 설계해도, 이를 결합한 뒤의 고유값 배치는 서로 간섭 없이 성립한다. 이는 닫힌루프 시스템에서의 오차방정식

$$
\mathbf{e}(t) = \mathbf{x}(t) - \mathbf{\hat{x}}(t)
$$

및 전체 시스템 행렬의 블록 대각 구조(block diagonal form)가 핵심 기초가 된다. 구체적으로

$$
\begin{bmatrix} \mathbf{\dot{x}}(t) \ \mathbf{\dot{e}}(t) \end{bmatrix} = \begin{bmatrix} A - BK & -BK \ 0 & A - LC \end{bmatrix} \begin{bmatrix} \mathbf{x}(t) \ \mathbf{e}(t) \end{bmatrix},
$$

형태를 확인하면, $A - BK$ 부분과 $A - LC$ 부분이 서로 영향을 주고받지 않는 구조임을 알 수 있다. 따라서 $K$와 $L$을 각각 따로 계산해도, 최종 폐루프가 $A - BK$와 $A - LC$에서 원하는 고유값을 가지도록 설계할 수 있다.

#### LQR (Linear Quadratic Regulator)

상태궤환을 자동으로 구하는 고전적 방법 중 하나가 선형 이차 조절기(Linear Quadratic Regulator, LQR) 설계다. 이는 연속시간 선형시불변 시스템에서

$$
\mathbf{\dot{x}}(t) = A \mathbf{x}(t) + B \mathbf{u}(t)
$$

를 대상으로, 다음과 같은 비용함수(cost function)를 최소화하는 궤환입력 $\mathbf{u}(t)$를 찾는 문제다.

$$
J = \int\_{0}^{\infty}  \left\[ \mathbf{x}(t)^T Q \mathbf{x}(t) + \mathbf{u}(t)^T R \mathbf{u}(t) \right] , dt
$$

여기서 $Q$는 반양의정부호(positive semi-definite) 행렬, $R$은 양의정부호(positive definite) 행렬로 가정한다. LQR 알고리즘은 리카티(Riccati) 방정식을 이용해 궤환이득 $K$를 다음과 같이 구한다.

먼저 리카티 방정식은

$$
A^T P + P A - P B R^{-1} B^T P + Q = 0
$$

형태를 가지며, 이 대칭행렬 $P$가 계산되면

$$
K = R^{-1} B^T P
$$

가 곧 최적 궤환이득이 된다. 이렇게 구해진 상태피드백 입력

$$
\mathbf{u}(t) = -K \mathbf{x}(t)
$$

를 적용하면, 닫힌루프 시스템은 위 비용함수를 최소화하는 안정적 해답을 얻는다.

#### 이산시간 LQR

만일 상태방정식이 이산시간(discrete-time) 형태

$$
\mathbf{x}\[k+1] = A\_d \mathbf{x}\[k] + B\_d \mathbf{u}\[k]
$$

로 주어지면, 대응되는 이산시간 비용함수는

$$
J = \sum\_{k=0}^{\infty} \left\[ \mathbf{x}\[k]^T Q \mathbf{x}\[k] + \mathbf{u}\[k]^T R \mathbf{u}\[k] \right]
$$

형태로 표현된다. 이 경우에도 유사한 리카티 방정식

$$
P = A\_d^T P A\_d - A\_d^T P B\_d  \left(R + B\_d^T P B\_d\right)^{-1} B\_d^T P A\_d + Q
$$

를 풀어 $P$를 구하고,

$$
K = \left(R + B\_d^T P B\_d\right)^{-1} B\_d^T P A\_d
$$

를 얻어

$$
\mathbf{u}\[k] = -K \mathbf{x}\[k]
$$

를 적용하면 최적 상태피드백을 구성할 수 있다. 연속시간과 달리 합이 무한히 진행되는 이산시간 합(cost function)을 최소화하는 과정으로 이해할 수 있으며, 역시 시스템이 가제어적이고 $(Q,R)$가 적절히 양의정부호 조건을 갖추면, 항상 유한한 $P$를 구할 수 있다.

#### LQG (Linear Quadratic Gaussian Control)

LQG 제어는 LQR에 상태옵저버 개념을 결합한 형태다. 시스템에 잡음(disturbance)나 센서 측정노이즈(sensor noise)가 추가로 포함되었을 때, 칼만 필터(Kalman filter)를 이용해 상태추정을 수행하고, 그 추정 상태에 대해 LQR 방식의 궤환을 적용하는 구조다. 가우시안 확률분포를 가정하는 과정에서 최적추정과 최적제어가 결합되고, 이것이 분리원리에 의해 독립적으로 설계가 가능함을 보인다. 따라서 실제 제어시스템에서 잡음이 존재해도 안정적이면서 최소 오차를 보장할 수 있는 합리적인 해법으로 알려져 있다.

#### MIMO 시스템

지금까지 논의한 상태방정식은 사실상 다중입력-다중출력(MIMO) 환경에서도 동일하게 적용된다. 선형시불변 시스템에서

$$
\mathbf{x}(t) \in \mathbb{R}^n,\quad \mathbf{u}(t) \in \mathbb{R}^r,\quad \mathbf{y}(t) \in \mathbb{R}^m
$$

일 때,

$$
\mathbf{\dot{x}}(t) = A \mathbf{x}(t) + B \mathbf{u}(t), \quad \mathbf{y}(t) = C \mathbf{x}(t) + D \mathbf{u}(t)
$$

의 형태로 전개되며, 다만 행렬 $B, C, D$의 열(column)과 행(row)이 여러 개 존재하여 서로 간섭(coupling)이 발생할 수 있다. 이때에도 가제어성, 가관측성, 극 배치 등은 유사한 방식으로 분석되지만, 이제는 $B$와 $C$가 여러 열과 행을 갖게 되어 검토해야 할 행렬이 더 커진다. MIMO 시스템에서의 상태피드백이나 옵저버 설계도 마찬가지로 가능한데, 궤환이득이나 옵저버 이득은 이제 행렬 형태가 된다.

#### 간단 예제(C++ 구현)

상태방정식을 이용한 시뮬레이션 예제로, 2차 시스템에서 LQR 제어를 적용해 볼 수 있다. 예를 들어 다음처럼 C++ 코드로 시뮬레이션할 수 있다.

```cpp
#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

// 매트릭스 곱을 단순화하기 위한 함수
vector<double> matVecMul(const vector<vector<double>>& M, const vector<double>& v) {
    int rows = M.size();
    int cols = M[0].size();
    vector<double> result(rows, 0.0);
    for(int i = 0; i < rows; ++i) {
        for(int j = 0; j < cols; ++j) {
            result[i] += M[i][j] * v[j];
        }
    }
    return result;
}

// 벡터 덧셈
vector<double> vecAdd(const vector<double>& a, const vector<double>& b) {
    vector<double> c(a.size());
    for(int i = 0; i < (int)a.size(); ++i)
        c[i] = a[i] + b[i];
    return c;
}

// 스칼라 곱
vector<double> scalarMul(const vector<double>& v, double s) {
    vector<double> r(v.size());
    for(int i = 0; i < (int)v.size(); ++i)
        r[i] = s * v[i];
    return r;
}

int main() {
    // 2차 시스템 예시: x_dot = A x + B u
    // A = [[0, 1],
    //      [-2, -3]]
    // B = [[0],
    //      [1]]
    // 상태 x = [x1, x2]
    // 샘플링 시간 dt = 0.01 (단순 오일러 적분으로 시뮬레이션)

    vector<vector<double>> A = {{0.0, 1.0},
                                {-2.0, -3.0}};
    vector<vector<double>> B = {{0.0},
                                {1.0}};
    double dt = 0.01;

    // LQR로부터 구했다 가정한 궤환 이득 K
    // u = -Kx 에서 K = [k1, k2]
    // 가제어성 판별 후, 리카티 방정식으로 계산했다고 가정
    // 여기서는 임의 값 지정
    vector<double> K = {1.2, 3.5};

    // 초기 상태
    vector<double> x = {1.0, 0.0}; 

    for(int step = 0; step < 500; ++step) {
        double t = step * dt;

        // 입력 u = -Kx
        double u = -(K[0]*x[0] + K[1]*x[1]);

        // x_dot = A x + B u
        vector<double> Ax = matVecMul(A, x);
        vector<double> Bu = scalarMul(matVecMul(B, {u}), 1.0); 

        // 연속시간 방정식을 단순 오일러 방식으로 적분
        vector<double> x_dot = vecAdd(Ax, Bu);
        x = vecAdd(x, scalarMul(x_dot, dt));

        cout << t << " " << x[0] << " " << x[1] << " " << u << endl;
    }

    return 0;
}
```

위 예제에서 $A, B$ 행렬로 구성된 2차 시스템에 대해, $K$는 임의로 지정한 상태피드백 궤환이득이다. 실제 LQR 설계를 거친 뒤의 값을 사용하면, 더 엄밀하게 오차와 에너지 비용을 최소화하는 제어가 가능하다.

#### 내부 모드 분리와 디커플링(Decoupling)

선형시불변 MIMO 시스템에서 여러 입력과 여러 출력이 서로 얽혀 있을 때, 이를 decoupling 기법으로 각 입력-출력 간의 상호작용을 줄이거나 없앨 수 있다. 상태방정식 관점에서는 적절한 좌표변환(coordinate transformation)이나 궤환을 통해, 블록대각화(block diagonalization) 혹은 준대각화(quasi-diagonalization)를 시도한다. 만일 시스템이 완전히 디커플링 가능하다면, 서로 독립적인 단일입출력 블록들로 분해하여 개별 제어기를 설계할 수도 있다. 다만 모든 MIMO 시스템이 선형 영역에서 완전 디커플링이 가능한 것은 아니며, 비선형 영역에서는 추가 복잡도가 따른다.

디커플링을 위해서는 가제어성과 가관측성을 비롯하여 특정 가역성(invertibility) 조건을 만족해야 한다. 예를 들어, 전송영역에서 $G(s) = C(sI - A)^{-1} B + D$를 블록대각화 혹은 블록 삼각화하려면, 입력 출력 차원에 따른 행렬의 영공간(null space)과 상공간(range space)이 조화를 이뤄야 한다. 이는 주로 공정제어(process control) 분야의 다변수 시스템에서 주파수영역 해석과 함께 활용된다.

#### 좌표변환(Coordinate Transformation)

선형시불변 상태방정식에서

$$
\mathbf{\dot{x}}(t) = A,\mathbf{x}(t) + B,\mathbf{u}(t)
$$

에 대해, 선형 변환행렬 $T$가 가역(regular)이라면 좌표 $\mathbf{z}(t) = T \mathbf{x}(t)$로 변환할 수 있다. 이때

$$
\mathbf{\dot{z}}(t)  = T,\mathbf{\dot{x}}(t)  = T,A,\mathbf{x}(t) + T,B,\mathbf{u}(t) = (T,A,T^{-1}),\mathbf{z}(t) + (T,B),\mathbf{u}(t)
$$

가 되어, 새로운 좌표계에서의 시스템 행렬은

$$
A' = T A T^{-1},  \quad B' = T B
$$

가 된다. 출력 방정식

$$
\mathbf{y}(t) = C \mathbf{x}(t) + D \mathbf{u}(t)
$$

역시

$$
\mathbf{y}(t)  = C,T^{-1},\mathbf{z}(t) + D,\mathbf{u}(t)
$$

로 표현되고, 따라서

$$
C' = C,T^{-1},  \quad  D' = D
$$

의 형태로 바뀐다. 이는 고전적 전달함수 해석에서 분자 다항식과 분모 다항식을 변환하는 것과는 차원이 다른 유연성을 부여한다. 적절한 $T$의 선택을 통해 $A'$가 보다 간단한 구조(대각 혹은 조르당 블록)를 갖도록 만들거나, 제어가능 형식 혹은 관측가능 형식을 얻을 수 있다.

#### Balanced Realization

MIMO 시스템에서 최소 실현을 구하는 과정에서, 가제어성과 가관측성이 균형 있게 분포되는 좌표계를 찾는 방법이 Balanced Realization 기법이다. 상태궤환과 좌표변환을 통해 Hankel singular value가 대각으로 정렬된 좌표계를 만들면, 중요한 상태와 그렇지 않은 상태가 분명히 구분된다. 그 결과 차원 축소(model order reduction)를 할 때, 무시해도 되는 상태에 대응되는 Hankel singular value가 작으므로, 그 축을 잘라내도 입출력 특성에 큰 영향을 주지 않는다.

Balanced Realization 절차에서는 먼저 시스템의 제어가능 그라미안(Controllability Gramian) $W\_c$와 관측가능 그라미안(Observability Gramian) $W\_o$를 구한다. 그 뒤 $W\_c W\_o$의 특이값 분해(SVD)를 통해, Hankel singular value와 대응되는 고유벡터를 추출한다. 그렇게 얻은 변환행렬로 상태방정식을 옮기면, 균형 잡힌(balanced) 좌표계가 되며, 상태가 고루 분포된 구조로 표현된다.

#### 강인제어(Robust Control)와 상태공간 해석

실제 시스템은 파라미터가 정확히 알려지지 않거나 시간에 따라 변동이 있을 수 있다. 이 경우 고전적 LQR이나 폴 배치 기법은 모델링 오차에 민감할 수 있으므로, 강인제어(Robust Control) 이론을 통해 이를 보완한다. 대표적으로

$$
H\_\infty
$$

제어나 $\mu$-분석과 합성 등이 활용된다. 상태공간에서 $A, B, C, D$ 행렬을 기준으로 잡음이나 불확실성을 반영한 일반화된 식을 구성하고, 이를 최소-최대 혹은 $\gamma$-최적화 관점에서 해석한다.

$H\_\infty$ 제어에서는 시스템에 외란(disturbance) 입력이 들어오고, 특정 출력(오차신호)을 최소화하고자 할 때, 그 최대치를 최소화하는 형태의 게임 이론적 문제를 푸는 셈이다. 이 문제에서도 리카티 방정식의 해를 구하거나, 혹은 LMIs(Linear Matrix Inequalities)를 풀어서 궤환행렬을 설계한다. 이러한 과정에서 상태공간 표현은 불확실성이나 잡음을 구조적으로 쉽게 추가·제거할 수 있는 장점이 있다.

#### 주파수영역 해석과 상태방정식

고전제어에서 전이함수를 $G(s)$로 두고 보드선도(Bode plot), 나이퀴스트선도(Nyquist plot) 등을 분석하듯이, 상태방정식도 주파수영역 해석에 대응된다.

$$
G(s) = C (sI - A)^{-1} B + D
$$

를 바탕으로 주파수 $\omega$에 대해 $s = j\omega$를 대입하면,

$$
G(j\omega) = C (j\omega I - A)^{-1} B + D
$$

가 된다. 이를 통해 이득과 위상 특성을 분석하고, 안정여유(gain/phase margin)를 조사할 수 있다. 또한 $A$ 행렬의 극점 이동과 $\mathbf{x}(t)$의 과도응답이 주파수영역에서 어떻게 드러나는지 파악할 수 있다. MIMO 시스템의 경우, 주파수응답 행렬이 여러 개의 싱귤러 값(singular value)을 가지므로, SVD를 통해 최대이득과 최소이득을 해석하는 방법도 쓰인다.

#### 비선형 시스템에 대한 선형화

실제 물리시스템은 엄밀히 말해 비선형(nonlinear) 동역학을 갖는 경우가 대부분이다. 그러나 제어기의 설계와 해석 편의를 위해, 운용점(operation point) 부근에서 테일러 전개에 기초한 선형화(linearization)를 수행한다. 예를 들어

$$
\dot{\mathbf{x}} = f(\mathbf{x}, \mathbf{u}),  \quad \mathbf{y} = g(\mathbf{x}, \mathbf{u})
$$

라는 비선형 상태공간 모델이 주어지면, 특정 평형점 $(\mathbf{x}\_e, \mathbf{u}\_e)$에서

$$
A = \left.\frac{\partial f}{\partial \mathbf{x}}\right|\_{(\mathbf{x}\_e,\mathbf{u}*e)},  \quad B = \left.\frac{\partial f}{\partial \mathbf{u}}\right|*{(\mathbf{x}\_e,\mathbf{u}*e)}, \quad C = \left.\frac{\partial g}{\partial \mathbf{x}}\right|*{(\mathbf{x}\_e,\mathbf{u}*e)},  \quad D = \left.\frac{\partial g}{\partial \mathbf{u}}\right|*{(\mathbf{x}\_e,\mathbf{u}\_e)}
$$

를 계산하여, 연속시간 LTI 시스템으로 근사한다. 이렇게 얻은 $A, B, C, D$ 행렬을 이용해 고전적 선형제어 이론을 적용하면, 평형점 부근에서의 국부적 안정성과 응답특성을 설계할 수 있다. 비행체나 로봇, 화학 공정 등에서 널리 쓰이는 방법이다.
