* Bugs 16090 16163 fixed: prbs_a(n,nc) infringed nc & slow. Page overhauled 64/21064/9
Samuel GOUGEON [Sat, 3 Aug 2019 23:31:52 +0000 (01:31 +0200)]
  http://bugzilla.scilab.org/16163
  http://bugzilla.scilab.org/16090

  New page (PDF): http://bugzilla.scilab.org/attachment.cgi?id=4991

  All sce sci and tst files including prbs_a have been checked.
  Another test and 2 demos are not impacted.

Change-Id: I42576ae0932f09b5d4dc3acb8bfcc671a7a061a4

12 files changed:
scilab/CHANGES.md
scilab/modules/cacsd/help/en_US/prbs_a.xml
scilab/modules/cacsd/help/fr_FR/prbs_a.xml [deleted file]
scilab/modules/cacsd/help/ja_JP/prbs_a.xml [deleted file]
scilab/modules/cacsd/macros/prbs_a.sci
scilab/modules/cacsd/tests/nonreg_tests/bug_13581.tst
scilab/modules/cacsd/tests/nonreg_tests/bug_7794.dia.ref [deleted file]
scilab/modules/cacsd/tests/nonreg_tests/bug_7794.tst
scilab/modules/cacsd/tests/unit_tests/prbs_a.tst [new file with mode: 0644]
scilab/modules/helptools/etc/images_md5.txt
scilab/modules/helptools/images/prbs_a_1.png
scilab/modules/helptools/images/prbs_a_2.png [new file with mode: 0644]

