|
View:
New views
3 Messages
—
Rating Filter:
Alert me
|
|
|
nan(2,2)^(1/2) segfaults octaveoctave:1> nan(2,2)^(1/2)
error: EIG: matrix contains Inf or NaN values panic: Segmentation fault -- stopping myself... Segmentation fault G. ---------------------------------------------------------------------- GNU Octave Version 3.0.0 GNU Octave License: GNU General Public License Operating System: Linux 2.4.18-nec3.4p1.045 #1 SMP Mon Apr 9 16:57:17 JST 2007 ia64 ---------------------------------------------------------------------- |
|
|
Re: nan(2,2)^(1/2) segfaults octaveG.. wrote:
> octave:1> nan(2,2)^(1/2) > error: EIG: matrix contains Inf or NaN values > panic: Segmentation fault -- stopping myself... > Segmentation fault > > > G. > > It doesn't appear to in the 3.1.x tree at the moment.. However, I haven't checked if this is also fixed in the 3.0.x tree.. I can confirm that it crashes 3.0.0 D. -- David Bateman David.Bateman@... Motorola Labs - Paris +33 1 69 35 48 04 (Ph) Parc Les Algorithmes, Commune de St Aubin +33 6 72 01 06 33 (Mob) 91193 Gif-Sur-Yvette FRANCE +33 1 69 35 77 01 (Fax) The information contained in this communication has been classified as: [x] General Business Information [ ] Motorola Internal Use Only [ ] Motorola Confidential Proprietary _______________________________________________ Bug-octave mailing list Bug-octave@... https://www.cae.wisc.edu/mailman/listinfo/bug-octave |
|
|
Re: nan(2,2)^(1/2) segfaults octaveOn 11-Mar-2008, David Bateman wrote:
| G.. wrote: | > octave:1> nan(2,2)^(1/2) | > error: EIG: matrix contains Inf or NaN values | > panic: Segmentation fault -- stopping myself... | > Segmentation fault | > | > | > G. | > | > | | It doesn't appear to in the 3.1.x tree at the moment.. However, I | haven't checked if this is also fixed in the 3.0.x tree.. I can confirm | that it crashes 3.0.0 I checked in the following change to check for errors after computing eigenvalues. Thanks, jwe # HG changeset patch # User John W. Eaton <jwe@...> # Date 1205246973 14400 # Node ID 91f8446ce4ae9085763313060d576bdb8208e0cf # Parent ba8fcc115fee525b479d94ac5a53115ecf7ee257 handle possible error from EIG diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ 2008-03-10 John W. Eaton <jwe@... +2008-03-11 John W. Eaton <jwe@...> + + * DLD-FUNCTIONS/eig.cc (Feig): Handle possible error from EIG. + * DLD-FUNCTIONS/qp.cc (qp, Fqp): Likewise. + * xpow.cc (xpow): Likewise. + 2008-03-10 John W. Eaton <jwe@...> * mex.cc (mxCreateLogicalScalar): Argument is now mxLogical. diff --git a/src/DLD-FUNCTIONS/__qp__.cc b/src/DLD-FUNCTIONS/__qp__.cc --- a/src/DLD-FUNCTIONS/__qp__.cc +++ b/src/DLD-FUNCTIONS/__qp__.cc @@ -137,6 +137,13 @@ qp (const Matrix& H, const ColumnVector& // Computing the ??? EIG eigH (H); + + if (error_state) + { + error ("qp: failed to compute eigenvalues of H"); + return -1; + } + ColumnVector eigenvalH = real (eigH.eigenvalues ()); Matrix eigenvecH = real (eigH.eigenvectors ()); double minReal = eigenvalH.min (); @@ -275,6 +282,13 @@ qp (const Matrix& H, const ColumnVector& // Searching for the most negative curvature. EIG eigrH (rH); + + if (error_state) + { + error ("qp: failed to compute eigenvalues of rH"); + return -1; + } + ColumnVector eigenvalrH = real (eigrH.eigenvalues ()); Matrix eigenvecrH = real (eigrH.eigenvectors ()); double mRrH = eigenvalrH.min (); @@ -496,10 +510,15 @@ Undocumented internal function.\n\ int info = qp (H, q, Aeq, beq, Ain, bin, maxit, x, lambda, iter); - retval(3) = iter; - retval(2) = info; - retval(1) = lambda; - retval(0) = x; + if (! error_state) + { + retval(3) = iter; + retval(2) = info; + retval(1) = lambda; + retval(0) = x; + } + else + error ("qp: internal error"); } else error ("__qp__: invalid arguments"); diff --git a/src/DLD-FUNCTIONS/eig.cc b/src/DLD-FUNCTIONS/eig.cc --- a/src/DLD-FUNCTIONS/eig.cc +++ b/src/DLD-FUNCTIONS/eig.cc @@ -101,18 +101,21 @@ The eigenvalues returned by @code{eig} a return retval; } - if (nargout == 0 || nargout == 1) + if (! error_state) { - retval(0) = result.eigenvalues (); - } - else - { - // Blame it on Matlab. + if (nargout == 0 || nargout == 1) + { + retval(0) = result.eigenvalues (); + } + else + { + // Blame it on Matlab. - ComplexDiagMatrix d (result.eigenvalues ()); + ComplexDiagMatrix d (result.eigenvalues ()); - retval(1) = d; - retval(0) = result.eigenvectors (); + retval(1) = d; + retval(0) = result.eigenvectors (); + } } return retval; diff --git a/src/xpow.cc b/src/xpow.cc --- a/src/xpow.cc +++ b/src/xpow.cc @@ -101,20 +101,26 @@ xpow (double a, const Matrix& b) else { EIG b_eig (b); - ComplexColumnVector lambda (b_eig.eigenvalues ()); - ComplexMatrix Q (b_eig.eigenvectors ()); - for (octave_idx_type i = 0; i < nr; i++) + if (! error_state) { - Complex elt = lambda (i); - if (std::imag (elt) == 0.0) - lambda (i) = std::pow (a, std::real (elt)); - else - lambda (i) = std::pow (a, elt); + ComplexColumnVector lambda (b_eig.eigenvalues ()); + ComplexMatrix Q (b_eig.eigenvectors ()); + + for (octave_idx_type i = 0; i < nr; i++) + { + Complex elt = lambda(i); + if (std::imag (elt) == 0.0) + lambda(i) = std::pow (a, std::real (elt)); + else + lambda(i) = std::pow (a, elt); + } + ComplexDiagMatrix D (lambda); + + retval = ComplexMatrix (Q * D * Q.inverse ()); } - ComplexDiagMatrix D (lambda); - - retval = ComplexMatrix (Q * D * Q.inverse ()); + else + error ("xpow: matrix diagonalization failed"); } return retval; @@ -144,20 +150,26 @@ xpow (double a, const ComplexMatrix& b) else { EIG b_eig (b); - ComplexColumnVector lambda (b_eig.eigenvalues ()); - ComplexMatrix Q (b_eig.eigenvectors ()); - for (octave_idx_type i = 0; i < nr; i++) + if (! error_state) { - Complex elt = lambda (i); - if (std::imag (elt) == 0.0) - lambda (i) = std::pow (a, std::real (elt)); - else - lambda (i) = std::pow (a, elt); + ComplexColumnVector lambda (b_eig.eigenvalues ()); + ComplexMatrix Q (b_eig.eigenvectors ()); + + for (octave_idx_type i = 0; i < nr; i++) + { + Complex elt = lambda(i); + if (std::imag (elt) == 0.0) + lambda(i) = std::pow (a, std::real (elt)); + else + lambda(i) = std::pow (a, elt); + } + ComplexDiagMatrix D (lambda); + + retval = ComplexMatrix (Q * D * Q.inverse ()); } - ComplexDiagMatrix D (lambda); - - retval = ComplexMatrix (Q * D * Q.inverse ()); + else + error ("xpow: matrix diagonalization failed"); } return retval; @@ -228,15 +240,21 @@ xpow (const Matrix& a, double b) else { EIG a_eig (a); - ComplexColumnVector lambda (a_eig.eigenvalues ()); - ComplexMatrix Q (a_eig.eigenvectors ()); - for (octave_idx_type i = 0; i < nr; i++) - lambda (i) = std::pow (lambda (i), b); + if (! error_state) + { + ComplexColumnVector lambda (a_eig.eigenvalues ()); + ComplexMatrix Q (a_eig.eigenvectors ()); - ComplexDiagMatrix D (lambda); + for (octave_idx_type i = 0; i < nr; i++) + lambda(i) = std::pow (lambda(i), b); - retval = ComplexMatrix (Q * D * Q.inverse ()); + ComplexDiagMatrix D (lambda); + + retval = ComplexMatrix (Q * D * Q.inverse ()); + } + else + error ("xpow: matrix diagonalization failed"); } } @@ -257,15 +275,21 @@ xpow (const Matrix& a, const Complex& b) else { EIG a_eig (a); - ComplexColumnVector lambda (a_eig.eigenvalues ()); - ComplexMatrix Q (a_eig.eigenvectors ()); - for (octave_idx_type i = 0; i < nr; i++) - lambda (i) = std::pow (lambda (i), b); + if (! error_state) + { + ComplexColumnVector lambda (a_eig.eigenvalues ()); + ComplexMatrix Q (a_eig.eigenvectors ()); - ComplexDiagMatrix D (lambda); + for (octave_idx_type i = 0; i < nr; i++) + lambda(i) = std::pow (lambda(i), b); - retval = ComplexMatrix (Q * D * Q.inverse ()); + ComplexDiagMatrix D (lambda); + + retval = ComplexMatrix (Q * D * Q.inverse ()); + } + else + error ("xpow: matrix diagonalization failed"); } return retval; @@ -299,20 +323,26 @@ xpow (const Complex& a, const Matrix& b) else { EIG b_eig (b); - ComplexColumnVector lambda (b_eig.eigenvalues ()); - ComplexMatrix Q (b_eig.eigenvectors ()); - for (octave_idx_type i = 0; i < nr; i++) + if (! error_state) { - Complex elt = lambda (i); - if (std::imag (elt) == 0.0) - lambda (i) = std::pow (a, std::real (elt)); - else - lambda (i) = std::pow (a, elt); + ComplexColumnVector lambda (b_eig.eigenvalues ()); + ComplexMatrix Q (b_eig.eigenvectors ()); + + for (octave_idx_type i = 0; i < nr; i++) + { + Complex elt = lambda(i); + if (std::imag (elt) == 0.0) + lambda(i) = std::pow (a, std::real (elt)); + else + lambda(i) = std::pow (a, elt); + } + ComplexDiagMatrix D (lambda); + + retval = ComplexMatrix (Q * D * Q.inverse ()); } - ComplexDiagMatrix D (lambda); - - retval = ComplexMatrix (Q * D * Q.inverse ()); + else + error ("xpow: matrix diagonalization failed"); } return retval; @@ -341,20 +371,26 @@ xpow (const Complex& a, const ComplexMat else { EIG b_eig (b); - ComplexColumnVector lambda (b_eig.eigenvalues ()); - ComplexMatrix Q (b_eig.eigenvectors ()); - for (octave_idx_type i = 0; i < nr; i++) + if (! error_state) { - Complex elt = lambda (i); - if (std::imag (elt) == 0.0) - lambda (i) = std::pow (a, std::real (elt)); - else - lambda (i) = std::pow (a, elt); + ComplexColumnVector lambda (b_eig.eigenvalues ()); + ComplexMatrix Q (b_eig.eigenvectors ()); + + for (octave_idx_type i = 0; i < nr; i++) + { + Complex elt = lambda(i); + if (std::imag (elt) == 0.0) + lambda(i) = std::pow (a, std::real (elt)); + else + lambda(i) = std::pow (a, elt); + } + ComplexDiagMatrix D (lambda); + + retval = ComplexMatrix (Q * D * Q.inverse ()); } - ComplexDiagMatrix D (lambda); - - retval = ComplexMatrix (Q * D * Q.inverse ()); + else + error ("xpow: matrix diagonalization failed"); } return retval; @@ -425,15 +461,21 @@ xpow (const ComplexMatrix& a, double b) else { EIG a_eig (a); - ComplexColumnVector lambda (a_eig.eigenvalues ()); - ComplexMatrix Q (a_eig.eigenvectors ()); - for (octave_idx_type i = 0; i < nr; i++) - lambda (i) = std::pow (lambda (i), b); + if (! error_state) + { + ComplexColumnVector lambda (a_eig.eigenvalues ()); + ComplexMatrix Q (a_eig.eigenvectors ()); - ComplexDiagMatrix D (lambda); + for (octave_idx_type i = 0; i < nr; i++) + lambda(i) = std::pow (lambda(i), b); - retval = ComplexMatrix (Q * D * Q.inverse ()); + ComplexDiagMatrix D (lambda); + + retval = ComplexMatrix (Q * D * Q.inverse ()); + } + else + error ("xpow: matrix diagonalization failed"); } } @@ -454,15 +496,21 @@ xpow (const ComplexMatrix& a, const Comp else { EIG a_eig (a); - ComplexColumnVector lambda (a_eig.eigenvalues ()); - ComplexMatrix Q (a_eig.eigenvectors ()); - for (octave_idx_type i = 0; i < nr; i++) - lambda (i) = std::pow (lambda (i), b); + if (! error_state) + { + ComplexColumnVector lambda (a_eig.eigenvalues ()); + ComplexMatrix Q (a_eig.eigenvectors ()); - ComplexDiagMatrix D (lambda); + for (octave_idx_type i = 0; i < nr; i++) + lambda(i) = std::pow (lambda(i), b); - retval = ComplexMatrix (Q * D * Q.inverse ()); + ComplexDiagMatrix D (lambda); + + retval = ComplexMatrix (Q * D * Q.inverse ()); + } + else + error ("xpow: matrix diagonalization failed"); } return retval; _______________________________________________ Bug-octave mailing list Bug-octave@... https://www.cae.wisc.edu/mailman/listinfo/bug-octave |
| Free embeddable forum powered by Nabble | Forum Help |