Optimal and Robust Control
B3M35ORR + BE3M35ORR + BE3M35ORCHomework problem assignment #6
Find the optimal trajectory (both states and controls) minimizing the following cost function
\int_0^{5} u^2(t) dt
\)
and getting the pendulum modelled by
\begin{array}{rl}
\dot{x}_1(t) &= x_2(t), \\
\dot{x}_2(t) &= -a_1 \sin (x_1(t)) - a_2 x_2(t) + a_3 u(t) ,
\end{array}
\)
from \(x_1(0)=0, x_2(0)=0\) to \(x_1(5)=\pi, x_2(5)=0\). Parameters of the model are \(a_1 = 9.81\), \(a_2 = 0.1\) and \(a_3 = 1\).
This problem is an instance of an Optimal Control Problem with a fixed final state and on a finite time horizon. As such, its solution leads to a Two-Point Boundary Value Problem (TP-BVP) and thus it can be solved in Matlab by the function bvp4c. You should proceed as follows:
- Formulate the Hamiltonian.
- Calculate the first-order necessary conditions—this way, you get the state and costate differential equations and the stationarity equation.
- Express \(u(t)\) from the stationarity equation and substitute it to the state and costate differential equations.
- Use bvp4c() to solve the TP-BVP—the problem given by the state and costate differential equations together with the boundary conditions for the state at the beginning and end of the control horizon. You can check the correctness of your solution by comparing it with the trajectory used in this week's lab exercise problem. They should match each other. If the trajectories differ, you either derived the TP-BVP incorrectly, or you initialized the bvp4c() solver so that it got stuck in a local minimum.
Implement your solution as a function with the header of the following form:
function [ t_star, x_star, u_star ] = hw6_cvutID()
where cvutID is your KOS username, t_star is the time vector of the trajectory, x_star is the state trajectory and u_star is the control trajectory. You are free to choose the sampling of the time interval [0, 5]; in other words, time samples in t_star can be arbitrarily spaced.
You can submit only one m-file. If you need more functions, you can use nested functions (for details, see this).