Python code accompanying the paper "Non-smooth Variable Projection" by T. van Leeuwen and A. Aravkin. Submitted to SISC.
The algorithms are designed to solve problems of the form
where
Algorithm 1 solves it using
Algorithm 2 and 3 essentially recast the problem as
where
The main difference between algorithms 2 and 3 being that the latter solves the inner problem in
The main benefits of the VP approach over the naïve joint approach are
- The conditioning of
$\overline{f}$ is generally much better than that of$f$ , and at least not worse. This leads to a faster convergence of algorithms 2,3 as compared to algorithm 1. - The inexact method (algorithm 3) generally requires much less computation time than the exact version (algorithm 2).
- Efficient solvers for the inner problem can be exploited easily.
varprons.py
: implementation of Algorithms 2.1, 2.2 and 2.3./applicatons
: Jupyter notebooks containing numerical examples presented in the paper
The implementation used (amongst others) the pyunlocbox
module. See requirements.txt
- Install the requirements:
$ pip install -r requirements.txt
- Run the notebooks in
./applications
Feel free to contact me if you have any questions or need help adapting the code to your own problems.