Mercurial > octave
changeset 32453:52d64865afdb
qr.cc: Overhaul built-in self tests
* libinterp/corefcn/qr.cc: Remove duplicate test. Use two or three arguments
for assert to get information about actual deviation in output of failing tests.
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Sun, 29 Oct 2023 16:55:36 +0100 |
parents | 943a95892df0 |
children | 7918937426cf |
files | libinterp/corefcn/qr.cc |
diffstat | 1 files changed, 125 insertions(+), 109 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/qr.cc Sun Oct 29 16:22:54 2023 +0100 +++ b/libinterp/corefcn/qr.cc Sun Oct 29 16:55:36 2023 +0100 @@ -719,17 +719,6 @@ %!test %! a = [0, 2, 1; 2, 1, 2]; %! -%! [q, r] = qr (a); -%! [qe, re] = qr (a, 0); -%! [qe2, re2] = qr (a, "econ"); -%! -%! assert (q * r, a, sqrt (eps)); -%! assert (qe * re, a, sqrt (eps)); -%! assert (qe2 * re2, a, sqrt (eps)); - -%!test -%! a = [0, 2, 1; 2, 1, 2]; -%! %! [q, r, p] = qr (a); # FIXME: not giving right dimensions. %! [qe, re, pe] = qr (a, 0); %! [qe2, re2, pe2] = qr (a, "econ"); @@ -892,7 +881,10 @@ %! 29 -44 52 -23 208 208 -911 99 ]; %! [q,r] = qr (a); %! -%! assert (all (t) && norm (q*r - a) < 5000*eps); +%! assert (all (t)); +%! if (all (t)) +%! assert (norm (q*r - a), 0, 5000*eps); +%! endif %!test %! a = single ([0, 2, 1; 2, 1, 2]); @@ -1022,7 +1014,10 @@ %! 29 -44 52 -23 208 208 -911 99 ]; %! [q,r] = qr (a); %! -%! assert (all (t) && norm (q*r-a) < 5000* eps ("single")); +%! assert (all (t)); +%! if (all (t)) +%! assert (norm (q*r - a), 0, 5000 * eps ("single")); +%! endif ## The deactivated tests below can't be tested till rectangular back-subs is ## implemented for sparse matrices. @@ -1084,7 +1079,7 @@ %! randn ("state", 42); %! a = 1i* sprandn (n,n,d) + speye (n,n); %! r = qr (a); -%! assert (r'*r,a'*a,1e-10); +%! assert (r'*r, a'*a, 1e-10); %!testif HAVE_COLAMD; (__have_feature__ ("SPQR") && __have_feature__ ("CHOLMOD")) || __have_feature__ ("CXSPARSE") %! n = 20; d = 0.2; @@ -1425,32 +1420,34 @@ %!test %! [Q,R] = qr (A); %! [Q,R] = qrupdate (Q, R, u, v); -%! assert (norm (vec (Q'*Q - eye (5)), Inf) < 1e1*eps); -%! assert (norm (vec (triu (R)-R), Inf) == 0); -%! assert (norm (vec (Q*R - A - u*v'), Inf) < norm (A)*1e1*eps); +%! assert (norm (vec (Q'*Q - eye (5)), Inf), 0, 1e1*eps); +%! assert (norm (vec (triu (R)-R), Inf), 0); +%! assert (norm (vec (Q*R - A - u*v'), Inf), 0, norm (A)*1e1*eps); %! %!test %! [Q,R] = qr (Ac); %! [Q,R] = qrupdate (Q, R, uc, vc); -%! assert (norm (vec (Q'*Q - eye (5)), Inf) < 1e1*eps); -%! assert (norm (vec (triu (R)-R), Inf) == 0); -%! assert (norm (vec (Q*R - Ac - uc*vc'), Inf) < norm (Ac)*1e1*eps); +%! assert (norm (vec (Q'*Q - eye (5)), Inf), 0, 1e1*eps); +%! assert (norm (vec (triu (R)-R), Inf), 0); +%! assert (norm (vec (Q*R - Ac - uc*vc'), Inf), 0, norm (Ac)*1e1*eps); %!test %! [Q,R] = qr (single (A)); %! [Q,R] = qrupdate (Q, R, single (u), single (v)); -%! assert (norm (vec (Q'*Q - eye (5,"single")), Inf) < 1e1* eps ("single")); -%! assert (norm (vec (triu (R)-R), Inf) == 0); -%! assert (norm (vec (Q*R - single (A) - single (u)* single (v)'), Inf) -%! < norm (single (A))*1e1* eps ("single")); +%! assert (norm (vec (Q'*Q - eye (5,"single")), Inf), single (0), ... +%! 1e1 * eps ("single")); +%! assert (norm (vec (triu (R)-R), Inf), single (0)); +%! assert (norm (vec (Q*R - single (A) - single (u)* single (v)'), Inf), ... +%! single (0), norm (single (A))*1e1 * eps ("single")); %! %!test %! [Q,R] = qr (single (Ac)); %! [Q,R] = qrupdate (Q, R, single (uc), single (vc)); -%! assert (norm (vec (Q'*Q - eye (5,"single")), Inf) < 1e1* eps ("single")); -%! assert (norm (vec (triu (R)-R), Inf) == 0); -%! assert (norm (vec (Q*R - single (Ac) - single (uc)* single (vc)'), Inf) -%! < norm (single (Ac))*1e1* eps ("single")); +%! assert (norm (vec (Q'*Q - eye (5,"single")), Inf), single (0), ... +%! 1e1 * eps ("single")); +%! assert (norm (vec (triu (R)-R), Inf), single (0)); +%! assert (norm (vec (Q*R - single (Ac) - single (uc)* single (vc)'), Inf), ... +%! single (0), norm (single (Ac))*1e1 * eps ("single")); */ DEFUN (qrinsert, args, , @@ -1594,64 +1591,70 @@ %!test %! [Q,R] = qr (A); %! [Q,R] = qrinsert (Q, R, 3, u); -%! assert (norm (vec (Q'*Q - eye (5)), Inf) < 1e1*eps); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - [A(:,1:2) u A(:,3)]), Inf) < norm (A)*1e1*eps); +%! assert (norm (vec (Q'*Q - eye (5)), Inf), 0, 1e1*eps); +%! assert (norm (vec (triu (R) - R), Inf), 0); +%! assert (norm (vec (Q*R - [A(:,1:2) u A(:,3)]), Inf), 0, norm (A)*1e1*eps); %!test %! [Q,R] = qr (Ac); %! [Q,R] = qrinsert (Q, R, 3, uc); -%! assert (norm (vec (Q'*Q - eye (5)), Inf) < 1e1*eps); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - [Ac(:,1:2) uc Ac(:,3)]), Inf) < norm (Ac)*1e1*eps); +%! assert (norm (vec (Q'*Q - eye (5)), Inf), 0, 1e1*eps); +%! assert (norm (vec (triu (R) - R), Inf), 0); +%! assert (norm (vec (Q*R - [Ac(:,1:2) uc Ac(:,3)]), Inf), 0, ... +%! norm (Ac) * 1e1 * eps); %!test %! x = [0.85082 0.76426 0.42883 ]; %! %! [Q,R] = qr (A); %! [Q,R] = qrinsert (Q, R, 3, x, "row"); -%! assert (norm (vec (Q'*Q - eye (6)), Inf) < 1e1*eps); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - [A(1:2,:);x;A(3:5,:)]), Inf) < norm (A)*1e1*eps); +%! assert (norm (vec (Q'*Q - eye (6)), Inf), 0, 1e1*eps); +%! assert (norm (vec (triu (R) - R), Inf), 0); +%! assert (norm (vec (Q*R - [A(1:2,:);x;A(3:5,:)]), Inf), 0, norm (A)*1e1*eps); %!test %! x = [0.20351 + 0.05401i 0.13141 + 0.43708i 0.29808 + 0.08789i ]; %! %! [Q,R] = qr (Ac); %! [Q,R] = qrinsert (Q, R, 3, x, "row"); -%! assert (norm (vec (Q'*Q - eye (6)), Inf) < 1e1*eps); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - [Ac(1:2,:);x;Ac(3:5,:)]), Inf) < norm (Ac)*1e1*eps); +%! assert (norm (vec (Q'*Q - eye (6)), Inf), 0, 1e1*eps); +%! assert (norm (vec (triu (R) - R), Inf), 0); +%! assert (norm (vec (Q*R - [Ac(1:2,:);x;Ac(3:5,:)]), Inf), 0, ... +%! norm (Ac) * 1e1 * eps); %!test %! [Q,R] = qr (single (A)); %! [Q,R] = qrinsert (Q, R, 3, single (u)); -%! assert (norm (vec (Q'*Q - eye (5,"single")), Inf) < 1e1* eps ("single")); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - single ([A(:,1:2) u A(:,3)])), Inf) -%! < norm (single (A))*1e1* eps ("single")); +%! assert (norm (vec (Q'*Q - eye (5,"single")), Inf), single (0), ... +%! 1e1 * eps ("single")); +%! assert (norm (vec (triu (R) - R), Inf), single (0)); +%! assert (norm (vec (Q*R - single ([A(:,1:2) u A(:,3)])), Inf), ... +%! single (0), norm (single (A))*1e1 * eps ("single")); %!test %! [Q,R] = qr (single (Ac)); %! [Q,R] = qrinsert (Q, R, 3, single (uc)); -%! assert (norm (vec (Q'*Q - eye (5,"single")), Inf) < 1e1* eps ("single")); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - single ([Ac(:,1:2) uc Ac(:,3)])), Inf) -%! < norm (single (Ac))*1e1* eps ("single")); +%! assert (norm (vec (Q'*Q - eye (5,"single")), Inf), single (0), ... +%! 1e1 * eps ("single")); +%! assert (norm (vec (triu (R) - R), Inf), single (0)); +%! assert (norm (vec (Q*R - single ([Ac(:,1:2) uc Ac(:,3)])), Inf), ... +%! single (0), norm (single (Ac))*1e1 * eps ("single")); %!test %! x = single ([0.85082 0.76426 0.42883 ]); %! %! [Q,R] = qr (single (A)); %! [Q,R] = qrinsert (Q, R, 3, x, "row"); -%! assert (norm (vec (Q'*Q - eye (6,"single")), Inf) < 1e1* eps ("single")); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - single ([A(1:2,:);x;A(3:5,:)])), Inf) -%! < norm (single (A))*1e1* eps ("single")); +%! assert (norm (vec (Q'*Q - eye (6,"single")), Inf), single (0), ... +%! 1e1 * eps ("single")); +%! assert (norm (vec (triu (R) - R), Inf), single (0)); +%! assert (norm (vec (Q*R - single ([A(1:2,:);x;A(3:5,:)])), Inf), ... +%! single (0), norm (single (A))*1e1 * eps ("single")); %!test %! x = single ([0.20351 + 0.05401i 0.13141 + 0.43708i 0.29808 + 0.08789i ]); %! %! [Q,R] = qr (single (Ac)); %! [Q,R] = qrinsert (Q, R, 3, x, "row"); -%! assert (norm (vec (Q'*Q - eye (6,"single")), Inf) < 1e1* eps ("single")); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - single ([Ac(1:2,:);x;Ac(3:5,:)])), Inf) -%! < norm (single (Ac))*1e1* eps ("single")); +%! assert (norm (vec (Q'*Q - eye (6,"single")), Inf), single (0), ... +%! 1e1 * eps ("single")); +%! assert (norm (vec (triu (R) - R), Inf), single (0)); +%! assert (norm (vec (Q*R - single ([Ac(1:2,:);x;Ac(3:5,:)])), Inf), ... +%! single (0), norm (single (Ac))*1e1 * eps ("single")); */ DEFUN (qrdelete, args, , @@ -1791,9 +1794,9 @@ %! %! [Q,R] = qr (AA); %! [Q,R] = qrdelete (Q, R, 3); -%! assert (norm (vec (Q'*Q - eye (5)), Inf) < 16*eps); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - [AA(:,1:2) AA(:,4)]), Inf) < norm (AA)*1e1*eps); +%! assert (norm (vec (Q'*Q - eye (5)), Inf), 0, 16*eps); +%! assert (norm (vec (triu (R) - R), Inf), 0); +%! assert (norm (vec (Q*R - [AA(:,1:2) AA(:,4)]), Inf), 0, norm (AA)*1e1*eps); %! %!test %! AA = [0.364554 + 0.993117i 0.669818 + 0.510234i 0.426568 + 0.041337i 0.847051 + 0.233291i; @@ -1817,9 +1820,9 @@ %! %! [Q,R] = qr (AA); %! [Q,R] = qrdelete (Q, R, 3, "row"); -%! assert (norm (vec (Q'*Q - eye (4)), Inf) < 1e1*eps); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - [AA(1:2,:);AA(4:5,:)]), Inf) < norm (AA)*1e1*eps); +%! assert (norm (vec (Q'*Q - eye (4)), Inf), 0, 1e1*eps); +%! assert (norm (vec (triu (R) - R), Inf), 0); +%! assert (norm (vec (Q*R - [AA(1:2,:);AA(4:5,:)]), Inf), 0, norm (AA)*1e1*eps); %! %!test %! AA = [0.364554 + 0.993117i 0.669818 + 0.510234i 0.426568 + 0.041337i 0.847051 + 0.233291i; @@ -1830,9 +1833,9 @@ %! %! [Q,R] = qr (AA); %! [Q,R] = qrdelete (Q, R, 3, "row"); -%! assert (norm (vec (Q'*Q - eye (4)), Inf) < 1e1*eps); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - [AA(1:2,:);AA(4:5,:)]), Inf) < norm (AA)*1e1*eps); +%! assert (norm (vec (Q'*Q - eye (4)), Inf), 0, 1e1*eps); +%! assert (norm (vec (triu (R) - R), Inf), 0); +%! assert (norm (vec (Q*R - [AA(1:2,:);AA(4:5,:)]), Inf), 0, norm (AA)*1e1*eps); %!test %! AA = single ([0.091364 0.613038 0.027504 0.999083; @@ -1843,10 +1846,11 @@ %! %! [Q,R] = qr (AA); %! [Q,R] = qrdelete (Q, R, 3); -%! assert (norm (vec (Q'*Q - eye (5,"single")), Inf) < 1e1* eps ("single")); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - [AA(:,1:2) AA(:,4)]), Inf) -%! < norm (AA)*1e1* eps ("single")); +%! assert (norm (vec (Q'*Q - eye (5,"single")), Inf), single (0), ... +%! 1e1 * eps ("single")); +%! assert (norm (vec (triu (R) - R), Inf), single (0)); +%! assert (norm (vec (Q*R - [AA(:,1:2) AA(:,4)]), Inf), single (0), ... +%! norm (AA)*1e1 * eps ("single")); %! %!test %! AA = single ([0.364554 + 0.993117i 0.669818 + 0.510234i 0.426568 + 0.041337i 0.847051 + 0.233291i; @@ -1857,10 +1861,11 @@ %! %! [Q,R] = qr (AA); %! [Q,R] = qrdelete (Q, R, 3); -%! assert (norm (vec (Q'*Q - eye (5,"single")), Inf) < 1e1* eps ("single")); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - [AA(:,1:2) AA(:,4)]), Inf) -%! < norm (AA)*1e1* eps ("single")); +%! assert (norm (vec (Q'*Q - eye (5,"single")), Inf), single (0), ... +%! 1e1 * eps ("single")); +%! assert (norm (vec (triu (R) - R), Inf), single (0)); +%! assert (norm (vec (Q*R - [AA(:,1:2) AA(:,4)]), Inf), single (0), ... +%! norm (AA)*1e1 * eps ("single")); %!test %! AA = single ([0.091364 0.613038 0.027504 0.999083; @@ -1871,10 +1876,11 @@ %! %! [Q,R] = qr (AA); %! [Q,R] = qrdelete (Q, R, 3, "row"); -%! assert (norm (vec (Q'*Q - eye (4,"single")), Inf) < 1.5e1* eps ("single")); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - [AA(1:2,:);AA(4:5,:)]), Inf) -%! < norm (AA)*1e1* eps ("single")); +%! assert (norm (vec (Q'*Q - eye (4,"single")), Inf), single (0), ... +%! 1.5e1 * eps ("single")); +%! assert (norm (vec (triu (R) - R), Inf), single (0)); +%! assert (norm (vec (Q*R - [AA(1:2,:);AA(4:5,:)]), Inf), single (0), ... +%! norm (AA)*1e1 * eps ("single")); %!testif HAVE_QRUPDATE %! ## Same test as above but with more precicision %! AA = single ([0.091364 0.613038 0.027504 0.999083; @@ -1885,10 +1891,11 @@ %! %! [Q,R] = qr (AA); %! [Q,R] = qrdelete (Q, R, 3, "row"); -%! assert (norm (vec (Q'*Q - eye (4,"single")), Inf) < 1e1* eps ("single")); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - [AA(1:2,:);AA(4:5,:)]), Inf) -%! < norm (AA)*1e1* eps ("single")); +%! assert (norm (vec (Q'*Q - eye (4,"single")), Inf), single (0), ... +%! 1e1* eps ("single")); +%! assert (norm (vec (triu (R) - R), Inf), single (0)); +%! assert (norm (vec (Q*R - [AA(1:2,:);AA(4:5,:)]), Inf), single (0), ... +%! norm (AA)*1e1 * eps ("single")); %! %!test %! AA = single ([0.364554 + 0.993117i 0.669818 + 0.510234i 0.426568 + 0.041337i 0.847051 + 0.233291i; @@ -1899,10 +1906,11 @@ %! %! [Q,R] = qr (AA); %! [Q,R] = qrdelete (Q, R, 3, "row"); -%! assert (norm (vec (Q'*Q - eye (4,"single")), Inf) < 1e1* eps ("single")); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - [AA(1:2,:);AA(4:5,:)]), Inf) -%! < norm (AA)*1e1* eps ("single")); +%! assert (norm (vec (Q'*Q - eye (4,"single")), Inf), single (0), ... +%! 1e1 * eps ("single")); +%! assert (norm (vec (triu (R) - R), Inf), single (0)); +%! assert (norm (vec (Q*R - [AA(1:2,:);AA(4:5,:)]), Inf), single (0), ... +%! norm (AA)*1e1 * eps ("single")); */ DEFUN (qrshift, args, , @@ -2005,17 +2013,17 @@ %! %! [Q,R] = qr (AA); %! [Q,R] = qrshift (Q, R, i, j); -%! assert (norm (vec (Q'*Q - eye (3)), Inf) < 1e1*eps); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - AA(:,p)), Inf) < norm (AA)*1e1*eps); +%! assert (norm (vec (Q'*Q - eye (3)), Inf), 0, 1e1*eps); +%! assert (norm (vec (triu (R) - R), Inf), 0); +%! assert (norm (vec (Q*R - AA(:,p)), Inf), 0, norm (AA)*1e1*eps); %! %! j = 2; i = 4; p = [1:j-1, shift(j:i,+1), i+1:5]; %! %! [Q,R] = qr (AA); %! [Q,R] = qrshift (Q, R, i, j); -%! assert (norm (vec (Q'*Q - eye (3)), Inf) < 1e1*eps); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - AA(:,p)), Inf) < norm (AA)*1e1*eps); +%! assert (norm (vec (Q'*Q - eye (3)), Inf), 0, 1e1*eps); +%! assert (norm (vec (triu (R) - R), Inf), 0); +%! assert (norm (vec (Q*R - AA(:,p)), Inf), 0, norm (AA)*1e1*eps); %! %!test %! AA = Ac.'; @@ -2023,17 +2031,17 @@ %! %! [Q,R] = qr (AA); %! [Q,R] = qrshift (Q, R, i, j); -%! assert (norm (vec (Q'*Q - eye (3)), Inf) < 1e1*eps); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - AA(:,p)), Inf) < norm (AA)*1e1*eps); +%! assert (norm (vec (Q'*Q - eye (3)), Inf), 0, 1e1*eps); +%! assert (norm (vec (triu (R) - R), Inf), 0); +%! assert (norm (vec (Q*R - AA(:,p)), Inf), 0, norm (AA)*1e1*eps); %! %! j = 2; i = 4; p = [1:j-1, shift(j:i,+1), i+1:5]; %! %! [Q,R] = qr (AA); %! [Q,R] = qrshift (Q, R, i, j); -%! assert (norm (vec (Q'*Q - eye (3)), Inf) < 1e1*eps); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - AA(:,p)), Inf) < norm (AA)*1e1*eps); +%! assert (norm (vec (Q'*Q - eye (3)), Inf), 0, 1e1*eps); +%! assert (norm (vec (triu (R) - R), Inf), 0); +%! assert (norm (vec (Q*R - AA(:,p)), Inf), 0, norm (AA)*1e1*eps); %!test %! AA = single (A).'; @@ -2041,17 +2049,21 @@ %! %! [Q,R] = qr (AA); %! [Q,R] = qrshift (Q, R, i, j); -%! assert (norm (vec (Q'*Q - eye (3,"single")), Inf) < 1e1* eps ("single")); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - AA(:,p)), Inf) < norm (AA)*1e1* eps ("single")); +%! assert (norm (vec (Q'*Q - eye (3,"single")), Inf), single (0), ... +%! 1e1 * eps ("single")); +%! assert (norm (vec (triu (R) - R), Inf), single (0)); +%! assert (norm (vec (Q*R - AA(:,p)), Inf), single (0), ... +%! norm (AA)*1e1 * eps ("single")); %! %! j = 2; i = 4; p = [1:j-1, shift(j:i,+1), i+1:5]; %! %! [Q,R] = qr (AA); %! [Q,R] = qrshift (Q, R, i, j); -%! assert (norm (vec (Q'*Q - eye (3,"single")), Inf) < 1e1* eps ("single")); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - AA(:,p)), Inf) < norm (AA)*1e1* eps ("single")); +%! assert (norm (vec (Q'*Q - eye (3,"single")), Inf), single (0), ... +%! 1e1 * eps ("single")); +%! assert (norm (vec (triu (R) - R), Inf), single (0)); +%! assert (norm (vec (Q*R - AA(:,p)), Inf), single (0), ... +%! norm (AA)*1e1 * eps ("single")); %! %!test %! AA = single (Ac).'; @@ -2059,17 +2071,21 @@ %! %! [Q,R] = qr (AA); %! [Q,R] = qrshift (Q, R, i, j); -%! assert (norm (vec (Q'*Q - eye (3,"single")), Inf) < 1e1* eps ("single")); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - AA(:,p)), Inf) < norm (AA)*1e1* eps ("single")); +%! assert (norm (vec (Q'*Q - eye (3,"single")), Inf), single (0), ... +%! 1e1 * eps ("single")); +%! assert (norm (vec (triu (R) - R), Inf), single (0)); +%! assert (norm (vec (Q*R - AA(:,p)), Inf), single (0), ... +%! norm (AA)*1e1 * eps ("single")); %! %! j = 2; i = 4; p = [1:j-1, shift(j:i,+1), i+1:5]; %! %! [Q,R] = qr (AA); %! [Q,R] = qrshift (Q, R, i, j); -%! assert (norm (vec (Q'*Q - eye (3,"single")), Inf) < 1e1* eps ("single")); -%! assert (norm (vec (triu (R) - R), Inf) == 0); -%! assert (norm (vec (Q*R - AA(:,p)), Inf) < norm (AA)*1e1* eps ("single")); +%! assert (norm (vec (Q'*Q - eye (3,"single")), Inf), single (0), ... +%! 1e1 * eps ("single")); +%! assert (norm (vec (triu (R) - R), Inf), single (0)); +%! assert (norm (vec (Q*R - AA(:,p)), Inf), single (0), ... +%! norm (AA)*1e1 * eps ("single")); */ OCTAVE_END_NAMESPACE(octave)