본문 바로가기

분류 전체보기355

넘파이(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.
행렬의 조건수 (Condition Number) 어떤 함수 \(y=f(x)\)의 조건수(condition number)는 함수의 입력인 \(x\)의 작은 변화울에 대해 함수의 출력인 \(y\)의 변화율이 얼마인지를 나타내는 수로서, 함수의 민감도를 측정하는 지표이다. 행렬의 조건수도 일반 함수의 조건수 정의를 이용하여 유도할 수 있다. 다음과 같이 행렬 \(A \in \mathbb{R}^{n \times n}\)와 어떤 벡터 \( \mathbf{b} \in \mathbb{R}^n\)에 관한 방정식이 있다고 하자. \[ A \mathbf{x}= \mathbf{b} \] 여기서 벡터 \(\mathbf{b}\)가 어떤 작은 오차로 인하여 \(\mathbf{b}+\Delta \mathbf{b}\)로 변화했다면 이 방정식의 해 \(\mathbf{x}\)도 \(.. 2021. 3. 2.
기본 궤도 미분 방정식 - 궤적 방정식 이체문제 가정하에서 다음과 같이 기본 궤도 미분 방정식을 유도한 바 있다. \[ \frac{^i d^2 \vec{r}}{ dt^2} + \frac{\mu}{r^3} \vec{r} =0 \] 여기서 \(\mu=GM\)은 중력 파라미터, \(\vec{r}\)은 관성 좌표계 \(\{i\}\)의 원점에서 질점 \(m\)까지의 위치 벡터, \(r\)은 위치 벡터의 크기, 즉 거리다. 위 식으로 알 수 있는 것에는 또 무엇이 있을까. 궤도의 모양을 알 수 있다. 궤도 미분 방정식에 의하면 궤도의 모양은 4가지밖에 없다. 원궤도, 타원궤도, 포물선궤도, 쌍곡선궤도가 그것이다. 어떻게 궤도의 모양을 알 수 있는지 살펴보도록 하자. 사실 궤도 미분 방정식을 풀면 질점 \(m\)의 운동 궤도 모양을 알 수 있다. 위 식은.. 2021. 3. 1.
[POD-4] Gappy POD 매트랩 예제 Gappy POD 방법을 이용하여 손상된 얼굴 사진을 복구해 보자. 코드는 매트랩으로 작성했다. (1) Extended Yale Face Database B에서 36명의 정면 얼굴 사진을 추출하여 스냅샷 행렬을 만든다. 데이터셋의 샘플 평균을 계산한다. X = yaleFace(:, 1:36); % 32,256 by 36 mu = mean(X,2); (2) 모든 데이터셋을 다음과 같이 치환한다. \[ \mathbf{y}^{(i)} = \mathbf{x}^{(i) } - \mathbf{\mu} \] (3) 데이터셋의 스냅샷 행렬을 만든다. \[ Y = [ \mathbf{y}^{(1) } \ \mathbf{y}^{(2) } \ \cdots \ \mathbf{y}^{(m) } ] \ \in \mathbb{R}^.. 2021. 3. 1.
[POD-3] 개피 적합직교분해 (gappy POD) 적합직교분해(POD) 또는 주성분 분석(PCA)은 \(n\)차원 공간상에서 \(d\)개의 POD 모드(mode) \(\mathbf{w}_1, \mathbf{w}_2, ..., \mathbf{w}_d\)로 구성된 부분 공간에 데이터 벡터 \(\mathbf{y}(t)\)를 투사(projection)할 때 투사 오차가 최소가 되도록 POD 모드를 결정하는 알고리즘이다. \[ \begin{align} \mathbf{y}^{(i)} & \approx \sum_{j=1}^d a_{ij} \mathbf{w}_j \\ \\ &= \begin{bmatrix} \mathbf{w}_1 & \mathbf{w}_2 & \cdots & \mathbf{w}_d \end{bmatrix} \begin{bmatrix} a_{i1} \\.. 2021. 3. 1.
[POD-2] 스냅샷 적합직교분해 (snapshot POD) 고전 적합직교분해(classical POD)는 공간은 이산화시켰지만 시간은 연속적이다. 하지만 실제 유체역학이나 구조해석 문제의 경우 벡터 필드는 일정한 시간 간격의 싯점에서 수치해석으로 계산된 데이터나 또는 측정된 데이터로 주어진다. 고전 POD의 또 다른 문제점은 차원이 \(n=10^8 \sim 10^{10}\)에 달하는 매우 고차원 행렬의 고유값과 고유벡터를 계산해야 하는데 있다. 이 정도 규모의 차원에서 이를 계산하는 것은 거의 불가능하다. 이러한 고전 POD의 단점을 극복하기 위한 방안으로 스냅샷(snapshot) POD가 개발되었다. 스냅샷 POD는 벡터 필드의 공간 뿐만 아니라 시간도 이산화시켰다는 데 특징이 있다. 스냅샷이란 일정한 싯점에서 수집한 데이터의 집합을 뜻한다. 먼저 벡터 필드 .. 2021. 3. 1.