Linear_algebra: overloading norm() 29/13729/2
Paul Bignier [Thu, 13 Feb 2014 14:18:11 +0000 (15:18 +0100)]
For sparse matrices and rationals.

The tolerance was raised in %sp_norm.sci to deal with some probably rare cases.

Change-Id: I8fbda04bb1cac3f86f4c6b6c5beffe1be7211cd1

scilab/modules/linear_algebra/sci_gateway/c/sci_norm.c
scilab/modules/linear_algebra/tests/nonreg_tests/bug_5017.dia.ref
scilab/modules/linear_algebra/tests/nonreg_tests/bug_5017.tst
scilab/modules/overloading/macros/%sp_norm.sci

index c1d57c7..c8c37ae 100644 (file)
@@ -57,7 +57,7 @@ int C2F(intnorm)(char *fname, unsigned long fname_len)
     sciErr = getVarType(pvApiCtx, pAAddr, &iType); // Retrieving A type.
     if (iType != sci_matrix)
     {
-        Scierror(52, _("%s: Wrong type for input argument #%d: Real or complex matrix expected.\n"), fname, 1);
+        OverLoad(1);
         return 0;
     }
 
index c4da74b..f391479 100644 (file)
 //
 // <-- Short Description -->
 // norm() now calls Lapack.
+// Checking sparse compatibility
+rand("seed", 0);
+A = rand(10, 10);
+n = norm(sparse(A));
+assert_checkalmostequal(n, 5.0884897363846);
 //---------------------------------------------------
-// In this test, we make sure that the new implementation
+// Now, we make sure that the new implementation
 // of norm() yiels the same results as the old one,
 // with respect to the machine precision.
 // Square root of 5, with a 10^-307 padding.
index 5bdea1f..7e52298 100644 (file)
 // <-- Short Description -->
 // norm() now calls Lapack.
 
+// Checking sparse compatibility
+rand("seed", 0);
+A = rand(10, 10);
+n = norm(sparse(A));
+assert_checkalmostequal(n, 5.0884897363846);
+
 //---------------------------------------------------
-// In this test, we make sure that the new implementation
+// Now, we make sure that the new implementation
 // of norm() yiels the same results as the old one,
 // with respect to the machine precision.
 
index 9ac1bb5..2b87314 100644 (file)
@@ -32,7 +32,7 @@ function res=%sp_norm(S,flag)
             S1 = S;
         end
 
-        tol=%eps;
+        tol=2*%eps;
         x = sum(abs(S1),1)';
         res = norm(x);
         if res==0 then return,end