본문 바로가기

전체 글324

[CR3BP] 운동방정식의 무차원화 원궤도제한삼체문제(CR3BP)의 운동방정식은 비선형 연립 미분방정식이므로 수치적으로 풀어야 하는데, 방정식에는 스케일이 크게 다른 항이 혼재되어 있다. 예를 들면 각속도 \(\omega_s\)는 매우 작은 값을 갖는 반면 질량, 거리 등은 매우 큰 값을 갖는다. 이와 같이 수치적 방법에서 스케일이 크게 다른 값이 혼재되어 있을 때 각 항들을 적절한 척도를 이용하여 스케일을 조정한다면 수치 오차를 최소화시킬 수 있다. CR3BP의 운동방정식을 무차원화(nondimensionalization)하여 수치 오차를 최소화하고 또한 사용되는 파라미터를 줄여 방정식을 단순화시켜 보자. 방정식을 무차원화하기 위해서는 먼저 기준 질량, 기준 거리, 기준 시간을 정해야 한다. 기준 질량 \(m_0\)으로서 두 주요(pri.. 2021. 4. 9.
[CR3BP] 운동방정식 유도 삼체문제(three-body problem)에서 세 질점 중 한 개의 질점의 질량 \(m_3\)이 다른 두 질점 \(m_1\), \(m_2\)보다 훨씬 작아서 무시할 수 있을 정도라고 가정해 보자. 그러면 질점 \(m_3\)는 두 질점 \(m_1\) 및 \(m_2\)에는 어떤 영향도 미치지 못할 것이므로 두 질점 \(m_1\)과 \(m_2\)의 운동은 이체문제(two-body problem)로 간주할 있다. 이와 같이 삼체문제를 특수한 경우로 제한한 문제를 '제한된 삼체문제(restricted three-body problem)' 라고 한다. 제한된 삼체문제에서 두 질점 \(m_1\)과 \(m_2\)의 운동은 이체문제를 따르므로 그 궤도는 두 질점 공통의 질량중심점을 중심으로 한 원, 타원, 포물선, 쌍.. 2021. 4. 8.
삼체문제 (Three-Body Problem) 이체문제(two-body problem)에서는 전 우주에 질점(point mass)이 딱 2개 밖에 없으며 두 질점 사이에는 만유인력만 작용한다는 가정하에서 두 질점의 운동에 관한 문제를 다루었다. 이체문제는 해석적인 해가 존재했으며 두 질점의 절대적인 또는 상대적인 궤도의 모양은 원, 타원, 포물선, 쌍곡선 중의 하나였다. 삼체문제(three-body problem)는 이체문제에 질점 하나를 추가한 것이다. 전 우주에 질점이 3개밖에 없으며 세 질점 사이에 만유인력만 작용한다는 가정하에서 세 질점의 운동을 다루는 문제다. 삼체문제는 질점 하나를 더 추가했을 뿐이지만 이체문제와는 확연히 다른 매우 복잡한 운동의 모습을 보여준다. 우선 삼체문제는 해석적인 해가 없다. 수치적으로 운동 방정식을 풀어야 한다... 2021. 4. 7.
역전파 (Backpropagation) 계산 선형 레이어(또는 fully-connected layer, 완전 연결 레이어)는 레이어의 모든 뉴런이 이전 레이어의 모든 뉴런과 연결된 레이어이다. 선형 레이어는 다음과 같이 선형 방정식으로 표현할 수 있다. \[ \mathbf{z}^{(l+1) }=W^{(l) } \mathbf{a}^{(l) }+\mathbf{b}^{(l) } \] 여기서 위첨자 \(l\)은 \(l\)번째 은닉(hidden) 레이어를 뜻하고 \(W^{(l) }\)은 가중치(weights), \(\mathbf{b}^{(l) }\)는 바이어스를 나타낸다. 레이어의 출력 \(\mathbf{z}^{(l+1) }\)은 활성함수(activation function) \(\sigma^{(l+1)}\)를 통과하여 \(\mathbf{a}^{(l+1)}.. 2021. 3. 31.
벡터 함수를 행렬로 미분하기 다변수 스칼라 함수를 벡터로 미분한 것을 그래디언트(gradient), 벡터 함수를 벡터로 미분한 것을 자코비안(Jacobian), 스칼라 함수를 벡터로 두 번 미분한 것을 헤시안(Hessian)이라고 한다. 이번에는 스칼라 함수를 행렬로 미분해 보자. \( X=\begin{bmatrix} x_{11} & \cdots & x_{1n} \\ \vdots & \ddots & \vdots \\ x_{m1} & \cdots & x_{mn} \end{bmatrix} \in \mathbb{R}^{m \times n}\) 가 행렬이고 스칼라 함수 \(f(X)\)가 주어졌을 때 \(f(X)\)에 대한 \(X\)의 미분은 다음과 같이 정의한다. \[ \frac{d f}{d X} = \begin{bmatrix} \frac.. 2021. 3. 27.
다변수 함수의 연쇄법칙 (Chain Rule) 연쇄법칙(chain rule)은 합성함수(composite function)의 도함수를 구할 때 유용하게 사용되는 법칙이다. 합성함수란 두개 이상의 함수를 연결하여 하나의 함수로 만드는 연산을 말한다. 연쇄법칙은 신경망을 학습시킬 때 사용되는 역전파(backpropagation) 알고리즘의 근간을 이룬다. 벡터 \(\mathbf{y}=[y_1 \ \ y_2 ]^T\)를 변수로 하는 다변수 스칼라 함수 \(f(\mathbf{y})\)의 미분 \(df\)는 다음과 같이 계산된다. \[ df= \frac{\partial f}{\partial y_1} dy_1 + \frac{\partial f}{\partial y_2} dy_2 \tag{1} \] 한편 \(y_1, \ y_2\)도 각각 \(\mathbf{x}=.. 2021. 3. 23.
바람 에너지 바람(wind)이 갖는 운동 에너지는 얼마일까. 그리고 그 중 얼마나 전기 에너지로 변환시킬 수 있을까. 바람 에너지를 전기 에너지로 변환해 주는 장치가 풍력터빈(Wind Turbine)이다. (어린 시절 바람개비를 갖고 놀던 사람으로서 Wind Turbine을 바람터빈이라고 번역하면 어떨까 싶다.) 풍력터빈은 단독으로 운영되기도 하지만 보통 수 십개에서 수 백개를 한꺼번에 운용하는 것이 보통이다. 풍력터빈을 모아 놓은 단지를 Wind Farm이라고 하는데 번역은 풍력단지라고 한다. (TV동물농장의 애청자로서 이 역시 바람농장이라고 번역하면 어떨까 싶다.) 속도가 \(v_1\)이고 질량이 \(m\)인 공기 덩어리가 갖는 운동 에너지는 \(E_{wind}=\frac{1}{2} mv_1^2\)이다. 파워(p.. 2021. 3. 17.
Model Subclassing 멀티 입력 신경망 모델 구현 방법 Model Subclassing API를 사용하여 입력을 여러 개 갖는 즉, 멀티 입력 신경망 모델을 어떻게 구현하고 빌드(build)할 수 있을까. 강화학습의 DDPG알고리즘에서는 행동가치 함수(actor-value function)를 크리틱(critic) 신경망으로 구현한다. 크리틱 신경망은 입력으로 상태(state)와 행동(action)등 두 개를 받는데, 이를 Model Subclassing API를 이용해서 구현해 보자. 구현해야 할 신경망 구조는 다음 그림과 같다. 상태변수를 첫번째 은닉층에서 처리한 후 두번째 은닉층에서 행동과 병합하는 구조다. from tensorflow.keras.models import Model from tensorflow.keras.layers import Input.. 2021. 3. 16.
tf.reduce_sum 함수 tf.reduce_sum 은 텐서의 모든 성분의 총합을 계산하는 함수다. 예를 들어 다음과 같은 \(2 \times 1 \times 3\) 텐서 \(A\)를 구성하는 모든 성분의 총합을 구하기 위해서 tf.reduce_sum(A) 하면 21 이 나온다. 이 때 모든 차원(dimension)은 사라진다. import tensorflow as tf A = tf.constant([[[1, 2, 3]], [[4, 5, 6]]]) print("A=", A) print(tf.reduce_sum(A)) Output: A= tf.Tensor( [[[1 2 3]] [[4 5 6]]], shape=(2, 1, 3), dtype=int32) tf.Tensor(21, shape=(), dtype=int32) 텐서 \(A\)의.. 2021. 3. 12.
넘파이(numpy)에서 행렬 연산 행렬의 덧셈과 뺄셈은 행렬의 구성 성분(element) 단위의 계산이다. 덧셈과 뺄셈에서는 기본적으로 두 행렬의 행과 열의 크기가 같아야 한다. 예를 들어 행렬 \(A\)와 \(B\)의 덧셈과 뺄셈은 다음과 같다. \[ \begin{align} & A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}, \ \ \ B = \begin{bmatrix} 7 & 8 & 9 \\ 10 & 11 & 12 \end{bmatrix} \\ \\ & C=A+B = \begin{bmatrix} 8 & 10 & 12 \\ 14 & 16 & 18 \end{bmatrix} \\ \\ & D=A-B = \begin{bmatrix} -6 & -6 & -6 \\ -6 & -6 & -6 .. 2021. 3. 12.
넘파이(numpy)에서 행렬 모양 바꾸기, 자르기, 확장하기 먼저 \(2 \times 3\) 행렬 \(A\)를 생성해 보자. \[ A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} \] import numpy as np A = np.array([[1,2,3], [4,5,6]]) 이 행렬을 \(3 \times 2\) 로 바꾼 행렬 \(B\)를 만들려면 ndarray.reshape 라는 함수를 사용한다. \[ B = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix} \] B = A.reshape((3,2)) print("A=",A, "\nB=",B) 소괄호가 두 개가 있음에 주의해야 한다. 성분의 배치 순서는 행렬 \(A\)의 첫 행의 처음부터 시작하여 오른쪽으로 가면서.. 2021. 3. 11.
넘파이(numpy)에서 행렬 생성 매트랩에 익숙한 사용자가 파이썬을 사용하게 되면 불편한 점이 몇 가지가 있는데 그 중에서도 가장 불편한 것이 행렬에 관한 것이 아닐까 싶다. 행렬 생성부터 시작하여, 부분 선택, 성분 바꾸기, 행렬 확장, 행렬 연산에 이르기까지 다 불편한 것 같다. 하지만 파이썬을 쓰려면 넘파이 스타일의 행렬에 익숙해져야 한다. 넘파이에서는 행렬을 어레이(array)로 부른다. 넘파이의 어레이 클래스는 ndarray이다. n-dimensional array란 뜻이다. 고차원 어레이가 기본인 모양이다. 차원(dimension)은 우리가 일반적으로 얘기하는 행렬의 차원이다. 예를 들어서 2차원 어레이는 \(N\)행과 \(M\)열로 이루어진 \(N \times M\) 행렬이다. 3차원 어레이는 행과 열, 그리고 깊이가 있는 .. 2021. 3. 11.
칼만필터 알고리즘 칼만필터는 수학 알고리즘이다. 따라서 수학식 없이는 칼만필터를 사용할 수도 이해할 수도 없다. 그렇다고 칼만필터 유도과정을 자세히 이해할 필요까지는 없다. 결과만 잘 이해하고 있어도 칼만필터를 사용할 수 있다. 우선 칼만필터 알고리즘을 수학식으로 써 보겠다. 칼만필터는 다음과 같이 주어진 선형 동적 시스템 모델과 측정 모델, \[ \begin{align} & \mathbf{x}_{t+1}= F_t \mathbf{x}_t+G_t \mathbf{u}_t+ \mathbf{w}_t \\ \\ & \mathbf{z}_t=H_t \mathbf{x}_t+ \mathbf{v}_t \end{align} \] 을 이용하여, 시스템의 상태변수 \(\mathbf{x}(k)\)를 다음과 같이 시간 업데이트와 측정 업데이트 등 .. 2021. 3. 4.
칼만필터란 무엇인가 공대 출신이라면 칼만필터를 한번쯤은 들어 보았을 것이다. 조금 더 관심을 가진 사람이라면 칼만필터가 다음과 같은 일을 한다고 들었을 것이다. 칼만필터로 신호에 섞인 노이즈를 제거할 수 있다. 칼만필터로 센서가 측정하지 못하는 것도 추정할 수 있다. 칼만필터로 여러 센서를 융합하여 더 좋은 측정값을 만들 수 있다. 칼만필터로 기계 장치에 난 고장을 감지할 수 있다. 칼만필터로 적 항공기를 추적할 수 있다. 칼만필터로 선물 또는 주식의 가격을 예측할 수 있다. 이 정도라면, 칼만필터만 잘 다룰 줄 알면 뭔가 대단한 일을 할 수 있을 것 같다는 생각이 들 것이다. 그래서 칼만필터는 공대 출신에게 로망으로 알려져 있다. 실제로 칼만필터는 공학의 모든 분야에 걸친 막대한 영향력 때문에 추정 이론 분야의 가장 위대.. 2021. 3. 3.