Interpolative Decomposition based on Strong RRQR

Version 1.0.3 (17.2 KB) by Xin Xing
A matlab implementation of the interpolative decomposition based on strong RRQR
179 Downloads
Updated 16 Jul 2021

View License

The interpolative decomposition (ID) (see reference in the bottom) is a useful low-rank form in many structured matrix representations. This matlab code has been used a lot in my research for an efficient ID approximation.
Given an m*n matrix A, the code gives an rank-k ID approximation of A in the form of
A \approx U * A(J, :)
where J is a row index subset of size k, and U is a m*k matrix with entries bounded by the pre-specified constant. A(J,:) and U are usually called the skeleton and projection matrix, respectively.
The code contains the ID approximation with (1) a fixed rank, i.e., the dimension of R11; (2) an error threshold, i.e., each row error vector of the above approximation has norm less than the threshold.
ALGORITHM DESCRIPTION:
Denote the partial strong RRQR of A' as
A' * P = [Q1, Q2] * [R11, R12; 0, R22]
\approx Q1 * [R11, R12]
where P is a permutation matrix, [Q1, Q2] is an orthgonal matrix, R11 is an upper-triangular matrix, and R22 is not necessarily an upper-triangular matrix. In addition, by strong RRQR, entries of the matrix inv(R11)*R12 all have absolute value bounded by a pre-specified constant that is not less than 1.
The ID approximation of A can be obtained as
A' * P \approx Q1 * [R11, R12]
= [Q1*R11, Q1*R12]
= [A1', A1'*inv(R11)*R12] (A1' denotes the corresponding first few columns of A'P)
= A1' * [eye, inv(R11)*R12]
= A1' * [eye, E'] (denote inv(R11)*R12 as E')
Then, by simple transformation
P' * A \approx [eye; E] * A1
A \approx P * [eye; E] *A1
Denote U = P*[eye;E] and A1 = A(J, :), the ID is written as
A \approx U * A(J, :);
Reference:
Cheng, Hongwei, Zydrunas Gimbutas, Per-Gunnar Martinsson, and Vladimir Rokhlin. "On the compression of low rank matrices." SIAM Journal on Scientific Computing 26, no. 4 (2005): 1389-1404.
Note:
QRpartial.c is a simplified partial pivoting QR code which do not return the orthogonal matrix Q and only returns the permutation vector and the half-finished triangular matrix [R11, R12; 0, R22]. (R22 is not necessary to be an upper-triangular matrix).
QRpartial.c can be faster than full qr.m in Matlab if rank of ID is small. However, it still cannot compete with the full matlab qr.m in some cases. There is still chance to further accelerate QRpartial.c simply through a better coding. Greatly appreciated if any one can provide an efficient partial pivoting QR code for both a fixed rank or a fixed threshold.

Cite As

Xin Xing (2025). Interpolative Decomposition based on Strong RRQR (https://uk.mathworks.com/matlabcentral/fileexchange/69352-interpolative-decomposition-based-on-strong-rrqr), MATLAB Central File Exchange. Retrieved .

MATLAB Release Compatibility
Created with R2018b
Compatible with any release
Platform Compatibility
Windows macOS Linux
Categories
Find more on Interpolation in Help Center and MATLAB Answers

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!
Version Published Release Notes
1.0.3

Add a m file for the givens function

1.0.2

*minor bug fix in sRRQR_ID_tol.m

1.0.1

*Fix a minor bug ID approximation with rank being the number of rows

1.0.0