Mercurial > hg > pycsalgos
comparison pyCSalgos/BP/l1eq_pd.py @ 63:2fc28e2ae0a2
Fixed minor naming in l1eq_pd()
author | Nic Cleju <nikcleju@gmail.com> |
---|---|
date | Mon, 12 Mar 2012 16:42:12 +0200 |
parents | e684f76c1969 |
children | 3d53309236c4 |
comparison
equal
deleted
inserted
replaced
62:e684f76c1969 | 63:2fc28e2ae0a2 |
---|---|
1 | 1 |
2 import numpy | 2 import numpy |
3 import scipy.linalg | 3 import scipy.linalg |
4 import math | 4 import math |
5 | 5 |
6 class l1ecNotImplementedError(Exception): | 6 class l1eqNotImplementedError(Exception): |
7 pass | 7 pass |
8 | 8 |
9 #function xp = l1eq_pd(x0, A, At, b, pdtol, pdmaxiter, cgtol, cgmaxiter) | 9 #function xp = l1eq_pd(x0, A, At, b, pdtol, pdmaxiter, cgtol, cgmaxiter) |
10 def l1eq_pd(x0, A, At, b, pdtol=1e-3, pdmaxiter=50, cgtol=1e-8, cgmaxiter=200, verbose=False): | 10 def l1eq_pd(x0, A, At, b, pdtol=1e-3, pdmaxiter=50, cgtol=1e-8, cgmaxiter=200, verbose=False): |
11 | 11 |
238 gradf0 = numpy.hstack((numpy.zeros(N), numpy.ones(N))) | 238 gradf0 = numpy.hstack((numpy.zeros(N), numpy.ones(N))) |
239 | 239 |
240 # starting point --- make sure that it is feasible | 240 # starting point --- make sure that it is feasible |
241 #if (largescale) | 241 #if (largescale) |
242 if largescale: | 242 if largescale: |
243 raise l1qcNotImplementedError('Largescale not implemented yet!') | 243 raise l1eqNotImplementedError('Largescale not implemented yet!') |
244 else: | 244 else: |
245 #if (norm(A*x0-b)/norm(b) > cgtol) | 245 #if (norm(A*x0-b)/norm(b) > cgtol) |
246 if numpy.linalg.norm(numpy.dot(A,x0)-b) / numpy.linalg.norm(b) > cgtol: | 246 if numpy.linalg.norm(numpy.dot(A,x0)-b) / numpy.linalg.norm(b) > cgtol: |
247 #disp('Starting point infeasible; using x0 = At*inv(AAt)*y.'); | 247 #disp('Starting point infeasible; using x0 = At*inv(AAt)*y.'); |
248 if verbose: | 248 if verbose: |
282 lamu2 = -1/fu2 | 282 lamu2 = -1/fu2 |
283 if (largescale): | 283 if (largescale): |
284 #v = -A(lamu1-lamu2); | 284 #v = -A(lamu1-lamu2); |
285 #Atv = At(v); | 285 #Atv = At(v); |
286 #rpri = A(x) - b; | 286 #rpri = A(x) - b; |
287 raise l1qcNotImplementedError('Largescale not implemented yet!') | 287 raise l1eqNotImplementedError('Largescale not implemented yet!') |
288 else: | 288 else: |
289 #v = -A*(lamu1-lamu2); | 289 #v = -A*(lamu1-lamu2); |
290 #Atv = A'*v; | 290 #Atv = A'*v; |
291 #rpri = A*x - b; | 291 #rpri = A*x - b; |
292 v = numpy.dot(-A, lamu1-lamu2) | 292 v = numpy.dot(-A, lamu1-lamu2) |
334 # return | 334 # return |
335 #end | 335 #end |
336 #dx = (w1 - w2.*sig2./sig1 - At(dv))./sigx; | 336 #dx = (w1 - w2.*sig2./sig1 - At(dv))./sigx; |
337 #Adx = A(dx); | 337 #Adx = A(dx); |
338 #Atdv = At(dv); | 338 #Atdv = At(dv); |
339 raise l1qcNotImplementedError('Largescale not implemented yet!') | 339 raise l1eqNotImplementedError('Largescale not implemented yet!') |
340 else: | 340 else: |
341 #w1p = -(w3 - A*(w1./sigx - w2.*sig2./(sigx.*sig1))); | 341 #w1p = -(w3 - A*(w1./sigx - w2.*sig2./(sigx.*sig1))); |
342 w1p = -(w3 - numpy.dot(A,(w1/sigx - w2*sig2/(sigx*sig1)))) | 342 w1p = -(w3 - numpy.dot(A,(w1/sigx - w2*sig2/(sigx*sig1)))) |
343 #H11p = A*(sparse(diag(1./sigx))*A'); | 343 #H11p = A*(sparse(diag(1./sigx))*A'); |
344 H11p = numpy.dot(A, numpy.dot(numpy.diag(1/sigx),A.T)) | 344 H11p = numpy.dot(A, numpy.dot(numpy.diag(1/sigx),A.T)) |
457 | 457 |
458 if verbose: | 458 if verbose: |
459 print 'Iteration =',pditer,', tau =',tau,', Primal =',numpy.sum(u),', PDGap =',sdg,', Dual res =',numpy.linalg.norm(rdual),', Primal res =',numpy.linalg.norm(rpri) | 459 print 'Iteration =',pditer,', tau =',tau,', Primal =',numpy.sum(u),', PDGap =',sdg,', Dual res =',numpy.linalg.norm(rdual),', Primal res =',numpy.linalg.norm(rpri) |
460 if largescale: | 460 if largescale: |
461 #disp(sprintf(' CG Res = #8.3e, CG Iter = #d', cgres, cgiter)); | 461 #disp(sprintf(' CG Res = #8.3e, CG Iter = #d', cgres, cgiter)); |
462 raise l1qcNotImplementedError('Largescale not implemented yet!') | 462 raise l1eqNotImplementedError('Largescale not implemented yet!') |
463 else: | 463 else: |
464 #disp(sprintf(' H11p condition number = #8.3e', hcond)); | 464 #disp(sprintf(' H11p condition number = #8.3e', hcond)); |
465 if verbose: | 465 if verbose: |
466 print ' H11p condition number =',hcond | 466 print ' H11p condition number =',hcond |
467 #end | 467 #end |