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