Pieter's Pages

Welcome! This is where I keep some notes on topics I'm interested in, as well as links to the GitHub repositories for projects I'm working on.

Pages

A collection of guides, articles and notes on various topics, like mathematics, optimization, digital signal processing, linear algebra, Raspberry Pi, Arduino, C++, Python, Linux ...

Go to Pages

Scientific software

alpaqa logo

alpaqa

Software package for nonlinear numerical optimization, using an augmented Lagrangian method and the first-order PANOC solver.
Written in C++, with an easy-to-use Python interface.

cyqlone logo

cyqlone

High-performance, parallelized and vectorized quadratic programming solver for optimal control problems (OCPs).
Written in C++, with a Python interface.

batmat logo

batmat

Fast linear algebra routines for batches of small matrices. Used as the backend for the cyqlone solver.
Written in C++.

hyhound logo

hyhound

Hyperbolic Householder transformations for Up- and Downdating Cholesky factorizations.
Written in C++, with a Python interface.

py-build-cmake logo

py-build-cmake

Modern, PEP 517 compliant build backend for building Python packages with extensions built using CMake. Includes extensive examples using pybind11, nanobind and SWIG.

alpaqa4scale

HPC version of alpaqa with support for distributed-memory computing (using MPI) and GPU acceleration (using PyTorch).

QPALM

Numerical quadratic programming solver.
Written in C, with interfaces for C++, Python, Julia, Matlab and Fortran.

guanaqo

C++ utilities for scientific software: view classes for dense and sparse matrices, wrappers for BLAS/LAPACK/Eigen, conversions between different matrix storage formats, flexible type erasure, benchmarking and tracing ...

Linear Algebra

Educational linear algebra library with readable implementations of common matrix algorithms.
Written in C++, also available as an Arduino library.

Scientific Publications

Blocked Cholesky factorization updates of the Riccati recursion using hyperbolic Householder transformations

Pieter Pas, Panagiotis Patrinos
64th IEEE Conference on Decision and Control (CDC), 2025

arXiv

Convergence of the preconditioned proximal point method and Douglas–Rachford splitting in the absence of monotonicity

Brecht Evens, Pieter Pas, Puya Latafat, Panagiotis Patrinos
Mathematical Programming, 2025

SpringerarXiv

PANTR: A proximal algorithm with trust-region updates for nonconvex constrained optimization

Alexander Bodard, Pieter Pas, Panagiotis Patrinos
IEEE Control Systems Letters, 2023

IEEE XplorearXiv

Gauss–Newton meets PANOC: A fast and globally convergent algorithm for nonlinear optimal control

Pieter Pas, Andreas Themelis, Panagiotis Patrinos
22nd IFAC World Congress, 2023

IFAC PapersOnLinearXiv

ALPAQA: A matrix-free solver for nonlinear MPC and large-scale nonconvex optimization

Pieter Pas, Mathijs Schuurmans, Panagiotis Patrinos
20th European Control Conference (ECC22), 2022

IEEE XplorearXiv

Presentations

Mastering C++ for scientific computing: tools, tips, and tricks

Slides about C++ tooling and best practices for scientific computing.

Development

Toolchains

Portable GCC cross-compilation toolchains for C, C++ and Fortran. Useful for CI/CD pipelines or when distributing binaries for multiple platforms.

Conan recipes

Recipes for building some popular scientific software libraries using the Conan C/C++ package manager.

Cross PyTorch

Scripts for cross-compiling PyTorch with CUDA support on Linux.

Raspberry Pi

Raspberry Pi cross-compilation toolchains

Ready-to-use, modern GCC cross-compilation toolchains for C, C++ and Fortran.

Raspberry Pi C++ cross-development

Extensive tutorials for setting up Raspberry Pi development environments for cross-compilation and remote development.

Raspberry Pi cross-compilation project

Scripts for building popular tools and libraries such as Python and OpenCV, including a C++ example project.

Raspberry Pi NEON Compositor

C and C++ routines for compositing and overlaying images with transparency.
Makes use of ARM NEON SIMD intrinsics for high performance.

Raspberry Pi Pico C++

Bare minimum C++ project using the Raspberry Pi Pico SDK.

Arduino

Control Surface

Arduino library for all things MIDI-related. Provides a uniform interface for MIDI over USB, MIDI over BLE, MIDI over Serial, etc. It includes ready-to-use classes for building MIDI controllers with all kinds of inputs and outputs (potentiometers, push buttons, rotary encoders, LEDs, OLED displays ...).

Control Surface Motor Fader

PID controller for motorized faders, integrates nicely with the Control Surface library for tracking MIDI automation.

Arduino Filters

A fast and easy to use digital filter library for Arduino-compatible boards.
It supports real-time filtering using discrete-time finite and infinite impulse response filters, and has functions to design Butterworth and notch filters. It also has general smoothing utilities such as (exponential) moving average filters, median filters, hysteresis ... Different filter implementations are available, and high-order filters can be factorized into second order sections for improved numerical stability. All filters use generic types, so they can be used with either floating point types or fixed point integers.

Arduino AVR CMake

Building Arduino projects using CMake.

A Beginner's Guide to the ESP8266

This is an (older) article where I cover the basics of using the ESP8266 as a Wi-Fi enabled microcontroller, using the Arduino IDE.

Tools

VSCode Code Printer

An online tool for printing code snippets or exporting them to PDF or HTML.

Arduino Code Printer

An online tool for printing Arduino code or exporting it to PDFs or HTML.