{ "cells": [ { "cell_type": "markdown", "metadata": { "toc": true }, "source": [ "

Table of Contents

\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Unconstrained Model Predictive Control (MPC) regulator with Kalman filter\n", "\n", "The following presents an unconstrained Linear Quadratic Model Predictive Control (LQ-MPC) simulation using Matlab-kernel for Jupyter Notebook. The code files can be used in Matlab natively.\n", "\n", "# Pre-requisites\n", "\n", "- Knowledge in Control Systems theory.\n", "- Convex quadratic optimization theory.\n", "- Jupyter Notebook with Matlab-kernel.\n", "- Matlab.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Background Theory\n", "\n", "MPC is an optimization-based control strategy that solves a Finite-Horizon Linear Quadratic (FH-LQ) problem subject to constraints. A model of predicted states based on the system dynamics is used to minimize an objective function that satisfies constraints given the actual state. The obtained solution is a sequence of open-loop controls from which only the first one is implemented on the system, inducing feedback. The rest of the sequence is discarded and the process is repeated for the next sampling time, this method is often called Receding-Horizon (RH) principle. Advantages of MPC against other control strategies are the handling of constraints, and non-linearities. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Unconstrained MPC\n", "\n", "
\n", " \"MPCu\"\n", "
Fig.1 - Unconstrained MPC
\n", "
\n", "\n", "Consider the following discrete-time LTI state-space system,\n", "\\begin{equation*}\n", "\\begin{aligned}\n", "x(k+1) &= A~x(k)+B~u(k)+w(k)\\\\\n", "y(k) &= C~x(k)+v(k),\\quad k=0,1,2,\\dots\n", "\\end{aligned}\n", "\\end{equation*}\n", "where $x\\in\\mathbb{R}^n$, $u\\in\\mathbb{R}^m$, and $y\\in\\mathbb{R}^p$, are the states, input, and output vectors respectively. $A,~B,~C,$ are the state, input, and output matrices. $A,~B,~C$ are known, no uncertainties in the model, disturbances, and noise. $x(k)$ is available at each sampling time $k$. The process noise is $w(k)\\sim \\mathcal{N}(0,Q_w)$ with covariance $Q_w$, the measurement noise is $v(k)\\sim \\mathcal{N}(0,R_v)$ with covariance $R_v$, both are uncorrelated, and are in the form of Additive White Gaussian Noise (AWGN)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Problem Formulation\n", "\n", "The objective is to regulate $x\\rightarrow 0$ as $k\\rightarrow \\infty$ while minimizing the following cost function, \n", "\n", "\\begin{align*}\\tag{1}\n", "J_N(x(k),\\mathbf{u}(k)) &= \\sum_{j=0}^{N-1} \\left( \\|x(k+j|k)\\|^2_Q + \\|u(k+j|k)\\|^2_R \\right) + \\|x(k+N|k)\\|^2_P \\\\\n", "&= \\sum_{j=0}^{N-1} (x^\\intercal(k+j|k)~Q~x(k+j|k)+ u^\\intercal(k+j|k)~R~u(k+j|k) ) + x^\\intercal(k+N|k)~P~x(k+N|k) \n", "\\end{align*}\n", "\n", "subject to, \n", "\n", "\\begin{align*}\\tag{2}\n", "x(k+1+j|k) &= A~x(k+j|k)+B~u(k+j|k) \\\\\n", "x(k|k) &= x(k) \n", "\\end{align*}\n", "\n", "for $ j=0,1,2,\\dots,N-1$.\n", "\n", "Where $Q\\in\\mathbb{R}^{n\\times n}$ and $R\\in\\mathbb{R}^{m\\times m}$ are the state penalty, and input penalty matrices. $P\\in\\mathbb{R}^{n\\times n}$ is the terminal cost matrix, $N \\in\\mathbb{N}$ is the horizon length, $k$ is the sampling time, and $(k+j|k)$ can be defined as the next $(k+j)$ value given $k$. \n", "\n", "With the value function defined as,\n", "\\begin{align*}\n", "J^*_N(x(k),\\mathbf{u}(k)) &= \\min_{u(k)}~ J_N(x(k),\\mathbf{u}(k))\n", "\\end{align*}\n", "the optimal control sequence is,\n", "\\begin{equation*}\n", "\\begin{aligned}\n", "\\mathbf{u}^*(k) &= \\mathrm{arg}\\min_{u(k)}~ J^*_N(x(k),\\mathbf{u}(k))\\\\\n", "&= \\left\\{ u^*(k|k),u^*(k+1|k),\\dots,u^*(k+N-1|k) \\right\\}\n", "\\end{aligned}\n", "\\end{equation*}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# The Quadratic Problem (QP) approach\n", "It's divided in four sections\n", "- Prediction\n", "- Optimization\n", "- Receding Horizon\n", "- Stability\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Prediction: Predicted Equality Constraint\n", "\n", "Setting $x(k)=x(k|k)$, and $u(k)=u(k|k)$ and applying the model recursively,\n", "\n", "\\begin{align*}\n", "x(k+1|k) &= A~x(k)+B~u(k) \\\\\n", "x(k+2|k) &= A~x(k+1|k)+B~u(k+1|k) \\\\\n", "\t\t\t\t &= A^2~x(k)+AB~u(k|k)+B~u(k+1|k) \\\\\n", "\\vdots \\hspace{2em} &= \\hspace{3em} \\vdots \\\\\n", "x(k+N|k) &= A~x(k+N-1|k)+B~u(k+N-1|k) \\\\\n", "\t\t\t\t &= A^N~x(k)+A^{N-1}B~u(k|k)+\\dots+B~u(k+N-1|k)\n", "\\end{align*}\n", "\n", "\n", "stacking,\n", "\n", "\n", "\\begin{align*}\n", "{\\underbrace{\n", "\t\\begin{bmatrix}\n", "\tx(k+1|k) \\\\\n", "\tx(k+2|k) \\\\\n", "\t\\vdots \\\\\n", "\tx(k+N|k)\n", "\t\\end{bmatrix}}_{\\mathbf{x}(k)}\n", "}\n", "=\n", "{\\underbrace{\n", "\t\\begin{bmatrix}\n", "\tA \\\\\n", "\tA^2 \\\\\n", "\t\\vdots \\\\\n", "\tA^N\n", "\t\\end{bmatrix}}_{F}\n", "}\n", "+\n", "{\\underbrace{\n", "\t\\begin{bmatrix}\n", "\t\tB & 0 & \\dots & 0 \\\\\n", "\t\tAB & B & \\dots & 0 \\\\\n", "\t\t\\vdots & \\vdots & \\ddots & \\vdots \\\\\n", "\t\tA^{N-1}B & A^{N-2}B & \\dots & B\n", "\t\\end{bmatrix}}_{G}\n", "}\n", "{\\underbrace{\n", "\t\\begin{bmatrix}\n", "\tu(k|k) \\\\\n", "\tu(k+1|k) \\\\\n", "\t\\vdots \\\\\n", "\tu(k+N-1|k)\n", "\t\\end{bmatrix}}_{\\mathbf{u}(k)}\n", "}\n", "\\end{align*}\n", "\n", "the predicted equality constraint is,\n", "\n", "\\begin{equation}\\tag{3}\n", "\\mathbf{x}(k) = F~x(k)+G~\\mathbf{u}(k)\n", "\\end{equation}\n", "\n", "where $\\mathbf{x}(k)$, and $\\mathbf{u}(k)$ are the state, and input predictions over all steps $j=0,1,2,\\dots,N$.\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Prediction: Rewriting the Cost Function\n", "\n", "Rewriting the cost function as,\n", "\n", "\\begin{aligned}\n", "x^\\intercal(k|k)~Q~x(k|k)\n", "&+\n", "\\begin{bmatrix}\n", "\tx(k+1|k) \\\\\n", "\tx(k+2|k) \\\\\n", "\t\\vdots\\\\\n", "\tx(k+N|k) \\\\\n", "\\end{bmatrix}^\\intercal\n", "{\\underbrace{\n", "\t\\begin{bmatrix}\n", "\t\tQ & 0 & \\dots & 0 \\\\\n", "\t\t0 & Q & \\ddots & \\vdots \\\\\n", "\t\t\\vdots & \\ddots & Q & 0 \\\\\n", "\t\t0 & \\dots & 0 & P\n", "\t\\end{bmatrix}}_{\\tilde{Q}}\n", "}\n", "\\begin{bmatrix}\n", "\tx(k+1|k) \\\\\n", "\tx(k+2|k) \\\\\n", "\t\\vdots\\\\\n", "\tx(k+N|k) \\\\\n", "\\end{bmatrix}\n", "\\\\\n", "&+\n", "\\begin{bmatrix}\n", "\tu(k|k) \\\\\n", "\tu(k+1|k) \\\\\n", "\t\\vdots \\\\\n", "\tu(k+N-1|k)\n", "\\end{bmatrix}^\\intercal\n", "{\\underbrace{\n", "\t\\begin{bmatrix}\n", "\tR & 0 & \\dots & 0 \\\\\n", "\t0 & R & \\ddots & \\vdots \\\\\n", "\t\\vdots & \\ddots & R & 0 \\\\\n", "\t0 & \\dots & 0 & R\n", "\t\t\\end{bmatrix}}_{\\tilde{R}}\n", "}\n", "\\begin{bmatrix}\n", "\tu(k|k) \\\\\n", "\tu(k+1|k) \\\\\n", "\t\\vdots \\\\\n", "\tu(k+N-1|k)\n", "\\end{bmatrix}\n", "\\end{aligned}\n", "\n", "Therefore, with $x(k|k)=x(k)$, now the problem is to minimize,\n", "\n", "\\begin{align}\\tag{4}\n", "J_N(x(k),\\mathbf{u}(k)) &= x^\\intercal(k)~Q~x(k) + \\mathbf{x}^\\intercal(k)~\\tilde{Q}~\\mathbf{x}(k) + \\mathbf{u}^\\intercal(k)~\\tilde{R}~\\mathbf{u}(k)\n", "\\end{align}\n", "\n", "subject to,\n", "\n", "\\begin{align*}\n", "\\mathbf{x}(k) &= F~x(k)+G~\\mathbf{u}(k)\n", "\\end{align*}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Substituting the predicted equality constraint (3) into the Cost Function (4)\n", "\n", "Omitting $(k)$ only for the algebraic operations,\n", "\\begin{align*}\n", "J_N(x(k),\\mathbf{u}(k)) &= x^\\intercal(k) Q x(k) + ( F x(k)+G \\mathbf{u}(k) )^\\intercal \\tilde{Q} ( F x(k)+G \\mathbf{u}(k) ) + \\mathbf{u}^\\intercal(k)~\\tilde{R} \\mathbf{u}(k) \\\\\n", "&= x^\\intercal Q x + [(F x)^\\intercal+(G \\mathbf{u})^\\intercal] \\tilde{Q} (F x+G \\mathbf{u}) + \\mathbf{u}^\\intercal \\tilde{R} \\mathbf{u} \\\\\n", "&= x^\\intercal Q x + (F x)^\\intercal \\tilde{Q} F x + (F x)^\\intercal \\tilde{Q} G \\mathbf{u} + (G \\mathbf{u})^\\intercal \\tilde{Q} F x + (G \\mathbf{u})^\\intercal \\tilde{Q} G \\mathbf{u} + \\mathbf{u}^\\intercal~\\tilde{R} \\mathbf{u}\\\\\n", "&= \\underbrace{x^\\intercal Q x + x^\\intercal F^\\intercal \\tilde{Q} F x} + \\underbrace{x^\\intercal F^\\intercal \\tilde{Q} G \\mathbf{u} + \\mathbf{u}^\\intercal G^\\intercal \\tilde{Q} F x} + \\underbrace{\\mathbf{u}^\\intercal G^\\intercal \\tilde{Q} G \\mathbf{u} + \\mathbf{u}^\\intercal \\tilde{R} \\mathbf{u}}\\\\\n", "&= x^\\intercal(Q+F^\\intercal \\tilde{Q} F)x \\quad \\!\\!+ \\quad 2 \\mathbf{u}^\\intercal G^\\intercal \\tilde{Q} F x \\qquad\\quad+ \\mathbf{u}^\\intercal (G^\\intercal \\tilde{Q} G+\\tilde{R})\\mathbf{u}\\\\\n", "&= x^\\intercal(Q+F^\\intercal \\tilde{Q} F)x + (2 G^\\intercal \\tilde{Q} F x)^\\intercal \\mathbf{u} + \\mathbf{u}^\\intercal (G^\\intercal \\tilde{Q} G+\\tilde{R})\\mathbf{u}\\\\\n", "&= x^\\intercal\\underbrace{(Q+F^\\intercal \\tilde{Q} F)}_M x + (\\underbrace{2 G^\\intercal \\tilde{Q} F}_L x)^\\intercal \\mathbf{u} + \\frac{1}{2}\\left[\\mathbf{u}^\\intercal \\underbrace{2(G^\\intercal \\tilde{Q} G+\\tilde{R})}_H \\mathbf{u}\\right]\\\\\n", "&= \\frac{1}{2}\\mathbf{u}(k)^\\intercal~H~\\mathbf{u}(k)+\\underbrace{(L~x(k))^\\intercal}_{c^\\intercal}~\\mathbf{u}(k)+\\underbrace{x(k)^\\intercal~M~x(k)}_\\alpha\n", "\\end{align*}\n", "\n", "we obtain the cost function in compact form..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cost Function in QP compact form\n", "\n", "\\begin{align}\\tag{5}\n", "J_N(x(k),\\mathbf{u}(k)) &= \\frac{1}{2} \\mathbf{u}(k)^\\intercal~H~\\mathbf{u}(k)+c^\\intercal~\\mathbf{u}(k)+\\alpha \n", "\\end{align}\n", "where,\n", "\\begin{align*}\n", "H&=2(G^\\intercal\\tilde{Q}G+\\tilde{R})\\\\\n", "c&=L~x(k) \\\\\n", "L&=2G^\\intercal\\tilde{Q}F\\\\\n", "\\alpha&=x^\\intercal(k)~M~x(k) \\\\\n", "M&=Q+F^\\intercal\\tilde{Q}F\n", "\\end{align*}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Optimization: Explicit solution of $J_N(x(k)$\n", "\n", "Minimizing with the gradient and solving for $\\mathbf{u}^*(k)$,\n", "\n", "\n", "\\begin{align*}\n", "J^*_N(x(k),\\mathbf{u}(k)) &= \\min_{\\mathbf{u}(k)}~\\frac{1}{2} \\mathbf{u}(k)^\\intercal~H~\\mathbf{u}(k)+c^\\intercal~\\mathbf{u}+\\alpha \\\\ \n", "\\nabla_\\mathbf{u}~J^*_N(x(k),\\mathbf{u}(k)) &= 0 \\\\\n", "H~\\mathbf{u}^*(k)+c &= 0 \\\\\n", "\\mathbf{u}^*(k) &= -H^{-1}~c\n", "\\end{align*}\n", "\n", "the optimal solution results in,\n", "\n", "\\begin{align}\\tag{6}\n", "\\mathbf{u}^*(k) &= -H^{-1}~L~x(k)\n", "\\end{align}\n", "\n", "where that $Q\\succeq,~P\\succeq 0$ are positive semidefinite convex, and $R\\succ 0$ is definite convex, such that $H\\succ 0$. The optimal solution $\\mathbf{u}^*(k)$ for any $x(k)$ is unique if $H\\succ 0$ is invertible." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Receding Horizon \n", "Applying the Receding Horizon principle means that only the $\\textbf{first}$ control input of the vector $\\mathbf{u}^*(k)$ is applied to the real system. That is,\n", "\n", "\\begin{align*}\n", "\\begin{bmatrix}\n", "\tu^*(k) \\\\\n", "\tu^*(k+1) \\\\\n", "\t\\vdots \\\\\n", "\tu^*(k+N-1)\n", "\\end{bmatrix}\n", "&=\n", "\\begin{bmatrix}\n", "\tI & 0 & 0 & \\dots & 0 \\\\\n", "\t0 & I & 0 & \\dots & 0 \\\\\n", "\t\\vdots & \\vdots & \\vdots & \\ddots & \\vdots \\\\\n", "\t0 & 0 & 0 & \\dots & I\n", "\\end{bmatrix}\n", "(-H^{-1}~L)x(k)\n", "\\end{align*}\n", "\n", "\n", "\n", "\\begin{align*}\\tag{7}\n", "u^*(k) &= K_N~x(k) \\\\\n", "K_N &= [I \\quad 0 \\quad 0 \\quad \\dots \\quad 0](-H^{-1}~L)\n", "\\end{align*}\n", "\n", "Notice that $u^*(k)$ is an explicit linear time-invariant control law because $H$ and $L$ do not depend on $x(k)$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Stability\n", "\n", "To guarantee the closed-loop stability of the system we use the dual-mode MPC approach, where the terminal cost matrix $P$ is calculated to mimic an infinite horizon, such that,\n", "\\begin{align*}\n", "x^\\intercal(k+N|k)~P~x(k+N|k) &= \\sum_{j=N}^{\\infty} (x^\\intercal(k+j|k)~Q~x(k+j|k)+ u^\\intercal(k+j|k)~R~u(k+j|k) )\n", "\\end{align*} \n", "\n", "Using the following conditions,\n", "- $(A,B)$ is stabilizable\n", "- $Q\\succeq0,~R\\succ0$\n", "- $(Q^{1/2},A)$ is observable\t\n", "\n", "The dual-mode MPC approach establishes that, there is a unique $P\\succ0$ that satisfies the **Lyapunov** equation for some stabilizing gain $K$,\n", "\\begin{align}\\tag{8}\n", "(A+B~K)^\\intercal ~P~(A+B~K)-P = -(Q+K^\\intercal~R~K)\n", "\\end{align}\n", "where $K$ is the mode-2 control law which can be any value as long as $(A+B~K)$ is stable. \n", "\n", "Therefore, the control law $u^*(k)$ is asymptotically stabilizing. Moreover, $P$ modifies only $\\tilde{Q}$, which means that the optimal solution remains explicit.\n", "\n", "Mode-2 is used only for stability and performance, it is not applied to the plant. If $K=K_\\infty$, where $K_\\infty$ is an infinite-horizon LQ control, the control law $u^*(k)$ is known as optimal LQ-MPC. On the other hand, if $K\\neq K_\\infty\\rightarrow K_N\\neq K_\\infty$ is known as LQ-MPC suboptimal. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Algorithm\n", "\n", "\"drawing\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Example\n", "\n", "Let's apply the unconstrained MPC regulator on an **Unstable Non-minimum Phase** system, \n", "\n", "\\begin{align*}\n", " Gp(s) = \\dfrac{1-s}{(s-2)(s+1)}\n", "\\end{align*}\n", "\n", "in State-space form with the following conditions,\n", "\\begin{align*}\n", " x(k+1) \n", " &= \n", " \\begin{bmatrix}\n", " 1.1160 & 0.2110 \\\\\n", " 0.1055 & 1.0100\n", " \\end{bmatrix}\n", " x(k)+\n", " \\begin{bmatrix}\n", " 0.1055\\\\\n", " 0.0052\n", " \\end{bmatrix}\n", " u(k)+w(k)\\\\\n", " y(k) &= \n", " \\begin{bmatrix}\n", " -1 & 1\n", " \\end{bmatrix}\n", " x(k) + v(k)\\\\\n", " x(0) & = [1.5 \\quad 1]^\\intercal\\\\\n", " Ts &= 0.1, \\quad N = 5, \\quad k = 100\\\\\n", " Q &= \n", " \\begin{bmatrix}\n", " 1e2 & 0 \\\\\n", " 0 & 1e2\n", " \\end{bmatrix}\n", " ,\\quad R = 1\\\\\n", " w(k) & \\sim \\mathcal{N}(0,1e^{-4}), \\quad v(k) \\sim \\mathcal{N}(0,1e^{-4})\n", "\\end{align*}\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initial definitions\n", "\n", "Global constants, the system, and the Penalty matrices. Mode-2 gain is used to calculate $P$." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "K =\n", "\n", " -7.6505 -7.6466\n", "\n", "\n", "P =\n", "\n", " 1.0e+03 *\n", "\n", " 0.1870 0.1352\n", " 0.1352 1.1868\n", "\n", "\n" ] } ], "source": [ "% Global constants\n", "clear variables;\n", "x0 = [1.5; 1]; % initial conditions\n", "nk = 100; % simulation steps\n", "Ts = 0.1; % sampling time\n", "t = Ts*(0:nk); % simulation time\n", "N = 5; % horizon \n", "\n", "% System\n", "% sys = (-s+1)/((s-2)*(s+1));\n", "[Ac,Bc,Cc,Dc] = tf2ss([-1 1],[1 -1 -2]);\n", "Bdc = [0;0]; Ddc = 0;\n", "sysc = ss(Ac,[Bc Bdc],Cc,[Dc Ddc]);\n", "\n", "sysd = c2d(sysc,Ts);\n", "A = sysd.A; \n", "B = sysd.B(:,1); \n", "Bd = sysd.B(:,2); \n", "C = sysd.C; \n", "D = sysd.D(:,1);\n", "\n", "% Penalty Cost matrices\n", "Q = [ 1e2 0\n", " 0 1e2];\n", "R = 1;\n", "\n", "% Mode-2 gain\n", "K = -dlqr(A,B,Q,R)\n", "\n", "% Terminal Cost matrix \n", "Phi = A+B*K;\n", "S = Q+K'*R*K;\n", "P = dlyap(Phi',S)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Kalman Filter" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "LKF =\n", "\n", " -0.8435\n", " -0.4217\n", "\n", "\n" ] } ], "source": [ "% Stream of process noise and measurement noise (AWGN)\n", "rng default; % For reproducibility (seed)\n", "mu_Qw = [0, 0]; % mean of the states (mu_x1, mu_x2)\n", "Qw = diag([1e-4, 1e-4]); % process noise covariance. Qw=diag[sigma_x1^2, sigma_x2^2]\n", "w = mvnrnd(mu_Qw,Qw,nk+1); % noise input vector\n", "% cov(w) % covariance matrix of w\n", "% scatter(w(:,1),w(:,2))\n", "\n", "mu_Rv = 0; % mean of the measurements\n", "Rv = (1e-4)*eye(1); % measurement noise covariance. Rv=sigma^2\n", "v = mvnrnd(mu_Rv,Rv,nk+1); % noise output vector\n", "\n", "% KF Steady-State\n", "[kest,LKF,Ps] = kalman(sysd,Qw,Rv);\n", "LKF" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating the Predicted Equality constraints $F$, and $G$\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "F =\n", "\n", " 1.1159 0.2110\n", " 0.1055 1.0104\n", " 1.2675 0.4487\n", " 0.2244 1.0431\n", " 1.4617 0.7209\n", " 0.3604 1.1013\n", " 1.7071 1.0368\n", " 0.5184 1.1887\n", " 2.0144 1.4078\n", " 0.7039 1.3104\n", "\n", "\n", "G =\n", "\n", " 0.1055 0 0 0 0\n", " 0.0052 0 0 0 0\n", " 0.1188 0.1055 0 0 0\n", " 0.0164 0.0052 0 0 0\n", " 0.1361 0.1188 0.1055 0 0\n", " 0.0291 0.0164 0.0052 0 0\n", " 0.1580 0.1361 0.1188 0.1055 0\n", " 0.0437 0.0291 0.0164 0.0052 0\n", " 0.1855 0.1580 0.1361 0.1188 0.1055\n", " 0.0609 0.0437 0.0291 0.0164 0.0052\n", "\n", "\n" ] } ], "source": [ "% dimensions\n", "n = size(A,1);\n", "m = size(B,2);\n", "\n", "% allocate\n", "F = zeros(n*N,n);\n", "G = zeros(n*N,m*(N-1));\n", "\n", "% form row by row\n", "for i = 1:N\n", " % F\n", " F(n*(i-1)+(1:n),:) = A^i;\n", "\n", " % G\n", " % form element by element\n", " for j = 1:i\n", " G(n*(i-1)+(1:n),m*(j-1)+(1:m)) = A^(i-j)*B;\n", " end\n", "end\n", "\n", "F\n", "G" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating the Predicted Cost matrices $H$, $L$, and $M$" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "L =\n", "\n", " 464.7837 464.6681\n", " 358.3690 358.2880\n", " 266.3348 266.2808\n", " 184.9870 184.9540\n", " 111.0602 111.0433\n", "\n", "\n", "M =\n", "\n", " 1.0e+03 *\n", "\n", " 2.6666 2.6143\n", " 2.6143 3.6652\n", "\n", "\n", "H =\n", "\n", " 44.1261 32.4810 24.1394 16.7664 10.0660\n", " 32.4810 28.5940 19.7642 13.7275 8.2415\n", " 24.1394 19.7642 18.1822 11.2395 6.7478\n", " 16.7664 13.7275 11.2395 11.2025 5.5248\n", " 10.0660 8.2415 6.7478 5.5248 6.5236\n", "\n", "\n" ] } ], "source": [ "% get dimensions\n", "n = size(F,2);\n", "N = size(F,1)/n;\n", "\n", "% diagonalize Q and R\n", "Qd = kron(eye(N-1),Q);\n", "Qd = blkdiag(Qd,P);\n", "Rd = kron(eye(N),R);\n", "\n", "% Hessian\n", "H = 2*G'*Qd*G + 2*Rd;\n", "\n", "% Linear term\n", "L = 2*G'*Qd*F\n", "\n", "% Constant term\n", "M = F'*Qd*F + Q\n", "\n", "% make sure the Hessian is symmetric\n", "H = (H+H')/2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Obtaining the Receding Horizon (RH) gain" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Ku =\n", "\n", " -7.6505 -7.6466\n", " -2.8647 -2.8645\n", " -1.0728 -1.0738\n", " -0.4018 -0.4032\n", " -0.1506 -0.1520\n", "\n", "\n", "KN =\n", "\n", " -7.6505 -7.6466\n", "\n", "\n" ] } ], "source": [ "%% Unconstrained MPC: RH-FH-LQR/LQ-MPC\n", "Ku = -H\\L % solution\n", "KN = Ku(1,:) % RH-FH gain, first row of the m-row matrix" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## For loop\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "% Init\n", "x_mpc_u = x0;\n", "xs_mpc_u = zeros(n,nk+1);\n", "us_mpc_u = zeros(m,nk+1);\n", "\n", "for k = 1:nk+1\n", " xs_mpc_u(:,k) = x_mpc_u; \n", " y_mpc_u(k) = C*x_mpc_u + v(k); \n", " us_mpc_u(:,k) = KN*x_mpc_u;\n", " x_mpc_u = A*x_mpc_u+B*us_mpc_u(:,k) + LKF*(y_mpc_u(k)-C*x_mpc_u) + w(k,:)'; \n", " J_mpc_u(k) = x_mpc_u'*Q*x_mpc_u+us_mpc_u(:,k)'*R*us_mpc_u(:,k); \n", "end\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Results \n", "## Input\n", "\n", "The input control signal $u$ reaches zero relatively fast due the penalty cost $R=1$. Higher values of $R$ reaches zero slowly. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "image/png": "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QS1cz7x58+x2e0BAwPLly90usGbNmu+++04I8fvf/14Z/AaQHz0keIWbb765a9euXbt2NRqNO3bsUMbF6Nq1a5cuXYQQFy9e1OYm/M8+++z777/f8vXs2rWrV69ezdw5d/jw4b/85S937Nih/cAfwHWjhwSvkJSUlJSUJISoqal55513Jk+e7HzHZWVgAg2cPXu2te5jNnz48GZuGh0dHT1gwIAFCxa0SluANughAWLWrFnffPONMvH5559Pnz49Ojp6ypQpZWVl77///tixY2NiYv7yl78oC9fW1r788stxcXEjRoyYM2dOWVmZ23Xu2rXrkUceiY6OvvvuuzMyMoQQf/3rXw8ePJiVlTV//vxm1jNr1qxPPvlkypQp0dHRycnJ+fn5zRffuCHAQxFIgMjKyqqqqlImUlNTJ02atHr16tra2mnTpm3fvv0//uM/nn/++Q0bNmzfvl0I8cc//jE7O/uVV1756KOPunbtOnXqVIvF4rLCsrKy2bNnT548ec+ePc8999wbb7yxdevWMWPG9OjRo1+/fsogSU2tJysra8mSJU899dQXX3wxdOjQ6dOnV1ZWNlW524ba8J0C2hKBBFzmiSeeeOCBB2JjY6dNm1ZVVfXKK6/ExsaOHz9+yJAheXl5hYWFO3bsWLly5YgRI8LCwhYvXmw0Gt955x2XlZjNZh8fn9jY2I4dOyYkJLz55puDBw8eNGiQ0Wjs0aNHbGxs8+v5zW9+k5iY2L59+z/96U9hYWHvvfdeU9W6bagN3x2gLXEOCbhM7969lYnAwMCAgICOHTsqszfffLPdbi8uLhZCrFmzRl3+/Pnz33//vctKRo0aNWDAgLFjxw4ZMiQ2NnbcuHEug9U2v56oqCj18aioKGVht67YEOBBCCTgGtTX17dr1y4mJkZ9JCYmJiwszGUxHx+frVu3Zmdn79ix43//939fe+21Z5999sknn7zK9fj6Xu0X84oNAR6EQAKugdForKuri4uLU64XF0JkZ2cHBga6LFZaWvr999/fe++9CQkJQoi//OUva9ascc6J5tfz448/qksePXp0xIgRTdVzxYYAD8I5JOAaxMXF9erV689//nNNTY0QYteuXU899ZTVanVZ7F//+te///u/f/XVV0IIh8Nx9OjRfv36CSF8fHzKy8vPnDnT/HoyMjJOnTolhHjnnXcOHTrUzKjbTTUEeCJ6SMA1MBgMa9eunT9/fkxMjJ+fnxDi2WefTUxMdFns9ttvnzNnzhNPPOHn52e32/v16/faa68JIRITExctWnTXXXcdPHiwmfX069fvnnvucTgcHTp0WL16dd++fZuqp6mGAE/EEObA9bh48aLFYunSpYvB0ORhBofDcerUqeDgYH9/f+cHGxoafHx8mlpPZGTka6+9lpCQYLVaO3fu7HbNgwcPXrFihfrDWLcN1dTUDBs27G9/+1szR/wAqdBDAq6Hn59ft27dml/GYDA0XsYlwJpaj4+PT1NppLDZbDU1Ne3bt3fbUG1t7fnz55svD5AN55AAubRr166ZXpfCz8/vueeea3yoUKUcALyaVQHy4JAdAEAK7D0BAKRAIAEApEAgAQCk8P8BS6af4bj0gdcAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "% Input \n", "figure; \n", " stairs(t,us_mpc_u,'--','LineWidth',1); \n", " ylabel('$u$','Interpreter','Latex');\n", " xlabel('Time step [s]');\n", " title('Input'); \n", " grid on;\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Output\n", "\n", "The output $y$ converges around zero slowly due to $R$. Notice that the signal reflects the observation matrix $C=[-1~1]$." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": true, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "image/png": "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+/fv//DDD998801FOgy7M/9vSLnd7lGjRq1du/aPf/xjRETEPffc89Of/lTOAtp66aWXxo0bJ/8tVYPBkJWVlZmZOWvWrNLS0sWLF0+cOFHmGqKior744gvf5rlz52TrOG1/LVLDFTIArbWQujMxa6jJ3E0fQENDQ3p6emZmpiL3cl0uV1NT0/Dhw/ft29fY2Cjz2c+dO7d27dpnnnlG5vP6KD7/b1VVVUFBwYQJE44cObJz587/+q//UuqzcFNTU15e3r//+78rcvYDBw70799/2LBhMTEx1dXVFy5ckLmAlJSUhoaGJ598cv/+/fn5+Z988olsF6X21yI1XCEDUMulM1i6MzGrThw9evSWW25Zvny5zM0jn2HDhi1fvvyll14yGo35+fkyn/0///M/x48fX1tbW1xc7HK5jh07VlFRIWcBis//+93vfnf06NGLFy8WQiQmJs6ePft///d/5SzA589//vOoUaOuueYa+U+9d+/ew4cP79ixY8mSJS+88IIQ4ve//73MNcTExGzfvr22tnbTpk3nz5//0Y9+JPMIo7ZUfoVUUSlBMXz48C4nZtWD0tLSVatWrV+/fs6cOfKf/fPPPy8tLV26dKm0edVVV50+fVrmGoYNG3b8+PEdO3YIIb744ovi4uLBgwfLOchV8fl/r7zyyrabCjbci4uLZ8+ercip3W732LFjfT/50aNH19XVyVzDV1999fXXX2/evFnaXLlypfwDPn3UfoVUelRFkHm93qlTpzocjtbW1srKymuvvfbMmTOKVOJwOJQaZXfixIlJkybt3bu3+VuXL1+Ws4DKysrx48dXV1e3traeOXMmJSXlvffek7MAP3fddZf8o+w+/fTT8ePHS8OZTp8+nZKSUlJSImcBzc3N119//d69e1tbW8+ePTt9+vS//e1vchbgc+ONN0p/kvI7fvz4tddeK/0qfvnll/Pnz9+9e7fMNZw6dWr8+PGnT59ubW09dOjQlClTvvzySzkLaHstUs8VskNaayEZDIannnrKNzHrhg0bhg4dqnRRctuxY8fXX3/9s5/9zPfKT37yk7Vr18pWwJgxY37961/feuutkydPPnjw4MqVK6W1RXQlMTFx9erVixYt8s3/K/NDSJGRkZs3b/7Vr371wgsvVFVV3XnnnYo8G9vS0nL27Nnx48fLf2ohRFJS0iOPPLJo0aIJEyYcO3bstttuu+2222SuITY29sEHH5w3b96ECRNOnjy5efNm+Z+P9lH5FVKDD8ZKLly4YDQa1TO+QIdaWlpcLpfJZNLzUlUtLS0ej0fZX8WLFy9eccUV/C9ERUUp+EPwer1NTU39+/dXqgA/6rxCajaQAADhRV3xCADQLQIJAKAKBBIAQBUIJACAKhBIAABVIJAAAKpAIAEAVEFrMzUAHXrllVf279/f/vUBAwZs2LDh3nvv/bd/+zcZFiZoaWkpLy+fMGFCH4+zatUqr9drNBqfeuqpDnd46aWXjhw5IoT4xS9+IS1+A6gfLSTowpAhQ4YPHz58+HCz2fzuu+9K62IMHz582LBhQohLly7JMwn/Aw888MYbb/T9OHv37h01alSAmXMnT578wx/+8N1335V/4Q+g12ghQRcWLly4cOFCIcSFCxdeffXVxYsXt51xWVqYQAbnz58P1jxmkydPDjBpdHJy8rhx4x566KGgnAuQBy0kQNx9992HDx+WvvjLX/6ybNmy5OTktLS02traN954Y9asWTab7YknnpB2bmpqevLJJ2fMmDFlypTMzMza2toOj7l3794f//jHycnJc+bMyc3NFUJs2bLl6NGjDofjvvvuC3Ccu++++09/+lNaWlpycvKSJUuOHTsWuPj2JwLCFIEECIfDcfbsWemLrKysRYsWbd68uampaenSpYWFhY8++ugjjzyybdu2wsJCIcT9999fXFz89NNPv/XWW8OHD7/jjjtcLpffAWtra1euXLl48eL333//4Ycffvnll3fv3j19+vSRI0eOGTNGWiSps+M4HI6cnJy77rrrgw8+mDhx4rJlyxoaGjqrvMMThfAnBYQSgQT8kzvvvHPBggUpKSlLly49e/bs008/nZKScsstt1x77bVlZWXl5eXvvvvuxo0bp0yZEhcXl52dbTabX331Vb+DOJ3OiIiIlJSUgQMHpqam/u53v7vmmmsmTJhgNptHjhyZkpIS+Dg/+9nPZs6c2b9//wcffDAuLu7111/vrNoOTxTCnw4QStxDAv7J6NGjpS+io6ONRuPAgQOlzSFDhni93srKSiHESy+95Nv/66+//vTTT/0OMnXq1HHjxs2aNevaa69NSUmZPXu232K1gY+TlJTkez0pKUnauUNdnggIIwQS0AOXL1++4oorbDab7xWbzRYXF+e3W0RExO7du4uLi999993//u//fv755x944IGf/vSn3TxOv37d/cPs8kRAGCGQgB4wm83Nzc0zZsyQxosLIYqLi6Ojo/12+/zzzz/99NObbropNTVVCPHEE0+89NJLbXMi8HH+/ve/+/Y8ceLElClTOqunyxMBYYR7SEAPzJgxY9SoUb/+9a8vXLgghNi7d+9dd93ldrv9dvu///u///iP//jwww+FEC0tLSdOnBgzZowQIiIioq6u7ty5c4GPk5ube+bMGSHEq6+++sknnwRYdbuzEwHhiBYS0AMGgyEvL+++++6z2WyRkZFCiAceeGDmzJl+u1133XWZmZl33nlnZGSk1+sdM2bM888/L4SYOXPm2rVrf/CDHxw9ejTAccaMGTN37tyWlpYBAwZs3rz5e9/7Xmf1dHYiIByxhDnQG5cuXXK5XMOGDTMYOu1maGlpOXPmTExMTFRUVNsXW1tbIyIiOjtOYmLi888/n5qa6na7hw4d2uGRr7nmmmeffdb3YGyHJ7pw4cKkSZP+8Ic/BOjxA1SFFhLQG5GRkSNGjAi8j8FgaL+PX4B1dpyIiIjO0kji8XguXLjQv3//Dk/U1NT09ddfBy4PUBvuIQHqcsUVVwRodUkiIyMffvjh9l2FPlIHYHcOBagHXXYAAFXg0xMAQBUIJACAKhBIAABV+P9SQKr6l2pQzAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "% Output\n", "figure; \n", " plot(t,y_mpc_u,'--','LineWidth',1);\n", " ylabel('$y$','Interpreter','Latex'); \n", " xlabel('Time step [s]'); \n", " title('Output');\n", " grid on;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## States\n", "\n", "The states start in the initial conditions $x(0)=[1.5~1]^\\intercal$, and slowly converge to zero." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "% States\n", "figure;\n", " plot(t,xs_mpc_u(1,:),'--',t,xs_mpc_u(2,:),'--','LineWidth',1); \n", " xlabel('Time step [s]'); \n", " ylabel('$x_1,~x_2$','Interpreter','Latex','Fontsize',12); \n", " title('States'); \n", " legend('$x_1~$ MPCu','$x_2~$ MPCu',...\n", " 'Location','southeast',...\n", " 'Interpreter','Latex');\n", " grid on; \n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Phase-plot\n", "\n", "The phase-plot shows more clearly the initial condition $x(0)$. Also, it shows the convergence around zero for $k \\rightarrow \\infty$" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5AoXAys6dEUeMQAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAyMi1PY3QtMjAyMCAyMzo0Mzo1OOpL+AYAACAASURBVHic7d1/dNTVnf/xtwOYQTCdGQGNv5iQrCHariIGllRhQAVXF1MLrlFBQntaC3rK6ranFgtJFKxY9ItuV5eeromFIlKtsqg9yWZhwo+oBOimgNmEDBkMZZYVZkZ+DuAk3z8ufBwnP0jIZD53Zp6Ps2fPTPJJ5p3bYV7eH597L2praxMAAMxmMbsAAABECCQAgCYIJACAFggkAIAWCCQAgBYIJACAFggkAIAWCCQAgBYIJACAFggkAIAWCCQAgBYIJACAFvqbXQBgjocffvjkyZPG07S0tHHjxj3++OMWi0V9a9WqVVar1cQKDd2vp6WlRUSuueaauNQFxNhF7PaN1JSenn706NGoL06bNu3tt99W3zp69OjgwYNNqS1KN+t59dVXn3zyyffff/+OO+6IW21ADDFkh5S2du3aU6dOffHFF4sWLRKRd95559NPPzW7qAv07rvvnjp1yuwqgAtHICGl9e/f/+KLL05PT3/66acHDRokInv37lXfqqurmzhxYnp6+re//e3a2lr1xf/5n//5zne+k56ePnjw4JtuuqmsrEx9vaqqasKECenp6enp6bfffnt1dbXxEseOHfvxj398+eWX22y2Bx98cN++fR1W8p3vfGf69OnV1dU333xzenr6vffe29mVv/nNb2655Zb09PTrrruutLT09OnTIlJaWvrf//3fIrJgwYKXXnopNq0DxFkbkJIuvfRSEfnggw/U0/Xr16t/Edu2bVPfGjJkyP333z969GgRufrqq9va2s6cOXPllVeKSEFBwf333z9gwAB1/Z49ewYMGHD11Vf/8Ic/LCoqGjBgwMCBA71er/rNLpdLRMaMGTNt2jQRueKKKw4dOtS+nrS0NPWDU6dOveGGG0Tk2muvPX78uFHq0aNH29raFi5cKCJpaWlTp04dNmyYiEyZMqWtra2wsDAtLU1ELr300sceeyw+bQjEFoGEFKU+5S+99NIhQ4aoxyIyadIk41vLly9va2s7deqU+qA/fvy43+9ftWrVa6+9pn7DQw89JCKrV69+5513RGT8+PH19fVtbW1ut/uDDz44depU27mcGzVqlPqRkpISEfnVr37Vvh71KuqXnzlz5sYbbxSR8vLytohAOnDgQL9+/fr167dz5862tja/3z9ixAgRWbduXVtbm5o6+s///M++bzygTzBkh5QWCoWOHj3a2to6YsSIJ5544t133zW+dc8994jIxRdffPHFF4vIqVOn7Hb7tGnT7Hb797///bFjx65atUpd+e1vf9tut2/cuDE3N3fo0KG//e1v7Xa7+qmPP/5YRI4dO/aDH/zgBz/4webNm0Vk+/bthw8fTj8nMzPTeNHvfe97ItK/f3+VLjU1NZHVbty4MRwOT5w48Zvf/KaI2O32qVOnisjatWv7tJWA+CCQkNLee++9UCh07Ngxj8fz0ksvpaenG9/6xje+EXlla2vr4cOHc3JyCgsLP/vss3vvvVeNxYnI5ZdfvnXr1scee+zaa689dOjQypUr8/PzP/zwQxH54osvROTMmTOHDx8+fPjwpZdeet999910000icvScY8eOtS/MbrerF23/LTXXFfn4yy+/7G1DABrgPiSguz788EOv13v//fevWbNGROrq6tTXd+3atXv37gceeODXv/51S0vLU089tWrVqnfeeefuu+9WU1DZ2dl//OMfReQvf/nL3r17R48efdlll7VfdC4ia9euvf/++0Xko48+EhH144bc3FwRqaqqOnz48GWXXSYiakhw/PjxxjUdZhiQEAgkoLvUKNxHH3303nvvNTQ0/OEPfxCR06dPe73ewsLCYcOGPf/884MHD25qahKRW2+9VUSmTp165ZVXVlVV/dM//dOoUaPmz59/4MCBdevWXXPNNR3eVPToo482Njbu3bv3gw8+UN2pyO/+7d/+7d///d//6U9/uu2221wu1+7duz/++OOcnJyHH35YRNQii5deeqmxsfHxxx/v+/YAYs3sSSzAHFGr7Np/S61qM54eOnQoHA4bCZGbm/vTn/5URIqKitra2v7lX/7FGOIbMGDAL37xC+O37dy581vf+pb61qBBg1588cUO61GLGl5++WX14Morr1y/fn37eo4ePfrYY4+p7BGRe+6558CBA+qy5cuX9+vXT30xdu0ExA87NQA9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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "% Phase-plot\n", "figure;\n", " plot(xs_mpc_u(1,:),xs_mpc_u(2,:),'--x','LineWidth',1);\n", " xlabel('$x_1$','Interpreter','Latex'); \n", " ylabel('$x_2$','Interpreter','Latex');\n", " title('Phase-plot');\n", " grid on; " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cost value\n", "\n", "The cost value $J^*_N(x(k),\\mathbf{u}(k))$ indicates the descendent monotonic behaviour of the cost function $J_N(x(k),\\mathbf{u}(k))$." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "image/png": "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/+APgEHDHhIMC5GRkZGRkUTU0tKyb9+++fPnd73jsvBgAhFcvHjRUvcx8/f37+em0VOnTvX19V25cqVF5gIQB/aQAGjp0qX/+te/hBdff/11XFzc1KlTFyxYUF9f/8knn4SHhwcEBKxdu1ZYua2t7Y033ggNDZ02bdqyZcvq6+t73WZeXt68efOmTp167733btmyhYj+/Oc/l5aW5ufnJyYm9rOdpUuX/u1vf1uwYMHUqVNjYmLKy8v7D99zIgArhUICoPz8/ObmZuFFampqdHT05s2b29raYmNjv/rqqz/+8Y8vv/zyzp07v/rqKyJ6/vnndTrdhg0bPv/8c1dX14ULF3Ic122D9fX18fHx8+fPLygoeOmll959992srKyQkJCbb755woQJwkOS+tpOfn7+K6+88uSTTxYVFd1xxx1xcXFNTU19Je91oiH8SQEMJRQSwH95/PHH58yZExQUFBsb29zcvGHDhqCgoLlz595+++1Hjhw5duzY/v3733zzzWnTpnl4eKxevVqtVu/bt6/bRurq6uzs7IKCghwcHGbNmvXee+9Nnjx50qRJarX65ptvDgoK6n87Tz31VFhY2KhRo1588UUPD4+PP/64r7S9TjSEPx2AoYRzSAD/Zdy4ccILe3t7pVLp4OAgLN544408z1dVVRHRtm3bzOtfunTp+PHj3TYSHBzs6+sbHh5+++23BwUFRUREdHtYbf/b8fPzM4/7+fkJK/fqqhMBWBEUEsA1uHLlysiRIwMCAswjAQEBHh4e3Vazs7PLysrS6XT79+//61//+vbbb7/wwgu///3vB7idESMG+h/mVScCsCIoJIBroFar29vbQ0NDhevFiUin09nb23dbrba29vjx4/fff/+sWbOIaO3atdu2bevaE/1v58cffzSv2dDQMG3atL7yXHUiACuCc0gA1yA0NNTT03PVqlUtLS1ElJeX9+STTxoMhm6rnT9//v/+7/8OHTpERCaTqaGhYcKECURkZ2fX2Nh44cKF/rezZcuWc+fOEdG+ffvKysr6eep2XxMBWCPsIQFcA5lMtn379sTExICAALlcTkQvvPBCWFhYt9WmT5++bNmyxx9/XC6X8zw/YcKEt99+m4jCwsJSUlLuuuuu0tLSfrYzYcKE2bNnm0ym0aNHb968+dZbb+0rT18TAVgjPMIcYDA6Ojo4jnNxcZHJ+jzMYDKZzp07p1KpFApF18HOzk47O7u+tuPj4/P222/PmjXLYDA4Ozv3uuXJkydv2rTJ/MHYXidqaWmZMmXKRx991M8RPwCmYA8JYDDkcrmbm1v/68hksp7rdCuwvrZjZ2fXVxsJWltbW1paRo0a1etEbW1tly5d6j8eAGtwDgmALSNHjuxnr0sgl8tfeumlnocKzYQDgAPZFAA7cMgOAACYgL+eAACACSgkAABgAgoJAACY8P9aYT2OR8fTkAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "% Cost Value\n", "figure;\n", " plot(t, J_mpc_u,'--','LineWidth',1);\n", " xlabel('Time step [s]'); \n", " ylabel('$J(k)$','Interpreter','Latex');\n", " title('Cost Value');\n", " grid on; " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# References\n", "\n", "[1] James B. Rawlings and Mayne David Q. *Model Predictive Control Theory and Design*. Nob Hill Pub, Llc, 2009. ISBN: 9780975937709.\n", "\n", "[2] Jan Maciejowski. *Predictive Control with Constraints*. Prentice Hall, 2000. ISBN: 978-0201398236." ] } ], "metadata": { "kernelspec": { "display_name": "Matlab", "language": "matlab", "name": "matlab" }, "language_info": { "codemirror_mode": "octave", "file_extension": ".m", "help_links": [ { "text": "MetaKernel Magics", "url": "https://metakernel.readthedocs.io/en/latest/source/README.html" } ], "mimetype": "text/x-octave", "name": "matlab", "version": "0.16.9" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "number", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": true, "report_style_numbering": false, "user_envs_cfg": false }, "nikola": { "category": "", "date": "2020-08-24 19:17:08 UTC-04:00", "description": "", "link": "", "slug": "MPCu", "tags": "MPC, Kalman filter, unconstrained, optimization, AWGN, control systems, Matlab", "title": "Unconstrained MPC regulator with Kalman filter", "type": "text" }, "toc": { "base_numbering": 1, "nav_menu": { "height": "246.4px", "width": "476.4px" }, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": true, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "165px" }, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 4 }