일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- JAX
- Dear abby
- 수식삽입
- MATLAB
- ChatGPT
- 고체역학
- Julia
- pytorch
- Numerical Analysis
- obsidian
- teps
- 우분투
- 텝스
- 텝스공부
- 논문작성법
- WOX
- 에러기록
- matplotlib
- LaTeX
- 생산성
- Zotero
- IEEE
- 논문작성
- Statics
- 딥러닝
- Linear algebra
- 수치해석
- 옵시디언
- Python
- 인공지능
- Today
- Total
뛰는 놈 위에 나는 공대생
[제어] MATLAB을 활용한 Realization 본문
이 글을 읽기 전에 참고하면 좋은 글 : https://normal-engineer.tistory.com/214
MATLAB canon 활용법
MATLAB에서는 Transfer function을 canonical form으로 바꿔주는 함수인 canon이 있다.이 함수를 쓰면 canonical form으로 쉽게 바꿔주지만 본인이 어떤 form으로 사용하고 싶은지를 잘 생각해야한다.
제어 수업에서 배우는 canonical form은 크게 세 가지이다.
1. controllable canonical form
2. observable canonical form
3. Jordan (diagonal) canonical form
3번은 다음 코드로 수행할 수 있다.
[csys,T] = canon(sys,'modal')
이렇게 수행하면, modal form, 즉, pole로 이루어진 A matrix를 return한다.
하지만 내가 1번 또는 2번 form을 가지고 싶을 때는 어떻게 해야할까?
canon 함수의 다른 방법을 찾아보자.
csys = canon(sys,'companion')
다음과 같이 사용하면 companion canonical form이 나오는데 내가 공부할 당시에 누구도 companion이라는 말을 쓰지 않아서 잘 몰랐었다.
아래 참고문헌을 살펴보니
$$
A:=\left[\begin{array}{ccccc}
0 & 1 & 0 & \cdots & 0 \\
0 & 0 & 1 & \cdots & 0 \\
0 & 0 & 0 & \cdots & 0 \\
0 & 0 & 0 & \cdots & 1 \\
-\alpha_{n} & -\alpha_{n-1} & \cdots & -\alpha_{2} & -\alpha_{1}
\end{array}\right] \in \mathbb{R}^{n \times n}
$$
다음과 같은 matrix form을 companion matrix (form)라고 부른다.
이 matrix의 장점은 다음 식으로 바꾸기 좋기 때문이다.
그래서 MATLAB에서는 위 코드를 작성하면
A matrix가 다음과 같은 꼴이 나오도록 바꿔준다.
예시
A = [0,1,0;0,0,1; 1,2,3] ; B = [0;0;1] ; C =[4,5,6] ; D = 0 ;
[b,a] = ss2tf(A,B,C,D) ;
sys = tf(b,a) ;
[csys,T] = canon(sys, 'companion') ;
MATLAB에 있는 canon는 그 결과가 아래와 같은 controllable canonical form처럼 나오지 않는다.
$$
\text{Controllable canonical form }\left\{\begin{array}{l}
\dot{x}(t)=\left[\begin{array}{ccc}
0 & 1 & 0 \\
0 & 0 & 1 \\
-a_{0} & -a_{1} & -a_{2}
\end{array}\right] x(t)+\left[\begin{array}{l}
0 \\
0 \\
1
\end{array}\right] u(t) \\
y(t)=\left[\begin{array}{lll}
b_{0} & b_{1} & b_{2}
\end{array}\right] x(t)
\end{array}\right.$$
위의 예시는 controllable canonical form을 만들고 이에 대한 MATLAB을 사용한 것이다.
$$
\text{Controllable canonical form }\left\{\begin{array}{l}
\dot{x}(t)=\left[\begin{array}{ccc}
0 & 1 & 0 \\
0 & 0 & 1 \\
1& 2 & 3
\end{array}\right] x(t)+\left[\begin{array}{l}
0 \\
0 \\
1
\end{array}\right] u(t) \\
y(t)=\left[\begin{array}{lll}
4 & 5 & 6
\end{array}\right] x(t)
\end{array}\right.$$
transfer function은 다음과 같다.
그리고 MATLAB으로 canonical form을 만들면
이와 같이 나온다. 문제는 이 form이 controllable canonical form나 observable canonical form과 동일한 것은 아니라는 점이다. A matrix만 보면 동일하다고 생각할 수 있는데 B,C도 살펴보면 완전히 동일한 것은 없다.
이전 글에 나와있는 form들을 보면 위와 같은 form이 없다.
Transformation matrix도 기존 ss에서 campanion으로 바꿔줄 때 return해주는데
여기서는 다음과 같은 matrix가 나왔다. $TAT^{-1}=csys.A$가 된다. 즉, T라는 Transformation matrix로 위와 같은 canonical form의 A matrix가 나온 것이다.
MATLAB 내에서는 A matrix를
이 꼴로 만드는 것 외에는 특정 제약조건을 두지 않고 계산을 하는 것으로 보인다. 즉, 특정 controllable canonical form이나 observable canonical form을 생각하고 ss모델을 만드는게 아니라 companion matrix를 충족시키기 위한 결과이다.
하지만 내가 처음에 시도한 것은 transfer function $G(s)=\frac{6s^{2}+5s+4}{s^3-3s^2-2s-1}$을 companion matrix로 만드는 것이기 때문에 이전에 observable, controllable canonical matrix로 만드는 것처럼 시도해보았다.
Transfer function을 companion matrix 꼴로 만드는 방법
$G(s)=\frac{6s^{2}+5s+4}{s^3-3s^2-2s-1}=\frac{Y/X}{X/U}$라고 하자.
$U=(s^3-3s^2-2s-1)X$
이 식을 다르게 바꾸면
$U+X = s(s^2-3s-2)X$가 되고
$X = X_{3},\; (s^2-3s-2)=X_{1}$라고 생각하면
$sX_{1}=X_{3}+U \quad \Rightarrow \dot{x_{1}}=x_{3}+u$
미분방정식 하나를 얻는다.
이제 $X_{1}=(s^2-3s-2)X$는
$X_{1}+2X_{3}=s(s-3)X=sX_{2}$가 된다.
$\dot{x_{2}}=x_{1}+2x_{3}$
두 번째 미분방정식을 얻는다.
마지막으로
$X_{2}=(s-3)X_{3} \quad \Rightarrow \dot{x_{3}}=x_{2}+3x_{3}$가 된다.
그리고 $Y=(6s^2+5s+4)X$도 풀어야하는데 $X_{1},X_{2},X_{3}$에 대해서 풀어야 하므로 식을 다음과 같이 정리한다.
$Y=(6s^2+5s+4)X=6(s^2-3s-2)X + 23(X-3)X + 85X = 6X_{1}+23X_{2}+85X_{3}$
이렇게 된다.
이 식들을 모두 종합하면
$\dot{x_{1}}=x_{3}+u$
$\dot{x_{2}}=x_{1}+2x_{3}$
$\dot{x_{3}}=x_{2}+3x_{3}$
$y=6x_{1}+23x_{2}+85x_{3}$
$$\text{Companion form }\left\{\begin{array}{l}\dot{x}(t)=\left[\begin{array}{ccc}
0 & 0 & 1 \\
1 & 0 & 2 \\
0& 1 & 3
\end{array}\right] x(t)+\left[\begin{array}{l}
1 \\
0 \\
0
\end{array}\right] u(t) \\
y(t)=\left[\begin{array}{lll}
6 & 23 & 85
\end{array}\right] x(t)
\end{array}\right.$$
그렇게 편리한 방식은 아닌 것 같다. $y$를 구하는 것이 번거로운 편이다.
그러면 MATLAB에서 얻은 canonical form을 controllable canonical form으로 바꿀 수 있을까?
지금은 Controllable canonical form($x$)에서 companion form($\bar{x}$)으로 바꾸는 T matrix($\bar{x}=Tx$)를 구했기 때문에 손쉽게 $\bar{C}=CT^{-1}, \bar{B}=TB$를 이용해서 구할 수 있다. 아마 이런 pattern을 미리 알고 있으면 될 것이다.
참고 문헌인 Similarity of the companion matrix and its transpose(Louis Solomon, 1999)를 참고하면
$PCP^{-1}=C^{\top}$의 관계를 가지는 P matrix를 알 수 있다.
여기서 $C$는 Companion matrix를 의미하고, $C^{\top}$은 형태 상 controllable canonical form과 동일하다.
$$
C=\left[\begin{array}{ccccc}
0 & 1 & 0 & \cdots & 0 \\
0 & 0 & 1 & \cdots & 0 \\
\vdots & \vdots & \vdots & & \vdots \\
0 & 0 & 0 & \cdots & 1 \\
-a_{n} & -a_{n-1} & -a_{n-2} & \cdots & -a_{1}
\end{array}\right]
$$
위 식을 만족하는 similarity matrix $P$는 $n=3$일 때
$p=\begin{bmatrix}a_{2} & a_{1} & 1 \\ a_{1} & 1 & 0 \\ 1 & 0 & 0\end{bmatrix}$라고 나와있다.
위의 T matrix와 동일한 의미를 가지는 것을 알 수 있다.
(참고 : 위의 T matrix는 $T=\begin{bmatrix}a_{1} & a_{2} & 1 \\ a_{2} & 1 & 0 \\ 1 & 0 & 0\end{bmatrix}$로 되어있는데 이것은 $a_{i}$에 대한 표기 순서 문제일 뿐 동일하다.)
그 외에도 참고문헌에 여러가지 증명들이 있는데 그런 것은 생략하도록 한다.
참고 문헌
- MATLAB 문서
https://kr.mathworks.com/help/control/ref/lti.canon.html
- Similarity of the companion matrix and its transpose(Louis Solomon, 1999)
- ON THE SIMILARITY TRANSFORMATION BETWEEN A MATRIX AND ITS TRANSPOSE (OLGA TAUSSKY AND HANS ZASSENHAUS)
'연구 Research > 제어 Control' 카테고리의 다른 글
[Optimal Control] Optimal control problem의 performance index (0) | 2022.07.29 |
---|---|
[제어] Regulation problem과 Tracking problem (0) | 2022.06.05 |
[제어] Realization에 대한 고찰 (0) | 2022.04.16 |
[제어] Transfer function을 s plane에 mapping하는 코드 (0) | 2022.04.11 |
[제어] Actuator modelling (0) | 2021.12.16 |