Rank-Revealing QR factorization of an array. The mex-functions are using the rank-revealing QR routines xGEQPX and xGEQPY from ACM Algorithm 782. Can also handle complex and single precision array's.
Ivo Houtzager (2021). Rank-Revealing QR factorization (https://github.com/iwoodsawyer/rrqr/releases/tag/v126.96.36.199), GitHub. Retrieved .
According to the xerbla definition in the header file Matlab\R2020b\extern\include\blas.h, the xerbla function expects 2 input arguments. Are you using a different BLAS library then the libmwblas.lib provided in Matlab? I checked VS C++ 2019 with R2020b and get no compilation errors for xerbla.
Seems ok except it does not compile with VS C++ 2019. This seems to be because of deprecated/fortran-based calls to xerbla. Fortran version of xerbla needs 2 inputs while the c version needs 3. The c-code in the AMS 782 folder calls xerbla with 2 inputs and mex did not like that. I switched out the calls and it compiled, but it was a bit of work. I realize the author may have just copied and pasted AMS 782 files from somewhere else and so had no reason to expect them not to work. Nonetheless, fixing this issue would make the code better/more useable.
Here's how I managed to compile librrqr.a
# first download the package (it is actually a shell script that creates a bunch of files)
wget http://www.netlib.org/netlib/toms/782 -O 782.sh
# remove the top 3 lines with the ACM info
sed -i '1,3d' 782.sh
# replace all $( and $?in the cat areas for makefiles with \$( and \$?to work with newer versions of sh
sed -i 's/\$[\(]/\\$\(/g' 782.sh
sed -i 's/\$[\?]/\\$?/g' 782.sh
# now extract the rrqr_acm directory
To compile go into rrqr_acm/lib and run make. You will probably need to first edit the Makefile and change the fortran compiler from f77 to gfortran and add -fPIC to the OPTS. After running make, there should be a file rrqr.a in the rrqr_acm directory. Move this to librrqr.a in the directory with the matlab and c files and now you should be able to compile the mex file.
I had difficulty in compiling the ACM 782 algorithm on Linux (the "make" instructions seem to be out of date).
You should create an m-file called rrqr_install.m that compiles this code and the RRQR algorithm from the ACM - all using the "mex" command from inside MATLAB. That way, your installation should work on any MATLAB. The one-line instructions you give using rrqr.lib assume you're on Windows (there would be an rrqr.a on Linux/Unix, or a rrqr.so, not a Windows rrqr.lib).
You should also provide instructions on where to find the ACM algorithm (I found it here:
but that detail should be in your installation instructions.
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!