Mercurial > octave
changeset 33023:92a2e883af17
maint: Merge stable to default.
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Wed, 14 Feb 2024 15:07:28 +0100 |
parents | 46fc602f334c (current diff) 4239095e41c1 (diff) |
children | 1220b63eea0e b36f682052d9 |
files | |
diffstat | 1 files changed, 32 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/gsvd.cc Wed Feb 14 15:01:14 2024 +0100 +++ b/libinterp/corefcn/gsvd.cc Wed Feb 14 15:07:28 2024 +0100 @@ -283,17 +283,17 @@ %! assert (S0, S1, 20*eps); ## a few tests for gsvd.m -%!shared A, A0, B, B0, U, V, C, S, X +%!shared A0, B0 %! old_state = randn ("state"); %! restore_state = onCleanup (@() randn ("state", old_state)); -%! randn ("state", 40); # initialize generator to make behavior reproducible +%! randn ("state", 40); # initialize generator to make behavior reproducible %! A0 = randn (5, 3); %! B0 = diag ([1 2 4]); -%! A = A0; -%! B = B0; ## A (5x3) and B (3x3) are full rank %!test <48807> +%! A = A0; +%! B = B0; %! [U, V, X, C, S] = gsvd (A, B); %! assert (C'*C + S'*S, eye (3), 5*eps); %! assert (U*C*X', A, 10*eps); @@ -301,6 +301,8 @@ ## A: 5x3 full rank, B: 3x3 rank deficient %!test <48807> +%! A = A0; +%! B = B0; %! B(2, 2) = 0; %! [U, V, X, C, S] = gsvd (A, B); %! assert (C'*C + S'*S, eye (3), 5*eps); @@ -309,6 +311,7 @@ ## A: 5x3 rank deficient, B: 3x3 full rank %!test <48807> +%! A = A0; %! B = B0; %! A(:, 3) = 2*A(:, 1) - A(:, 2); %! [U, V, X, C, S] = gsvd (A, B); @@ -319,6 +322,8 @@ ## A and B are both rank deficient ## FIXME: LAPACK seems to be completely broken for this case %!#test <48807> +%! A = A0; +%! B = B0; %! B(:, 3) = 2*B(:, 1) - B(:, 2); %! [U, V, X, C, S] = gsvd (A, B); %! assert (C'*C + S'*S, eye (3), 5*eps); @@ -328,8 +333,7 @@ ## A (now 3x5) and B (now 5x5) are full rank %!test <48807> %! A = A0.'; -%! B0 = diag ([1 2 4 8 16]); -%! B = B0; +%! B = diag ([1 2 4 8 16]); %! [U, V, X, C, S] = gsvd (A, B); %! assert (C'*C + S'*S, eye (5), 5*eps); %! assert (U*C*X', A, 15*eps); @@ -337,6 +341,8 @@ ## A: 3x5 full rank, B: 5x5 rank deficient %!test <48807> +%! A = A0.'; +%! B = diag ([1 2 4 8 16]); %! B(2, 2) = 0; %! [U, V, X, C, S] = gsvd (A, B); %! assert (C'*C + S'*S, eye (5), 5*eps); @@ -345,7 +351,8 @@ ## A: 3x5 rank deficient, B: 5x5 full rank %!test <48807> -%! B = B0; +%! A = A0.'; +%! B = diag ([1 2 4 8 16]); %! A(3, :) = 2*A(1, :) - A(2, :); %! [U, V, X, C, S] = gsvd (A, B); %! assert (C'*C + S'*S, eye (5), 5*eps); @@ -367,11 +374,9 @@ %!test <48807> %! old_state = randn ("state"); %! restore_state = onCleanup (@() randn ("state", old_state)); -%! randn ("state", 12345); # initialize generator to make behavior reproducible -%! A0 = A0 + j* randn (5, 3); -%! B0 = diag ([1 2 4]) + j* diag ([4 -2 -1]); -%! A = A0; -%! B = B0; +%! randn ("state", 12345); # initialize generator to make behavior reproducible +%! A = A0 + j* randn (5, 3); +%! B = diag ([1 2 4]) + j* diag ([4 -2 -1]); %! [U, V, X, C, S] = gsvd (A, B); %! assert (C'*C + S'*S, eye (3), 5*eps); %! assert (U*C*X', A, 10*eps); @@ -379,6 +384,8 @@ ## A: 5x3 complex full rank, B: 3x3 complex rank deficient %!test <48807> +%! A = A0 + j* randn (5, 3); +%! B = diag ([1 2 4]) + j* diag ([4 -2 -1]); %! B(2, 2) = 0; %! [U, V, X, C, S] = gsvd (A, B); %! assert (C'*C + S'*S, eye (3), 5*eps); @@ -387,7 +394,8 @@ ## A: 5x3 complex rank deficient, B: 3x3 complex full rank %!test <48807> -%! B = B0; +%! A = A0 + j* randn (5, 3); +%! B = diag ([1 2 4]) + j* diag ([4 -2 -1]); %! A(:, 3) = 2*A(:, 1) - A(:, 2); %! [U, V, X, C, S] = gsvd (A, B); %! assert (C'*C + S'*S, eye (3), 5*eps); @@ -397,6 +405,8 @@ ## A (5x3) and B (3x3) are both complex rank deficient ## FIXME: LAPACK seems to be completely broken for this case %!#test <48807> +%! A = A0 + j* randn (5, 3); +%! B = diag ([1 2 4]) + j* diag ([4 -2 -1]); %! B(:, 3) = 2*B(:, 1) - B(:, 2); %! [U, V, X, C, S] = gsvd (A, B); %! assert (C'*C + S'*S, eye (3), 5*eps); @@ -407,8 +417,7 @@ ## now, A is 3x5 %!test <48807> %! A = A0.'; -%! B0 = diag ([1 2 4 8 16]) + j* diag ([-5 4 -3 2 -1]); -%! B = B0; +%! B = diag ([1 2 4 8 16]) + j* diag ([-5 4 -3 2 -1]); %! [U, V, X, C, S] = gsvd (A, B); %! assert (C'*C + S'*S, eye (5), 5*eps); %! assert (U*C*X', A, 25*eps); @@ -416,7 +425,8 @@ ## A: 3x5 complex full rank, B: 5x5 complex rank deficient %!test <48807> -%! B(2, 2) = 0; +%! A = A0.'; +%! B = diag ([1 0 4 8 16]) + j* diag ([-5 0 -3 2 -1]); %! [U, V, X, C, S] = gsvd (A, B); %! assert (C'*C + S'*S, eye (5), 5*eps); %! assert (U*C*X', A, 10*eps); @@ -424,7 +434,8 @@ ## A: 3x5 complex rank deficient, B: 5x5 complex full rank %!test <48807> -%! B = B0; +%! A = A0.'; +%! B = diag ([1 2 4 8 16]) + j* diag ([-5 4 -3 2 -1]); %! A(3, :) = 2*A(1, :) - A(2, :); %! [U, V, X, C, S] = gsvd (A, B); %! assert (C'*C + S'*S, eye (5), 5*eps); @@ -445,9 +456,11 @@ ## Test that single inputs produce single outputs %!test +%! A = A0.'; +%! B = diag ([1 2 4 8 16]) + j* diag ([-5 4 -3 2 -1]); %! s = gsvd (single (eye (5)), B); %! assert (class (s), "single"); -%! [U,V,X,C,S] = gsvd (single (eye(5)), B); +%! [U, V, X, C, S] = gsvd (single (eye(5)), B); %! assert (class (U), "single"); %! assert (class (V), "single"); %! assert (class (X), "single"); @@ -456,7 +469,7 @@ %! %! s = gsvd (A, single (eye (5))); %! assert (class (s), "single"); -%! [U,V,X,C,S] = gsvd (A, single (eye (5))); +%! [U, V, X, C, S] = gsvd (A, single (eye (5))); %! assert (class (U), "single"); %! assert (class (V), "single"); %! assert (class (X), "single");