Mercurial > octave-nkf
comparison libinterp/corefcn/eig.cc @ 20525:ff904ae0285b
eig: Return correct solution for a pair of hermitian matrices (bug #45511)
* liboctave/numeric/EIG.cc (EIG::init): Use correct form of hermitian_init.
* liboctave/numeric/fEIG.cc (FloatEIG::init): Likewise.
* libinterp/corefcn/eig.cc: Add %!test cases.
Thanks to Marco Caliari for identifying the fix.
author | Mike Miller <mtmiller@octave.org> |
---|---|
date | Tue, 15 Sep 2015 08:48:35 -0400 |
parents | 4f45eaf83908 |
children | f90c8372b7ba |
comparison
equal
deleted
inserted
replaced
20524:ba4088aee342 | 20525:ff904ae0285b |
---|---|
322 %! A = [1, 2; 3, 8]; B = [8, 3; 4, 3]; | 322 %! A = [1, 2; 3, 8]; B = [8, 3; 4, 3]; |
323 %! [v, d] = eig (A, B); | 323 %! [v, d] = eig (A, B); |
324 %! assert (A * v(:, 1), d(1, 1) * B * v(:, 1), sqrt (eps)); | 324 %! assert (A * v(:, 1), d(1, 1) * B * v(:, 1), sqrt (eps)); |
325 %! assert (A * v(:, 2), d(2, 2) * B * v(:, 2), sqrt (eps)); | 325 %! assert (A * v(:, 2), d(2, 2) * B * v(:, 2), sqrt (eps)); |
326 | 326 |
327 %!test | |
328 %! A = [1, 1+i; 1-i, 1]; B = [2, 0; 0, 2]; | |
329 %! [v, d] = eig (A, B); | |
330 %! assert (A * v(:, 1), d(1, 1) * B * v(:, 1), sqrt (eps)); | |
331 %! assert (A * v(:, 2), d(2, 2) * B * v(:, 2), sqrt (eps)); | |
332 | |
333 %!test | |
334 %! A = single ([1, 1+i; 1-i, 1]); B = single ([2, 0; 0, 2]); | |
335 %! [v, d] = eig (A, B); | |
336 %! assert (A * v(:, 1), d(1, 1) * B * v(:, 1), sqrt (eps ("single"))); | |
337 %! assert (A * v(:, 2), d(2, 2) * B * v(:, 2), sqrt (eps ("single"))); | |
338 | |
327 %!error eig () | 339 %!error eig () |
328 %!error eig ([1, 2; 3, 4], [4, 3; 2, 1], 1) | 340 %!error eig ([1, 2; 3, 4], [4, 3; 2, 1], 1) |
329 %!error <EIG requires same size matrices> eig ([1, 2; 3, 4], 2) | 341 %!error <EIG requires same size matrices> eig ([1, 2; 3, 4], 2) |
330 %!error <argument must be a square matrix> eig ([1, 2; 3, 4; 5, 6]) | 342 %!error <argument must be a square matrix> eig ([1, 2; 3, 4; 5, 6]) |
331 %!error <wrong type argument> eig ("abcd") | 343 %!error <wrong type argument> eig ("abcd") |