비선형 함수의 정의

확장 칼만 필터에서 중요한 역할을 하는 야코비 행렬은, 비선형 시스템을 선형화할 때 사용된다. 여기서 시스템은 비선형 함수로 표현될 수 있다. 상태 벡터를 \mathbf{x} \in \mathbb{R}^n, 관측 벡터를 \mathbf{z} \in \mathbb{R}^m이라 할 때, 상태와 관측 간의 관계는 다음과 같은 비선형 함수로 표현된다:

\mathbf{z} = h(\mathbf{x})

여기서 h(\mathbf{x})는 비선형 함수이다.

야코비 행렬의 정의

야코비 행렬은 함수 h(\mathbf{x})의 미분을 표현하며, 이는 함수가 작은 변화에 대해 어떻게 반응하는지 나타낸다. 즉, h(\mathbf{x})를 선형 근사할 때 필요한 기울기 정보가 야코비 행렬로 나타난다. 야코비 행렬 \mathbf{J}_h는 다음과 같이 정의된다:

\mathbf{J}_h = \frac{\partial h(\mathbf{x})}{\partial \mathbf{x}} = \begin{bmatrix} \frac{\partial h_1}{\partial x_1} & \frac{\partial h_1}{\partial x_2} & \cdots & \frac{\partial h_1}{\partial x_n} \\ \frac{\partial h_2}{\partial x_1} & \frac{\partial h_2}{\partial x_2} & \cdots & \frac{\partial h_2}{\partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial h_m}{\partial x_1} & \frac{\partial h_m}{\partial x_2} & \cdots & \frac{\partial h_m}{\partial x_n} \end{bmatrix}

이 행렬은 각 관측 함수 h_i(\mathbf{x})의 상태 변수 x_j에 대한 편미분을 포함한다.

야코비 행렬의 계산 과정

실제로 야코비 행렬을 계산할 때는 각 성분을 차례대로 편미분해야 한다. 예를 들어, 상태 벡터 \mathbf{x} = \begin{bmatrix} x_1 & x_2 & \cdots & x_n \end{bmatrix}^\top와 관측 벡터 \mathbf{z} = \begin{bmatrix} z_1 & z_2 & \cdots & z_m \end{bmatrix}^\top에서, 각 성분 z_i는 상태 벡터의 각 성분에 대해 편미분될 수 있다. 이때 계산된 편미분 값이 야코비 행렬의 각 원소를 구성한다.

예시

간단한 예로, 2차원 상태 공간에서 비선형 관측 함수가 다음과 같이 주어진다고 가정하자:

h(\mathbf{x}) = \begin{bmatrix} x_1^2 + x_2^2 \\ \sin(x_1) \end{bmatrix}

이 경우, 야코비 행렬 \mathbf{J}_h는 다음과 같다:

\mathbf{J}_h = \frac{\partial h(\mathbf{x})}{\partial \mathbf{x}} = \begin{bmatrix} 2x_1 & 2x_2 \\ \cos(x_1) & 0 \end{bmatrix}

따라서 각 요소는 다음과 같이 계산된다: - \frac{\partial h_1}{\partial x_1} = 2x_1, \frac{\partial h_1}{\partial x_2} = 2x_2 - \frac{\partial h_2}{\partial x_1} = \cos(x_1), \frac{\partial h_2}{\partial x_2} = 0

이렇게 얻은 야코비 행렬은 확장 칼만 필터의 업데이트 단계에서 사용된다.

고차원 시스템에서의 야코비 행렬

고차원 시스템에서도 동일한 원리를 적용하여 야코비 행렬을 계산할 수 있다. 각 성분을 편미분한 후, 행렬 형태로 정리하면 된다. 고차원 시스템에서는 성분이 많아 계산이 복잡해질 수 있으므로, 계산 효율성을 고려해야 한다. 수치적 미분 방법을 사용할 수 있으며, 이는 매우 복잡한 비선형 함수의 경우 유용할 수 있다.

수치적 미분을 통한 야코비 행렬 계산

때로는 비선형 함수가 복잡하거나 그 편미분을 구하기 어려울 수 있다. 이 경우, 수치적 미분(numerical differentiation)을 사용하여 야코비 행렬을 근사적으로 계산할 수 있다. 수치적 미분은 함수의 미세한 변화에 따른 함수 값의 변화를 계산하여 미분 값을 추정하는 방법이다.

수치적 미분을 수행하려면, 상태 벡터 \mathbf{x}의 각 성분을 작은 양 \epsilon만큼 변화시킨 후 함수 값의 변화를 관찰하여 편미분을 근사한다. 이는 다음과 같은 방식으로 계산된다:

\frac{\partial h(\mathbf{x})}{\partial x_i} \approx \frac{h(\mathbf{x} + \epsilon \mathbf{e}_i) - h(\mathbf{x})}{\epsilon}

여기서 \mathbf{e}_ix_i 성분을 제외한 나머지 성분이 0인 단위 벡터이다. 이 방식은 실제 시스템에서 계산이 어려운 경우에도 쉽게 적용할 수 있으며, 편미분을 구할 필요가 없는 장점이 있다. 하지만, \epsilon 값이 너무 작으면 수치적 불안정성이 발생할 수 있으므로 적절한 값을 선택하는 것이 중요하다.

수치적 미분의 장점과 단점

수치적 미분을 사용하는 것에는 장단점이 있다.

장점:

단점:

수치적 미분을 통한 야코비 행렬 계산의 예

수치적 미분의 예로, 다음과 같은 비선형 함수가 주어졌다고 가정하자:

h(\mathbf{x}) = \begin{bmatrix} x_1^2 + x_2 \\ \sin(x_1) + \cos(x_2) \end{bmatrix}

여기서 상태 벡터 \mathbf{x} = \begin{bmatrix} x_1 & x_2 \end{bmatrix}^\top에 대해 수치적 미분으로 야코비 행렬을 계산하면, 각 성분에 대해 다음과 같은 방법으로 근사할 수 있다:

  1. x_1에 대해 \epsilon만큼 변화시켜 계산:
\frac{\partial h(\mathbf{x})}{\partial x_1} \approx \frac{h\left( \begin{bmatrix} x_1 + \epsilon \\ x_2 \end{bmatrix} \right) - h\left( \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} \right)}{\epsilon}
  1. x_2에 대해 \epsilon만큼 변화시켜 계산:
\frac{\partial h(\mathbf{x})}{\partial x_2} \approx \frac{h\left( \begin{bmatrix} x_1 \\ x_2 + \epsilon \end{bmatrix} \right) - h\left( \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} \right)}{\epsilon}

이 과정을 각 성분에 대해 수행하면, 최종적으로 야코비 행렬을 근사할 수 있다.

고차원 상태 벡터의 수치적 미분

고차원 상태 벡터에 대해서도 수치적 미분을 적용할 수 있다. 상태 벡터의 차원이 증가할수록 각 성분에 대해 동일한 방식으로 미세한 변화를 주고 함수 값을 비교하여 편미분을 근사할 수 있다. 고차원 벡터에서는 계산 시간이 증가할 수 있지만, 여전히 편미분을 직접 계산하는 것보다 유용한 방법일 수 있다.