Paul Bignier [Thu, 24 Jul 2014 13:32:23 +0000 (15:32 +0200)]
Change-Id: I1f419cd66fd408b7e6e69cd4ff43c75c143df842

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.
@@ -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>