---
# System prepended metadata

title: 'ECE-GY 9243/ME-GY 7973, Optimal and learning control for robotics, Exercise series 2'

---

# ECE-GY 9243/ME-GY 7973, Optimal and learning control for robotics, Exercise series 2

## 1
### a) whether stable when uncontrolled?
#### 1)

We know that every vector can be represented as a linear combination of the eigenvectors of an (non-degenerate) operator.

The next state will be

$$
{\bf{x}}_{n}=\sum_i c_i {\bf{v}}_{i} 
\\
{\mathbf{x}}_{n+1}=\sum_i c_i \lambda_i {\bf{v}}_{i} 
$$

where ${\bf{v}}_{i}$, $c_i$, and ${\lambda_i}$ are eigenvector, coefficient, and eigenvalue.

As we can see, if the system has $\|{\lambda_i\|}>1$, the system is unstable.

The eigenvalues of the state evolution matrix here is
```python
import numpy as np
A = np.array([[0.5, 0, 0.5],[0, 0, -2],[4, 2, 1]])
print(abs(np.linalg.eig(A)[0])
```
```python
[1.         1.41421356 1.41421356]
```

So the system is not stable.

#### 2)
```
[0.87743883 0.37743883 0.37743883]
```
Stable.
#### 3)
[1.41421356 1.41421356 2.        ]
Unstable.

### b)
We want to know whether the influence of the control can be passed to all of the degree of freedom.
#### 1) **controllable**
#### 2) **controllable**
#### 3) **not controllable**
```python=
A = np.array([[.5, 0, .5],
              [0, 0, -2],
              [4, 2, 1]])
B = np.array([[0,0],[1,0],[0,1]])
tmp1 = B
tmp2 = np.matmul(A,B)
tmp3 = np.matmul(A,tmp2)
tmp4 = np.concatenate((tmp1, tmp2),1)
tmp5 = np.concatenate((tmp4, tmp3),1)
print(matrix_rank(tmp5))
A = np.array([[.5, 0, .5],
              [0, 0, -.5],
              [.5, .5, .5]])
B = np.array([[0,0],[1,0],[0,1]])
tmp1 = B
tmp2 = np.matmul(A,B)
tmp3 = np.matmul(A,tmp2)
tmp4 = np.concatenate((tmp1, tmp2),1)
tmp5 = np.concatenate((tmp4, tmp3),1)
print(matrix_rank(tmp5))
A = np.array([[2, 0, 0],
              [0, 0, -2],
              [1, 1, 0]])
B = np.array([[0,0],[1,0],[0,1]])
tmp1 = B
tmp2 = np.matmul(A,B)
tmp3 = np.matmul(A,tmp2)
tmp4 = np.concatenate((tmp1, tmp2),1)
tmp5 = np.concatenate((tmp4, tmp3),1)
print(matrix_rank(tmp5))
```
### c)
If the system is not controllable, then it is not promised that we can bring it to any desired state, even given infinite number of steps.
### d)
rank is 3
is controllable
![](https://i.imgur.com/TZkdVAP.png)
![](https://i.imgur.com/rYFIY8G.png)


rank is 3
is controllable
![](https://i.imgur.com/R3tgA9J.png)
![](https://i.imgur.com/urU6x38.png)


rank is 2
is not controllable
![](https://i.imgur.com/nJuILwT.png)
![](https://i.imgur.com/mmm12Vk.png)


