본문 바로가기

전체 글350

[DMD-3] DMDior 입출력이 포함된 확장 DMD인 DMDio (DMD with input/output) 알고리즘을 유도해 보았다 (https://pasus.tistory.com/225). 원래 시스템을 식별한 후에 축소 모델 (ROM, reduced order model)로 근사화 하는 순서였다. 이번에는 이와 약간 다른 접근 방법을 사용해 보고자 한다. 바로 축소 모델을 식별하는 방법이다. 이러한 방법을 DMDior (DMDio for reduced order model)라고 한다. 식별하고자 하는 미지의 이산시간 시스템이 식 (1)과 같이 표현된다고 하자. \[ \begin{align} \mathbf{x}_{k+1} &= A \mathbf{x}_k+B \mathbf{u}_k \tag{1} \\ \\ \mathbf{y}_.. 2022. 11. 8.
Frobenius Norm 최소화 문제 행렬 \(A \in \mathbb{R}^{n_1 \times n_2} \), \(B \in \mathbb{R}^{n_3 \times n_4}\), \(Y \in \mathbb{R}^{n_1 \times n_4}\) 가 주어졌을 때, 다음과 같은 프로베니우스 놈(Frobenius norm)을 최소화하는 행렬 \(X \in \mathbb{R}^{n_2 \times n_3}\) 를 구하는 문제를 프로베니우스 놈 최소화 문제라고 한다. \[ X_{opt}= \arg \min_{X} \lVert AXB-Y \rVert_F \tag{1} \] 참고로 어떤 행렬 \(M\) 의 프로베니우스 놈 \( \lVert M \rVert _F\) 는 다음과 같이 정의된다. \[ \lVert M \rVert _F= \sqrt{ t.. 2022. 11. 3.
[DMD-2] DMDio 표준 DMD의 한 가지 제한 사항은 시스템의 운동을 바꾸거나 측정할 수 있는 외부 입력과 출력이 포함된 모델을 생성할 수 없다는 것이다. 이제 표준 DMD 방법을 확장하여 입력과 출력이 포함된 시스템 모델을 식별해 보도록 한다. 이와 같이 입출력이 포함된 확장 DMD를 DMDio (DMD with input/output)이라고 한다. 모델 입력과 출력이 포함된 시스템의 동적 특성을 이해하는 것은 제어기 설계 및 센서 배치 문제의 기본 전제 사항이다. 식별하고자 하는 미지의 이산시간 시스템이 식 (1)과 같이 표현된다고 하자. \[ \begin{align} & \mathbf{x}_{k+1}=A \mathbf{x}_k+B \mathbf{u}_k \tag{1} \\ \\ & \mathbf{y}_k=C \mat.. 2022. 10. 31.
[DMD-1] 동적모드분해 (Dynamic Mode Decomposition) 전통적인 제어이론은 시스템의 수학적인 운동 모델을 요구한다. 운동 모델은 물리 법칙으로부터 해석적으로 유도할 수 있지만 입출력 데이터에 기반해서 수치적으로 얻을 수도 있다. 수치 데이터로부터 시스템의 운동 모델을 구하는 것을 시스템 식별(system identification) 또는 모델 식별이라고 한다. 시스템 식별 방법에는 ERA, OKID, QMC등 몇 가지가 있는데, 그 중 하나가 동적모드분해 (DMD, dynamic mode decomposition)이다. DMD는 수치 시뮬레이션 또는 스냅샷(snapshot) 측정 데이터를 사용하여 선형 시스템의 수학적 모델을 식별하고 동적 특성을 추출하는 기법이다. 식별하고자 하는 미지의 이산시간 시스템이 식 (1)과 같이 표현된다고 하자. 일단 자율 시스템.. 2022. 10. 26.
전기 항공기의 항속시간(Endurance)과 항속거리(Range) 배터리를 동력원으로 하는 전기 항공기(electric aircraft)의 경우에는 비행시 항공기의 무게 변화가 없는 것이 특징이다. 배터리의 에너지 용량을 \(B\) 라고 하면 전력(power) \(P_B\) 는 다음과 같다. \[ \frac{dB}{dt}= -P_B \tag{1} \] 전력이 동력 시스템에 전달되는 과정의 손실을 고려하여 동력 효율 \(\eta_e\) 를 이용하면 배터리의 출력 전력 \(P_e\) 는 다음과 같이 계산할 수 있다. 동력 효율은 모터 효율과 프로펠러 효율을 따로 구분하지 않은 전체 효율로 보면 된다. \[ P_e = \eta_e P_B \] 비행에 필요한 동력(power)을 전적으로 배터리가 제공한다면 \(P_e=P_{req}\) 가 되어야 한다. 여기서 \(P_{req}.. 2022. 10. 3.
프로펠러기의 항속시간(Endurance)과 항속거리(Range) 연료를 사용하는 항공기의 항속시간(endurance)이나 항속거리(range)를 계산할 때는 연료 소모에 따른 항공기의 무게 감소를 고려해야 한다. 시간당 또는 거리당 연료소모량을 알아야 하는데, 이와 관련하여 터보프롭이나 피스톤 엔진의 경우 항공기 엔진 제작사에 제공하는 비연료소모량(sfc, specific fuel consumption)을 이용하면 된다. 프로펠러 항공기에서 사용하는 비연료소모량(sfc) \(c_p\) 는 동력(power)당 단위시간 동안 소모된 연료량으로 정의하며 수식으로는 다음과 같다. \[ c_p= \frac{ \dot{W}_f}{P_p}= \frac{-\dot{W}}{P_p} \tag{1} \] 여기서 \(W\) 는 항공기 무게, \(P_p\) 는 엔진 동력, \(\dot{W}.. 2022. 10. 3.
제트기의 항속시간(Endurance)과 항속거리(Range) 연료를 사용하는 항공기의 항속시간(endurance)이나 항속거리(range)를 계산할 때는 연료 소모에 따른 항공기의 무게 감소를 고려해야 한다. 시간당 또는 거리당 연료소모량을 알아야 하는데, 이와 관련하여 제트 엔진의 경우 항공기 엔진 제작사에서 제공하는 추력비연료소모량(tsfc, thrust specific fuel consumption)을 이용하면 된다. 제트기에서 사용하는 추력비연료소모량(tsfc) \(c_J\) 는 추력당 단위시간 동안 소모된 연료량으로 정의하며 수식으로는 다음과 같다. \[ c_J= \frac{ \dot{W}_f}{T}= \frac{-\dot{W}}{T} \] 여기서 \(W\) 는 항공기 무게, \(T\) 는 추력, \(\dot{W}_f= \frac{dW_f}{dt}\) 는.. 2022. 10. 2.
리야프노프 안정성 (Lyapunov stability) 이론 시불변 시스템 \(\dot{\mathbf{x}} = \mathbf{f}(\mathbf{x})\) 의 안정성에 대한 정의에 이어서 이번에는 시스템의 안정성을 판별할 수 있는 이론에 대해서 알아보겠다. 시스템이 선형 시불변이라면 시스템의 고윳값(eigenvalue)을 이용하여 쉽게 안정성을 판별할 수 있다. 시스템이 비선형일 경우에도 평형상태에 대해서 선형화를 한 후에 평형상태 근방에서 로컬 안정성을 판별할 수 있을 것이다. 이와 같은 안정성 판별 방법을 간접방법(indirect method)이라고 한다. 그러나 선형화를 사용하여 비선형 시스템의 로컬 안정성을 파악할 수 없는 상황이 있을 수 있다. 또한 선형화는 그 속성상 비선형 시스템의 전역(global) 안정성에 대해서는 알려줄 수가 없다. 물론 비선형.. 2022. 9. 30.
리야프노프 안정성 (Lyapunov stability) 개념 수학에서 자율 미분방정식(autonomous differential equation) 또는 자율 시스템은 명시적으로 독립변수의 함수가 아닌 미분방정식 또는 시스템을 말한다. 독립변수가 시간이라면 시불변(time-invariant) 시스템이라고도 한다. 독립변수가 시간인 비선형 비자율 미분방정식은 \(\dot{\mathbf{x}}=\mathbf{f}(\mathbf{x}, t)\) 로, 자율 시스템 또는 시불변 시스템은 \(\dot{\mathbf{x}}=\mathbf{f}(\mathbf{x})\) 로 표기한다. 어떤 시불변 시스템 \(\dot{\mathbf{x}}=\mathbf{f}(\mathbf{x})\) 의 한 평형상태(equilibrium state)를 \(\mathbf{x}_e\) 라고 하자. 평형상.. 2022. 9. 27.
Mac M1 Pro 에 Tensorflow, Gym, Mujoco 설치하기 Mac M1 Pro에 Tensorflow 를 설치하면서 애를 먹은터라 다음을 위하여 기록해 놓는다. 1. Anaconda 설치하기 (M1을 지원하기 시작함) 2. 가상환경 (이름을 tf 로 함) 만들기 conda create -n tf anaconda 3. 가상환경으로 이동 후, 텐서플로 설치 전에 pip 부터 업그레이드 pip install --upgrade pip 4. 가상환경에서 텐서플로 설치 conda install -c apple tensorflow-deps pip install tensorflow-macos pip install tensorflow-metal 4. 에러 나오면 numpy, scipy 업그레이드 (이 부분이 중요) pip install numpy –-upgrade pip inst.. 2022. 9. 19.
[Continuous-Time] LTI 시스템과 인과 시스템 LTI시스템의 출력은 다음과 같이 입력과 임펄스 반응의 컨볼루션으로 주어진다. \[ y(t)= \int_{-\infty}^{\infty} u(\tau) h(t-\tau) \ d\tau \] 여기서 \(h(t-\tau)\) 는 시간 \(\tau\) 에서 시스템에 임펄스를 입력으로 가했을 때 시간 \(t\) 에서의 출력이다. 그런데 여기서 \( t \lt \tau\) 일 때 \(h(t-\tau)\) 의 값이 \(0\) 이 아니라면 조금 이상한 일이 벌어진다. 임펄스를 입력으로 가하기 이전에 그 결과인 임펄스 반응이 시간적으로 먼저 나오는 것으로 해석되기 때문이다. 이것은 인과 법칙에 위배된다. 원인이 앞서고 결과가 뒤따르는게 순리적으로 맞기 때문이다. 원인이 결과에 앞서는 시스템을 인과(causal) 시스템.. 2022. 9. 13.
[Continuous-Time] LTI 시스템과 컨볼루션 입력과 출력의 관계식으로 표현하는 방법을 시스템의 외부적 표현 방법이라고도 하는데 다음과 같이 연산자(operator)를 이용하여 입출력 관계식을 함수로 나타낸다. \[ \mathbf{y}(t)= \mathcal{F} \{ \mathbf{u}(t), t\} \] 여기서 \(t\) 는 시간, \(\mathbf{u}(t)\) 는 입력, \(\mathbf{y}(t)\) 는 출력이다. 시불변 시스템의 경우 입력을 가한 싯점에 관계없이 출력이 동일해야 하므로 입출력 관계식은 다음과 같이 된다. \[ \mathbf{y}(t)= \mathcal{F} \{ \mathbf{u}(t) \} \] 한편 시불변이면서 동시에 선형인 경우에는 중첩의 원리가 적용되므로 시스템은 다음과 같은 특성을 가져야 한다. \[ \begin{.. 2022. 9. 13.
[Continuous-Time] LTI 시스템 선형 시스템에 이어서 이번에는 시불변(time-invariant) 시스템이 무엇인지 알아보자. 시불변 시스템은 초기값 \(\mathbf{x}(0 )\) 을 시간 \(\tau\) 만큼 늦추고 입력 \(\mathbf{u}(t)\) 도 \(\tau\) 만큼 늦춰서 똑같은 형태로 시스템에 인가했을 때, 출력 \( \mathbf{y}(t)\) 도 \(\tau\) 만큼 늦춰진 채 똑같은 형태로 나오는 시스템이다. 즉 시스템의 초기값과 입력의 시점 따라 시스템의 출력이 바뀌지 않는 시스템을 말한다. 예를 들어서 '어제' A라는 초기값과 패턴을 갖는 신호를 시스템에 입력으로 주었더니 B라는 출력 신호가 나왔다고 했을 때, '오늘' 동일한 A라는 초기값과 입력 신호를 시스템에 가했더니 어제와 동일한 B라는 출력 신호가 .. 2022. 9. 13.
[LSTM] TF2에서 단방향 LSTM 모델 구현 - 2 tf.keras.layers.LSTM 의 속성 return_sequences를 True 로 설정하면 각 시퀀스별 은닉 상태(hidden state)를 모두 출력하게 된다.    다음 그림은 시퀀스 길이가 4 \((t-3, t-2, t-1, t)\), 은닉 상태변수의 차원이 \(\mathbf{h}_t \in \mathbb{R}^3\), 입력 변수의 차원이 \(\mathbf{x}_t \in \mathbb{R}^8\) 인 LSTM 모델을 나타낸 것이다.    이 모델의 특징은 각 시퀀스에서 은닉 상태가 모두 출력된다는 것이다. 이를 코드로 구현하면 다음과 같다.  input = tf.keras.layers.Input(shape=(4, 8)) # (seq length, input dimension)lstm = .. 2022. 7. 23.