File Exchange

## lsqnonnegvect.m

version 1.1.0.0 (11.2 KB) by
vectorized lsqnonneg

Updated 13 Sep 2016

This is a "vectorized" version of lsqnonneg to speed-up solving multiple non-negative least square fits of independent data vectors to a common base of model vectors. The function is based on Matlab's lsqnonneg function. I adapted the code to allow for multiple (column) data vectors and vectorized everything I could to speed-up processing.
This was developped in the context of fitting pixel intensitiy (a positive value) of every pixel in a time series of fluorescence images (N voxels, T images) to reference fluorescence time-activity curves.
The speed-up factor will vary depending on the data size, but the syntax is more compact, as shown below.
% Example : 10000 vectors of 100 time points that need to be fitted with non-negative least squares to 5 model curves

nTimePts = 100;
nDataVect = 10000;
nModels = 5;

% Data matrix
d = rand(nTimePts, nDataVect);

% Reference (model) curves
C = rand(nTimePts, nModels);

% Non-negative least-square fit
X = lsqnonnegvect(C,d);

% X = zeros(nModels,nDataVect);
% for k = 1:nDataVect
% X(:,k) = lsqnonneg(C,d(:,k));
% end

### Cite As

David Provencher (2021). lsqnonnegvect.m (https://www.mathworks.com/matlabcentral/fileexchange/47476-lsqnonnegvect-m), MATLAB Central File Exchange. Retrieved .

mbar170

Fantastic function, with huge speedup. Thanks very much for sharing!

Ribana Roscher

Hao Xie

Thansks for sharing. It works!! (Negligible numerical errors occur when using "isequal" to test.)

Silas Leavesley

This is a great way to speed up non-negatively-constrained linear unmixing of spectral images - thanks!

##### MATLAB Release Compatibility
Created with R2011b
Compatible with any release
##### Platform Compatibility
Windows macOS Linux