CVX is a very convenient convex optimization package that allows the user to specify the optimization objective and constraints directly instead of manually manipulating them (by various transformations) into forms that are accepted by commonly available software like quadprog().
What I want to show today is not CVX, but a technique to handle the many different versions of the same program targeted at each system architecture (32/64-bit, Windows/Mac/Linux). Here’s a snapshot of what’s available with cvx:
OS | 32/64 | mexext | Download links |
Linux | 32-bit | mexglx | cvx-glx.zip |
64-bit | mexa64 | cvx-a64.zip | |
Mac | 32-bit | mexmaci | cvx-maci.zip |
64-bit | mexmaci64 | cvx-maci64.zip | |
Windows | 32-bit | mexw32 | cvx-w32.zip |
64-bit | mexw64 | cvx-w64.zip |
You can download all packages for different architectures, but make a folder for each of them by their mexext() name. For example, 32-bit Windows’ implementation can go under /mexw32/cvx. Then you can programmatically initialize the right package for say, your startup.m file:
run( fullfile(yourLibrary, mexext(), 'cvx', 'cvx_startup.m') );
I intentionally put the /[mexext()] above /cvx, not the other way round because if you have many different software packages and want to include them in the path, you can do it in one shot without filtering for the platform names:
addpath( genpath( fullfile(yourLibrary, mexext()) ) );
You can consider using computer(‘arch’) in place of mexext(), but the names are different and you have to name your folders accordingly. For CVX, it happens to go by mexext(), so I naturally used mexext() instead.