Engineering systems and design problems can often be compactly described analysed and manipulated using matrices and vectors. Moreover, tractable solutions to design problems can be obtained by casting the design problems as optimization problems. For the class of linear and quadratic problems, the solutions can be obtained by solving systems of equations. In computer programs, this is achieved via matrix factorizations. For the larger class of convex problems, no closed-form solution may exist and numerical methods must be applied. This course aims at teaching numerically robust methods for solving systems of equations and, more generally, convex optimization problems, including also standard constrained problems.