Mercurial > octave-nkf
comparison src/DLD-FUNCTIONS/__qp__.cc @ 11682:b7a30502f0c9 release-3-0-x
handle possible error from EIG
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 11 Mar 2008 10:49:33 -0400 |
parents | a2000c2b5e7d |
children | 72830070a17b |
comparison
equal
deleted
inserted
replaced
11681:114dcfc15432 | 11682:b7a30502f0c9 |
---|---|
135 } | 135 } |
136 | 136 |
137 // Computing the ??? | 137 // Computing the ??? |
138 | 138 |
139 EIG eigH (H); | 139 EIG eigH (H); |
140 | |
141 if (error_state) | |
142 { | |
143 error ("qp: failed to compute eigenvalues of H"); | |
144 return -1; | |
145 } | |
146 | |
140 ColumnVector eigenvalH = real (eigH.eigenvalues ()); | 147 ColumnVector eigenvalH = real (eigH.eigenvalues ()); |
141 Matrix eigenvecH = real (eigH.eigenvectors ()); | 148 Matrix eigenvecH = real (eigH.eigenvectors ()); |
142 double minReal = eigenvalH.min (); | 149 double minReal = eigenvalH.min (); |
143 octave_idx_type indminR = 0; | 150 octave_idx_type indminR = 0; |
144 for (octave_idx_type i = 0; i < n; i++) | 151 for (octave_idx_type i = 0; i < n; i++) |
270 info = 1; | 277 info = 1; |
271 | 278 |
272 // Searching for the most negative curvature. | 279 // Searching for the most negative curvature. |
273 | 280 |
274 EIG eigrH (rH); | 281 EIG eigrH (rH); |
282 | |
283 if (error_state) | |
284 { | |
285 error ("qp: failed to compute eigenvalues of rH"); | |
286 return -1; | |
287 } | |
288 | |
275 ColumnVector eigenvalrH = real (eigrH.eigenvalues ()); | 289 ColumnVector eigenvalrH = real (eigrH.eigenvalues ()); |
276 Matrix eigenvecrH = real (eigrH.eigenvectors ()); | 290 Matrix eigenvecrH = real (eigrH.eigenvectors ()); |
277 double mRrH = eigenvalrH.min (); | 291 double mRrH = eigenvalrH.min (); |
278 indminR = 0; | 292 indminR = 0; |
279 for (octave_idx_type i = 0; i < n; i++) | 293 for (octave_idx_type i = 0; i < n; i++) |
492 // Reordering the Lagrange multipliers | 506 // Reordering the Lagrange multipliers |
493 ColumnVector lambda; | 507 ColumnVector lambda; |
494 | 508 |
495 int info = qp (H, q, Aeq, beq, Ain, bin, maxit, x, lambda, iter); | 509 int info = qp (H, q, Aeq, beq, Ain, bin, maxit, x, lambda, iter); |
496 | 510 |
497 retval(3) = iter; | 511 if (! error_state) |
498 retval(2) = info; | 512 { |
499 retval(1) = lambda; | 513 retval(3) = iter; |
500 retval(0) = x; | 514 retval(2) = info; |
515 retval(1) = lambda; | |
516 retval(0) = x; | |
517 } | |
518 else | |
519 error ("qp: internal error"); | |
501 } | 520 } |
502 else | 521 else |
503 error ("__qp__: invalid arguments"); | 522 error ("__qp__: invalid arguments"); |
504 } | 523 } |
505 else | 524 else |