index e76d649..5d4f0a1 100644 (file)
@@ -367,6 +367,7 @@ Bug Fixes
 * [#16085](https://bugzilla.scilab.org/16085): insertion in an empty struct was broken.
 * [#16087](https://bugzilla.scilab.org/16087): Insertion of struct in a non-empty struct crashed Scilab.
 * [#16089](https://bugzilla.scilab.org/16089): x=1:1e10 freezed Scilab.
+* [#16090](https://bugzilla.scilab.org/16090): The documentation of `prbs_a()` was poor and unclear.
 * [#16095](https://bugzilla.scilab.org/16095): For a matrix of graphic handles of same types, it was no longer possible to clear a property by assigning [].
 * [#16097](https://bugzilla.scilab.org/16097): `coth` was more than twice slower than `1./tanh()`. `tanh` and `coth` did not accept sparse-encoded input.
 * [#16102](https://bugzilla.scilab.org/16102): `lstcat` could not concatenate input lists with mixed objects of types>10 like 1:$, sin, sind, struct, cells, tlists or mlists. In addition, it was slow for very long inputs lists.
@@ -388,6 +389,7 @@ Bug Fixes
 * [#16155](https://bugzilla.scilab.org/16155): `flipdim(hypermat,dim,sb)` yielded wrong results for dim<3 and sb>1, and yielded an error for dim>2.
 * [#16158](https://bugzilla.scilab.org/16158): When a multicolumn array of rationals was displayed wide column per column, columns #2:$ were replaced with its column #2.
 * [#16160](https://bugzilla.scilab.org/16160): `ppol` changed values of third input variable.
+* [#16163](https://bugzilla.scilab.org/16163): `prbs_a()` did not comply with the requested number of switches. The biased number of actual switches was unpredictable, preventing to manage its statistical distribution. The probability of the initial state was biased. For instance, prbs_a(n,0) always returned ones(1,n).
 * [#16164](https://bugzilla.scilab.org/16164): Help pages in elementary_functions/signal_processing were mislocated.
 * [#16166](https://bugzilla.scilab.org/16166): `noisegen` is crooky, even threatening, and very poor. It is tagged as obsolete and will be removed from Scilab 6.1.x.
 * [#16168](https://bugzilla.scilab.org/16168): On some Linux installations, `test_run` always failed.
index 2788ffa..4adb404 100644 (file)
@@ -3,6 +3,7 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) INRIA -
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
+ * Copyright (C) 2019 - Samuel GOUGEON
  *
  * This file is hereby licensed under the terms of the GNU GPL v2.0,
  * pursuant to article 5.3.4 of the CeCILL v.2.1.
           xml:lang="en" xml:id="prbs_a">
     <refnamediv>
         <refname>prbs_a</refname>
-        <refpurpose>pseudo random binary sequences generation</refpurpose>
+        <refpurpose>Generates a pseudo random binary sequence</refpurpose>
     </refnamediv>
     <refsynopsisdiv>
         <title>Syntax</title>
         <synopsis>
             u = prbs_a(n, nc)
             u = prbs_a(n, nc, ids)
+            u = prbs_a(n, nc, positions)
         </synopsis>
     </refsynopsisdiv>
     <refsection>
+        <title>Arguments</title>
+        <variablelist>
+            <varlistentry>
+                <term>n</term>
+                <listitem>
+                    positive integer: length of the sequence.
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>nc</term>
+                <listitem>
+                    integer in [0, n-1]: number of commutations required.
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>positions</term>
+                <listitem>
+                    vector of integers in [0, n-1]: indices of required commutations in u.
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>u</term>
+                <listitem>
+                    Row vector of n values in {-1, 1}.
+                </listitem>
+            </varlistentry>
+        </variablelist>
+    </refsection>
+    <refsection>
         <title>Description</title>
         <para>
-            generation of pseudo random binary sequences
-            <literal>u=[u0,u1,...,u_(n-1)]</literal>
-            u takes values in {-1,1} and changes at most nc times its sign.
-            ids can be used to fix the date at which u must change its sign
-            ids is then an integer vector with values in <literal>[1:n]</literal>.
+            <literal>prbs_a()</literal> will be usefull to simulate the behavior of a 2-state
+            random system.
+        </para>
+        <para>
+            <literal>u = prbs_a(n, nc)</literal> builds and returns a row vector
+            <varname>u</varname> made of <varname>n</varname> values -1 or +1, in which
+            <varname>nc</varname> commutations from -1 to 1 or from 1 to -1 occur at random
+            positions in the vector.
+        </para>
+        <para>
+            The initial state <literal>u(1)</literal> has an equiprobable value -1 or +1.
+        </para>
+        <para>
+            The distribution of commutations positions along <varname>u</varname> is statistically
+            uniform.
+        </para>
+        <note>
+            The positions of commutations can be retrieved with
+            <literal>find(u(2:$) &lt;> u(1:$-1))</literal>.
+        </note>
+        <para>
+            <literal>prbs_a(n,,positions)</literal> does the same, but sets commutations at the
+            given <varname>positions</varname>, instead of at random ones. <varname>nc</varname>
+            is then ignored. Setting a commutation at a position = i insures that
+            <literal>u(i+1)</literal> will be <literal>-u(i)</literal>.
+        </para>
+        <para>
+            The initial state can be imposed with a trivial post-processing of the result.
+            For instance, imposing <literal>u(1)=-1</literal> will be done with
+            <literal>if u(1)==1, u = -u; end</literal>.
         </para>
     </refsection>
     <refsection>
         <title>Examples</title>
         <programlisting role="example"><![CDATA[
-u=prbs_a(50,10);
-plot2d2("onn",(1:50)',u',1,"151",' ',[0,-1.5,50,1.5]);
+clf
+u = prbs_a(20, 7)
+subplot(1,2,1)
+plot2d2(1:20, u, rect=[0,-1.2,20,1.2]);
+find(u(2:$) <> u(1:$-1))
+
+u = prbs_a(100, 20);
+subplot(1,2,2)
+plot2d2(1:100, u, rect=[0,-1.2,100,1.2]);
+ ]]></programlisting>
+    <screen><![CDATA[
+--> u = prbs_a(20, 7)
+ u  =
+   1. -1. -1. -1. -1.  1. -1.  1.  1.  1. -1. -1. -1. -1.  1.  1.  1.  1. -1. -1.
+
+--> find(u(2:$) <> u(1:$-1))
+ ans  =
+   1.   5.   6.   7.   10.   14.   18.
+]]></screen>
+        <scilab:image>
+            u = prbs_a(20, 7)
+            subplot(1,2,1)
+            plot2d2(1:20, u, rect=[0,-1.2,20,1.2]);
+
+            u = prbs_a(100, 20);
+            subplot(1,2,2)
+            plot2d2(1:100, u, rect=[0,-1.2,100,1.2]);
+
+            gcf().axes_size = [700 300];
+        </scilab:image>
+        <para/>
+        <para>
+            Example at given positions:
+        </para>
+        <programlisting role="example"><![CDATA[
+clf
+u = prbs_a(100, , [13 20 25 40 65 67 80 90 91]);
+plot2d2(1:100, u, rect=[0,-1.2,100,1.2]);
+length(u)
+find(u(2:$)<>u(1:$-1))
  ]]></programlisting>
+    <screen><![CDATA[
+--> length(u)
+ ans =
+  100
+
+--> find(u(2:$)<>u(1:$-1))
+ ans  =
+   13.   20.   25.   40.   65.   67.   80.   90.   91.
+]]></screen>
         <scilab:image>
-            u=prbs_a(50,10);
-            plot2d2("onn",(1:50)',u',1,"151",' ',[0,-1.5,50,1.5]);
+            u = prbs_a(100, , [13 20 25 40 65 67 80 90 91]);
+            plot2d2(1:100, u, rect=[0,-1.2,100,1.2]);
+
+            gcf().axes_size = [400 300];
         </scilab:image>
     </refsection>
+    <refsection role="see also">
+        <title>See Also</title>
+        <simplelist type="inline">
+            <member>
+                <link linkend="noisegen">noisegen</link>
+            </member>
+            <member>
+                <link linkend="grand">grand</link>
+            </member>
+            <member>
+                <link linkend="sprand">sprand</link>
+            </member>
+            <member>
+                <link linkend="sysrand">sysrand</link>
+            </member>
+            <member>
+                <link linkend="randpencil">randpencil</link>
+            </member>
+        </simplelist>
+    </refsection>
+    <refsection role="history">
+        <title>History</title>
+        <revhistory>
+            <revision>
+                <revnumber>6.1.0</revnumber>
+                <revdescription>
+                    <listitem>
+                        prbs_a() now strictly complies with nc.
+                    </listitem>
+                    <listitem>
+                        The probability of the initial state u(1) is now unbiased: +1 and -1 are
+                        strictly equiprobable.
+                    </listitem>
+                </revdescription>
+            </revision>
+        </revhistory>
+    </refsection>
 </refentry>
diff --git a/scilab/modules/cacsd/help/fr_FR/prbs_a.xml b/scilab/modules/cacsd/help/fr_FR/prbs_a.xml
deleted file mode 100644 (file)
index b7f8172..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) INRIA -
- *
- * Copyright (C) 2012 - 2016 - Scilab Enterprises
- *
- * This file is hereby licensed under the terms of the GNU GPL v2.0,
- * pursuant to article 5.3.4 of the CeCILL v.2.1.
- * This file was originally licensed under the terms of the CeCILL v2.1,
- * and continues to be available under such terms.
- * For more information, see the COPYING file which you should have received
- * along with this program.
- *
- -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:lang="fr" xml:id="prbs_a">
-    <refnamediv>
-        <refname>prbs_a</refname>
-        <refpurpose>pseudo random binary sequences generation</refpurpose>
-    </refnamediv>
-    <refsynopsisdiv>
-        <title>Syntax</title>
-        <synopsis>[u]=prbs_a(n,nc,[ids])</synopsis>
-    </refsynopsisdiv>
-    <refsection>
-        <title>Description</title>
-        <para>
-            generation of pseudo random binary sequences
-            <literal>u=[u0,u1,...,u_(n-1)]</literal>
-            u takes values in {-1,1} and changes at most nc times its sign.
-            ids can be used to fix the date at which u must change its sign
-            ids is then an integer vector with values in <literal>[1:n]</literal>.
-        </para>
-    </refsection>
-    <refsection>
-        <title>Examples</title>
-        <programlisting role="example"><![CDATA[
-u=prbs_a(50,10);
-plot2d2("onn",(1:50)',u',1,"151",' ',[0,-1.5,50,1.5]);
- ]]></programlisting>
-        <scilab:image>
-            u=prbs_a(50,10);
-            plot2d2("onn",(1:50)',u',1,"151",' ',[0,-1.5,50,1.5]);
-        </scilab:image>
-    </refsection>
-</refentry>
diff --git a/scilab/modules/cacsd/help/ja_JP/prbs_a.xml b/scilab/modules/cacsd/help/ja_JP/prbs_a.xml
deleted file mode 100644 (file)
index dca1362..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) INRIA -
- *
- * Copyright (C) 2012 - 2016 - Scilab Enterprises
- *
- * This file is hereby licensed under the terms of the GNU GPL v2.0,
- * pursuant to article 5.3.4 of the CeCILL v.2.1.
- * This file was originally licensed under the terms of the CeCILL v2.1,
- * and continues to be available under such terms.
- * For more information, see the COPYING file which you should have received
- * along with this program.
- *
- -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:lang="ja" xml:id="prbs_a">
-    <refnamediv>
-        <refname>prbs_a</refname>
-        <refpurpose>擬似バイナリ乱数列の生成</refpurpose>
-    </refnamediv>
-    <refsynopsisdiv>
-        <title>呼び出し手順</title>
-        <synopsis>[u]=prbs_a(n,nc,[ids])</synopsis>
-    </refsynopsisdiv>
-    <refsection>
-        <title>説明</title>
-        <para>
-            擬似バイナリ乱数列
-            <literal>u=[u0,u1,...,u_(n-1)]</literal>を生成します.
-            u は {-1,1} の範囲の値となり,
-            最大で nc 回その符号を変えます.
-            ids は u が符号を変える日付を修正するために使用されます.
-            ids は<literal>[1:n]</literal>の範囲の値をとる整数ベクトルです.
-        </para>
-    </refsection>
-    <refsection>
-        <title>例</title>
-        <programlisting role="example"><![CDATA[
-u=prbs_a(50,10);
-plot2d2("onn",(1:50)',u',1,"151",' ',[0,-1.5,50,1.5]);
- ]]></programlisting>
-    </refsection>
-</refentry>
index 8a02a1b..00d6a48 100644 (file)
@@ -1,7 +1,5 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) INRIA -
-//
-// Copyright (C) 2012 - 2016 - Scilab Enterprises
+// Copyright (C) 2019 - Samuel GOUGEON
 //
 // This file is hereby licensed under the terms of the GNU GPL v2.0,
 // pursuant to article 5.3.4 of the CeCILL v.2.1.
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function [u]=prbs_a(n,nc,ids)
-    //generation of pseudo random binary sequences
-    //u=[u0,u1,...,u_(n-1)];
-    //u takes values in {-1,1} and changes at most nc times its sign.
-    //ids can be used to fix the date at which u must change its sign
-    //ids is then an integer vector with values in [1:n].
-    //!
-    [lhs,rhs]=argn(0)
-    if rhs <=2,
-        rand("uniform");
-        yy= int(min(max(n*rand(1,nc),1*ones(1,nc)),n*ones(1,nc)));
-        ids=gsort(yy);ids=[n,ids,1];
-    else
-        [n1,n2]=size(ids);
-        ids=[n,min(n*ones(ids),max(gsort(ids),1*ones(ids))),1];
+function u = prbs_a(n, nc, ic)
+    // n  : number of points
+    // nc : number of state changes
+    // ic : indices of state changes
+
+    fname = "prbs_a"
+
+    // Checking n
+    // ----------
+    if type(n)<>1 | n==[] | ~isreal(n,0) | or(n<>round(n)) then
+        msg = _("%s: Argument #%d: Decimal integer expected.\n")
+        error(msprintf(msg, fname, 1))
     end
-    u= zeros(1,n);
-    [n1,n2]=size(ids);
-    val=1;
-    for i=1:n2-1,
-        if ids(i)<>ids(i+1);
-            u(ids(i+1):ids(i))=val*ones(ids(i+1):ids(i));val=-1*val;
+    n = n(1)
+    if n < 0 then
+        msg = _("%s: Argument #%d: Must be >= %d.\n")
+        error(msprintf(msg, fname, 1, 0))
+    end
+    if n==0 then
+        u = []
+        return
+    end
+    // Default ic and nc
+    // -----------------
+    if ~isdef("ic","l") | ic==[] then
+        u = grand(1,n-1,"unf",0,1);
+        [?, ic] = gsort(u);
+        ic = gsort(ic(1:nc));
+    else
+        if type(ic)<>1 | ic==[] | ~isreal(ic,0) then
+            msg = _("%s: Argument #%d: Decimal integer expected.\n")
+            error(msprintf(msg, fname, 1))
         end
+        if min(ic) < 1 | max(ic) >= n then
+            msg = _("%s: Argument #%d: Must be in the interval %s.\n")
+            error(msprintf(msg, fname, 3, msprintf("[1, %d[", n)))
+        end
+        nc = length(ic)
+        ic = gsort(ic,"g","i");
+    end
+    // Checking nc
+    // -----------
+    if nc >= n then
+        msg = _("%s: The number of switches can''t be ≥ %d = number of points.\n")
+        error(msprintf(msg, fname, n))
+    end
+    if nc<0 then
+        msg = _("%s: Argument #%d: Must be >= %d.\n")
+        error(msprintf(msg, fname, 2, 0))
+    end
+
+    // PROCESSING
+    // ----------
+    u = zeros(1,n-1)
+    u(ic(1:2:$)) = 1;
+    u(ic(2:2:$)) = -1;
+    u = cumsum(u);
+    if min(u)==0 then
+        u = [1 1-2*u];
+    else
+        u = [1 1+2*u];
     end
+    u = u*sign(grand(1,1,"unf",-1,1));    // randomize the initial state
 endfunction
index b74c67d..cbf330e 100644 (file)
@@ -34,5 +34,5 @@ N=3;
 SYS1 = findABCD(S,N,1,R) ;
 SYS1.dt=0.1;
 x0 = inistate(SYS1,Y',U');
-expected = [0.180418869191; 0.180032513919; -0.069939890233];
+expected = [1.358882940201 ; -0.171852413543 ; 1.076698107654];
 assert_checkalmostequal(x0, expected);
diff --git a/scilab/modules/cacsd/tests/nonreg_tests/bug_7794.dia.ref b/scilab/modules/cacsd/tests/nonreg_tests/bug_7794.dia.ref
deleted file mode 100644 (file)
index e03e324..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-// =============================================================================
-// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2016 - Scilab Enterprises - Adeline CARNIS
-//
-//  This file is distributed under the same license as the Scilab package.
-// =============================================================================
-//<-- CLI SHELL MODE -->
-// <-- Non-regression test for bug 7794 -->
-//
-// <-- Bugzilla URL -->
-// http://bugzilla.scilab.org/show_bug.cgi?id=7794
-//
-// <-- Short Description -->
-//  Example of findABCD help page failed.
-A = [ 0.5, 0.1,-0.1, 0.2;
-      0.1, 0,  -0.1,-0.1;      
-     -0.4,-0.6,-0.7,-0.1;  
-      0.8, 0,  -0.6,-0.6];
-B = [0.8;0.1;1;-1];
-C = [1 2 -1 0];
-SYS=syslin(0.1,A,B,C);
-nsmp=100;
-U=prbs_a(nsmp,nsmp/5);
-Y=(flts(U,SYS)+0.3*rand(1,nsmp,'normal'));
-// Compute R
-S=15;
-[R,N1,SVAL] = findR(S,Y',U');
-N=3;
-SYS1 = findABCD(S,N,1,R) ;SYS1.dt=0.1;
-SYS1.X0 = inistate(SYS1,Y',U');
-expectedX0 = [0.180418869; 0.18003251391; -0.06993989023];
-assert_checkalmostequal(SYS1.X0, expectedX0, 1.e-8);
index a211046..edeca84 100644 (file)
@@ -5,7 +5,8 @@
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
 
-//<-- CLI SHELL MODE -->
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
 // <-- Non-regression test for bug 7794 -->
 //
 // <-- Bugzilla URL -->
@@ -15,9 +16,9 @@
 //  Example of findABCD help page failed.
 
 A = [ 0.5, 0.1,-0.1, 0.2;
-      0.1, 0,  -0.1,-0.1;      
-     -0.4,-0.6,-0.7,-0.1;  
-      0.8, 0,  -0.6,-0.6];      
+      0.1, 0,  -0.1,-0.1;
+     -0.4,-0.6,-0.7,-0.1;
+      0.8, 0,  -0.6,-0.6];
 B = [0.8;0.1;1;-1];
 C = [1 2 -1 0];
 SYS=syslin(0.1,A,B,C);
@@ -32,7 +33,5 @@ N=3;
 SYS1 = findABCD(S,N,1,R) ;SYS1.dt=0.1;
 
 SYS1.X0 = inistate(SYS1,Y',U');
-expectedX0 = [0.180418869; 0.18003251391; -0.06993989023];
+expectedX0 = [1.3588829402 ; -0.17185241354 ; 1.07669810765];
 assert_checkalmostequal(SYS1.X0, expectedX0, 1.e-8);
-
-
diff --git a/scilab/modules/cacsd/tests/unit_tests/prbs_a.tst b/scilab/modules/cacsd/tests/unit_tests/prbs_a.tst
new file mode 100644 (file)
index 0000000..534704a
--- /dev/null
@@ -0,0 +1,50 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2019 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+
+// --------------------------
+// Unitary tests for prbs_a()
+// --------------------------
+
+// Checking the output size
+assert_checkequal(size(prbs_a(0, 7)), [0 0]);
+assert_checkequal(size(prbs_a(100, 0)), [1 100]);
+assert_checkequal(size(prbs_a(100,20)), [1 100]);
+assert_checkequal(size(prbs_a(100,99)), [1 100]);
+
+// Checking the number of switches
+[?,k] = gsort(rand(1,98));
+for i = [k(1:19) 99] // 20 random unique numbers in [1, 99], 99 mandatory
+    tmp = prbs_a(100, i);
+    assert_checkequal(sum(tmp(2:$)<>tmp(1:$-1)), i);
+end
+// Checking state values
+assert_checkequal(prbs_a(0, 5), []);
+for i = [k(1:19) 99]
+    tmp = unique(prbs_a(100, i));
+    assert_checkequal(tmp, [-1 1]);
+end
+
+// Checking the equiprobability of the initial state
+tmp = []
+for i = 1:100
+    tmp = [tmp prbs_a(10,4)(1)];
+end
+assert_checktrue(abs(sum(tmp==1)/100-0.5)<0.15);
+
+
+// Switches at given positions
+// ---------------------------
+for nc = [-7 0 5 15 30]    // In this case, nc is ignored
+    tmp = prbs_a(20, nc, [6 2 13]);
+    assert_checkequal(size(tmp), [1 20]);    // Checking size
+    assert_checkequal(unique(tmp), [-1 1]);  // Checking state values
+    tmp = tmp(2:$)<>tmp(1:$-1)
+    assert_checkequal(sum(tmp), 3);          // Checking number of switches
+    assert_checkequal(find(tmp), [2 6 13]);  // Checking the position of switches
+end
index 257ebbf..fbc93dc 100644 (file)
@@ -971,7 +971,8 @@ polarplot_4.png=a4df61be3e5a6aa65eb22ab44e9dc5d3
 polyline_properties_1.png=5458d2f7efc2756fbb364a80e066588f
 polyline_properties_2.png=3349e39fe563e09fc488e9ed03c6e4ae
 polyline_properties_3.png=0c758a8eb88f3a7383151da8a94cf808
-prbs_a_1.png=346ac375b06faf45f7fe67472b413509
+prbs_a_1.png=4e8551544fa2d2085e74ddfe799ec579
+prbs_a_2.png=ef716bac583e1660fe1f49a4352b7b4b
 rainbowcolormap_1.png=68be57c62080633d0e67a91389f5ecd8
 reglin_1.png=9b22e4b782eb58eb90e5dccd50dfb466
 reglin_2.png=109258bc122deeadf53e2b832d510201
index b72e851..e2de8f0 100644 (file)
Binary files a/scilab/modules/helptools/images/prbs_a_1.png and b/scilab/modules/helptools/images/prbs_a_1.png differ
diff --git a/scilab/modules/helptools/images/prbs_a_2.png b/scilab/modules/helptools/images/prbs_a_2.png
new file mode 100644 (file)
index 0000000..cbbc830
Binary files /dev/null and b/scilab/modules/helptools/images/prbs_a_2.png differ