* Bug #13531 fixed - Fixed sylv help page to include the real Sylester equation. 48/14948/5
Paul Bignier [Thu, 24 Jul 2014 13:32:23 +0000 (15:32 +0200)]
Change-Id: I1f419cd66fd408b7e6e69cd4ff43c75c143df842

scilab/CHANGES_5.5.X
scilab/modules/cacsd/macros/sylv.sci
scilab/modules/cacsd/tests/unit_tests/sylv.dia.ref
scilab/modules/cacsd/tests/unit_tests/sylv.tst
scilab/modules/linear_algebra/help/en_US/pencil/sylv.xml

index dbac1cf..0594eb5 100644 (file)
@@ -56,6 +56,8 @@ Scilab Bug Fixes
 
 * Bug #13372 fixed - xsetm should have been removed in Scilab 5.5.0.
 
+* Bug #13531 fixed - sylv help page fixed to include the real Sylvester equation.
+
 * Bug #13549 fixed - Slider uicontrols triggered three callbacks instead of one.
 
 * Bug #13586 fixed - Scilab compilation failed with recent versions of JoGL package.
index 4eabad1..c1a51bc 100644 (file)
@@ -8,7 +8,7 @@
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 
 function X = sylv(A,B,C,flag)
-    //  solve  A*X+X*B=C if flag=='c' or  A*X*B-X=C if flag=='d'
+    //  solve  A*X+X*B=C if flag=='c' or  A*X*B+X=C if flag=='d'
     if argn(2)<>4 then
         error(msprintf(gettext("%s: Wrong number of input argument(s): %d expected.\n"),"sylv",4))
     end
index 4efb106..dc28ac3 100644 (file)
@@ -8,9 +8,12 @@
 // Run with test_run('cacsd', 'sylv', ['no_check_error_output']);
 A = rand(4, 4); C = rand(4, 3); B = rand(3, 3);
 // Solve continuous-time Sylvester equation: A*X+X*B = C
-X = sylv(A, B, C, 'c');
+X = sylv(A, B, C, "c");
 expected_norm = 1.D-16;
 if norm(A*X+X*B-C)-expected_norm > 1.D-15 then bugmes();quit;end
-// Solve discrete-time Sylvester equation: A*X*B+X = C
-X = sylv(A, B, C, 'd');
+// Solve modified discrete-time Sylvester equation: A*X*B+X = C
+X = sylv(A, B, C, "d");
 if norm(A*X*B+X-C)-expected_norm > 1.D-15 then bugmes();quit;end
+// Solve real discrete-time Sylvester equation: A*X*B+X = C
+X = -sylv(-A, B, C, "d");
+if norm(A*X*B-X-C)-expected_norm > 1.D-15 then bugmes();quit;end
index 6c7eecf..c89fcd0 100644 (file)
 A = rand(4, 4); C = rand(4, 3); B = rand(3, 3);
 
 // Solve continuous-time Sylvester equation: A*X+X*B = C
-X = sylv(A, B, C, 'c');
+X = sylv(A, B, C, "c");
 
 expected_norm = 1.D-16;
 
 if norm(A*X+X*B-C)-expected_norm > 1.D-15 then pause,end
 
-// Solve discrete-time Sylvester equation: A*X*B+X = C
-X = sylv(A, B, C, 'd');
+// Solve modified discrete-time Sylvester equation: A*X*B+X = C
+X = sylv(A, B, C, "d");
 
 if norm(A*X*B+X-C)-expected_norm > 1.D-15 then pause,end
+
+// Solve real discrete-time Sylvester equation: A*X*B+X = C
+X = -sylv(-A, B, C, "d");
+
+if norm(A*X*B-X-C)-expected_norm > 1.D-15 then pause,end
index 229a116..4b6d859 100644 (file)
@@ -2,11 +2,11 @@
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2008 - INRIA
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
  *
  -->
@@ -49,19 +49,33 @@ A*X+X*B = C
  ]]></programlisting>
         <para>
             <literal>X=sylv(A, B, C, 'd')</literal> computes <literal>X</literal>, solution
-            of the "discrete time" Sylvester equation
+            of the modified "discrete time" Sylvester equation
         </para>
         <programlisting role=""><![CDATA[
 A*X*B+X = C
  ]]></programlisting>
+        <para>
+            <literal>X=-sylv(-A, B, C, 'd')</literal> computes <literal>X</literal>, solution
+            of the real "discrete time" Sylvester equation
+        </para>
+        <programlisting role=""><![CDATA[
+A*X*B-X = C
+ ]]></programlisting>
     </refsection>
     <refsection>
         <title>Examples</title>
         <programlisting role="example"><![CDATA[
+// Continuous time Sylvester equation:
 A = rand(4, 4); C = rand(4, 3); B = rand(3, 3);
 X = sylv(A, B, C, 'c');
 norm(A*X+X*B-C)
+
+// Modified Discrete time Sylvester equation:
 X = sylv(A, B, C, 'd');
+norm(A*X*B+X-C)
+
+// Real Discrete time Sylvester equation:
+X = -sylv(-A, B, C, 'd');
 norm(A*X*B-X-C)
  ]]></programlisting>
     </refsection>