Path: news.mathworks.com!not-for-mail
From: <HIDDEN>
Newsgroups: comp.soft-sys.matlab
Subject: Re: nonnegative Ax=b lsq for large, sparse A.
Date: Fri, 26 Jun 2009 15:39:01 +0000 (UTC)
Organization: Xoran Technologies
Lines: 23
Message-ID: <h22q2l$sdn$1@fred.mathworks.com>
References: <h22iil$a5s$1@fred.mathworks.com> <h22k59$om8$1@fred.mathworks.com> <h22ot5$bca$1@fred.mathworks.com>
Reply-To: <HIDDEN>
NNTP-Posting-Host: webapp-05-blr.mathworks.com
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit
X-Trace: fred.mathworks.com 1246030741 29111 172.30.248.35 (26 Jun 2009 15:39:01 GMT)
X-Complaints-To: news@mathworks.com
NNTP-Posting-Date: Fri, 26 Jun 2009 15:39:01 +0000 (UTC)
X-Newsreader: MATLAB Central Newsreader 1440443
Xref: news.mathworks.com comp.soft-sys.matlab:550921


"Thomas Clark" <t.clark@remove.spamcantab.net> wrote in message <h22ot5$bca$1@fred.mathworks.com>...

> Unfortunately, lsqlin isn't quite there... The solution is pathologically slow for this matrix - my feeling is that the preconditioning isn't working well. I've tried increasing the PrecondBandWidth option, but to little avail.(increasing it to Inf causes a direct factorisation which leaves me out of memory, of course). 
--------

If the Hessian A.'*A is diagonally concentrated, you might be able to get away with pre-conditioning by inverting the Hessian diagonal. Here's a modification of the Maj-Min approach incorporating this idea.

W=sum(A.^2,2); %Hessian diagonal
W=1./W; %invert



 Curvs=A'*(sum(A,2).*W); %majorizing curvatures

 x=x0; %Initialize x with some vector x0>=0

for i=1:NumIterations %MAIN LOOP

 gradient=A.'*((Ax-b).*W);
 x=x-gradient./Curvs;
 x(x<0)=0;

end