Xcos help : small Runge-Kutta, CVode & IDA doc corrections 03/9703/10
Paul BIGNIER [Thu, 15 Nov 2012 08:26:20 +0000 (09:26 +0100)]
Improved doc tests and pages

Change-Id: If200b08746a7dfba0a58055b946f297dc881f84f

scilab/modules/xcos/examples/solvers/integ.sce
scilab/modules/xcos/examples/solvers/integRK.sce
scilab/modules/xcos/help/en_US/solvers/CVode.xml
scilab/modules/xcos/help/en_US/solvers/IDA.xml
scilab/modules/xcos/help/en_US/solvers/Runge-Kutta.xml

index a8a82ad..e20d1ea 100644 (file)
@@ -7,44 +7,25 @@
 // are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
 
-// Run with exec("SCI/modules/xcos/help/en_US/solvers/integ.sce");
+// Run with exec("SCI/modules/xcos/examples/solvers/integ.sce");
 
 // Import the diagram and augment the ending time
+loadScicos();
+loadXcosLibs();
 importXcosDiagram("SCI/modules/xcos/examples/solvers/ODE_Example.xcos");
-scs_m.props.tf = 3500;
+scs_m.props.tf = 30000;
 
-// BDF / Newton
-// Select the solver
-scs_m.props.tol(6) = 0;
-// Start the timer, launch the simulation and display time
-timer();
-xcos_simulate(scs_m, 4);
-t = timer();
-disp(t, "Time for BDF / Newton :");
+solverName=["BDF/Newton", "BDF/Functional", "Adams/Newton", "Adams/Functionnal"];
 
-// BDF / Functional
-// Select the solver
-scs_m.props.tol(6) = 1;
-// Start the timer, launch the simulation and display time
-timer();
-xcos_simulate(scs_m, 4);
-t = timer();
-disp(t, "Time for BDF / Functional :");
+for solver=0:3
 
-// Adams / Functional
-// Select the solver
-scs_m.props.tol(6) = 3;
-// Start the timer, launch the simulation and display time
-timer();
-xcos_simulate(scs_m, 4);
-t = timer();
-disp(t, "Time for Adams / Functional :");
+ // Select the solver
+ scs_m.props.tol(6) = solver;
 
-// Adams / Newton
-// Select the solver
-scs_m.props.tol(6) = 2;
-// Start the timer, launch the simulation and display time
-timer();
-xcos_simulate(scs_m, 4);
-t = timer();
-disp(t, "Time for Adams / Newton :");
+ // Start the timer, launch the simulation and display time
+ tic();
+ try scicos_simulate(scs_m, 'nw'); catch disp(lasterror()); end;
+ t = toc();
+ disp(t, "Time for " + solverName(solver+1) + " :");
+
+end
index 608eda5..44fbb4e 100644 (file)
@@ -7,54 +7,28 @@
 // are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
 
-// Run with exec("SCI/modules/xcos/help/en_US/solvers/integRK.sce");
+// Run with exec("SCI/modules/xcos/examples/solvers/integRK.sce");
 
 // Import the diagram and augment the ending time
+loadScicos();
+loadXcosLibs();
 importXcosDiagram("SCI/modules/xcos/examples/solvers/ODE_Example.xcos");
-scs_m.props.tf = 3500;
-
-// BDF / Newton
-// Select the solver
-scs_m.props.tol(6) = 0;
-// Start the timer, launch the simulation and display time
-timer();
-xcos_simulate(scs_m, 4);
-t = timer();
-disp(t, "Time for BDF / Newton :");
-
-// BDF / Functional
-// Select the solver
-scs_m.props.tol(6) = 1;
-// Start the timer, launch the simulation and display time
-timer();
-xcos_simulate(scs_m, 4);
-t = timer();
-disp(t, "Time for BDF / Functional :");
-
-// Adams / Functional
-// Select the solver
-scs_m.props.tol(6) = 3;
-// Start the timer, launch the simulation and display time
-timer();
-xcos_simulate(scs_m, 4);
-t = timer();
-disp(t, "Time for Adams / Functional :");
-
-// Adams / Newton
-// Select the solver
-scs_m.props.tol(6) = 2;
-// Start the timer, launch the simulation and display time
-timer();
-xcos_simulate(scs_m, 4);
-t = timer();
-disp(t, "Time for Adams / Newton :");
-
-// Runge-Kutta
-// Select the solver and set abstol to 10^-2
-scs_m.props.tol(6) = 4;
-scs_m.props.tol(1) = 0.01;
-// Start the timer, launch the simulation and display time
-timer();
-xcos_simulate(scs_m, 4);
-t = timer();
-disp(t, "Time for Runge-Kutta :");
+scs_m.props.tf = 30000;
+
+solverName=["BDF/Newton", "BDF/Functional", "Adams/Newton", "Adams/Functionnal", "Runge-Kutta"];
+
+for solver=0:4
+
+ // Select the solver
+ scs_m.props.tol(6) = solver;
+
+ // Set max step size if Runge-Kutta
+ if (solver == 4) scs_m.props.tol(7) = 0.01;
+
+ // Start the timer, launch the simulation and display time
+ tic();
+ try scicos_simulate(scs_m, 'nw'); catch disp(lasterror()); end;
+ t = toc();
+ disp(t, "Time for " + solverName(solver+1) + " :");
+
+end
index 2a782c7..fce5eba 100644 (file)
@@ -13,7 +13,7 @@
     <refnamediv>
         <refname>CVode</refname>
         <refpurpose>
-            <emphasis>CVode</emphasis> is a numerical solver providing an efficient and stable method to solve ODE Initial Value Problems. Called by scicos(), it uses either <emphasis>BDF</emphasis> or <emphasis>Adams</emphasis> as implicit integration method, and <emphasis>Newton</emphasis> or <emphasis>Functional</emphasis> iterations
+            <emphasis>CVode</emphasis> is a numerical solver providing an efficient and stable method to solve Ordinary Differential Equations (ODEs) Initial Value Problems. Called by <link linkend="xcos">xcos</link>, it uses either <emphasis>BDF</emphasis> or <emphasis>Adams</emphasis> as implicit integration method, and <emphasis>Newton</emphasis> or <emphasis>Functional</emphasis> iterations
         </refpurpose>
     </refnamediv>
     <refsection>
@@ -33,7 +33,7 @@
             <emphasis>
                 y<subscript>0</subscript>
             </emphasis>
-            ,<emphasis>CVode</emphasis> approximates 
+            , <emphasis>CVode</emphasis> approximates 
             <emphasis>
                 y<subscript>n+1</subscript>
             </emphasis>
@@ -54,7 +54,7 @@
                 <emphasis>
                     y(t<subscript>n</subscript>)
                 </emphasis>
-                ,and 
+                , and 
                 <emphasis>
                     h<subscript>n</subscript>
                 </emphasis>
                 </inlinemediaobject>
             </link>
             <scilab:image><![CDATA[
+loadScicos();
+loadXcosLibs();
 importXcosDiagram(SCI + "/modules/xcos/examples/solvers/ODE_Example.xcos");
-xcos_simulate(scs_m, 4);
+try xcos_simulate(scs_m, 4); catch disp(lasterror()); end;
 ]]></scilab:image>
         </para>
         <para>
@@ -195,16 +197,18 @@ xcos_simulate(scs_m, 4);
         <para>
             <programlisting language="example"><![CDATA[
       // Import the diagram and set the ending time
+      loadScicos();
+      loadXcosLibs();
       importXcosDiagram("SCI/modules/xcos/examples/solvers/ODE_Example.xcos");
-      scs_m.props.tf = 3500;
+      scs_m.props.tf = 10000;
 
       // Select the solver BDF / Newton
       scs_m.props.tol(6) = 0;
 
       // Start the timer, launch the simulation and display time
-      timer();
-      xcos_simulate(scs_m, 4);
-      t = timer();
+      tic();
+      try xcos_simulate(scs_m, 4); catch disp(lasterror()); end;
+      t = toc();
       disp(t, "Time for BDF / Newton :");
       ]]></programlisting>
         </para>
index 7aa39bd..02b241d 100644 (file)
@@ -13,7 +13,7 @@
     <refnamediv>
         <refname>IDA</refname>
         <refpurpose>
-            <emphasis>IDA</emphasis> (Implicit Differential Algebraic) is a numerical solver providing an efficient and stable method to solve DAE Initial Value Problems. Called by <link linkend="scicos">scicos</link>.
+            <emphasis>IDA</emphasis> (Implicit Differential Algebraic) is a numerical solver providing an efficient and stable method to solve Differential Algebraic Equations (DAEs) Initial Value Problems. Called by <link linkend="xcos">xcos</link>.
         </refpurpose>
     </refnamediv>
     <refsection>
@@ -48,7 +48,7 @@
             <emphasis>
                 yPrime<subscript>0</subscript>
             </emphasis>
-            ,<emphasis>IDA</emphasis> approximates 
+            , <emphasis>IDA</emphasis> approximates 
             <emphasis>
                 y<subscript>n+1</subscript>
             </emphasis>
                 </inlinemediaobject>
             </link>
             <scilab:image><![CDATA[
+loadScicos();
+loadXcosLibs();
 importXcosDiagram(SCI + "/modules/xcos/examples/solvers/IDA_Example.xcos");
-
 // Redefining messagebox() to avoid popup
 function messagebox(msg, title)
-disp(title);
-disp(msg);
+ disp(title);
+ disp(msg);
 endfunction
-
-// Simulation
-xcos_simulate(scs_m, 4);
+try xcos_simulate(scs_m, 4); catch disp(lasterror()); end;
 ]]></scilab:image>
         </para>
     </refsection>
index 52fd3a7..c8f579b 100644 (file)
@@ -13,7 +13,7 @@
     <refnamediv>
         <refname>Runge-Kutta 4(5)</refname>
         <refpurpose>
-            Runge-Kutta is a numerical solver providing an efficient explicit method to solve ODE Initial Value Problems. Called by <link linkend="scicos">scicos</link>.
+            Runge-Kutta is a numerical solver providing an efficient explicit method to solve Ordinary Differential Equations (ODEs) Initial Value Problems. Called by <link linkend="xcos">xcos</link>.
         </refpurpose>
     </refnamediv>
     <refsection>
@@ -32,7 +32,7 @@
             <emphasis>CVode</emphasis> and <emphasis>IDA</emphasis> use variable-size steps for the integration.
         </para>
         <para>
-            A drawback of that is the unpredictable computation time. With Runge-Kutta, we don't adapt to the complexity of the problem, but we guarantee a stable computation time.
+            A drawback of that is the unpredictable computation time. With Runge-Kutta, we do not adapt to the complexity of the problem, but we guarantee a stable computation time.
         </para>
         <para>
             As of now, this method is explicit, so it is not concerned with Newton or Functional iterations, and not advised for stiff problems.
@@ -45,7 +45,7 @@
             by truncating the Taylor expansion.
         </para>
         <para>
-            By convention, to use fixed-size steps, the program first computes a fitting <emphasis>h</emphasis> that approaches the simulation parameter <emphasis>abstol</emphasis>.
+            By convention, to use fixed-size steps, the program first computes a fitting <emphasis>h</emphasis> that approaches the simulation parameter <link linkend="Simulatemenu_Menu_entries">max step size</link>.
         </para>
         <para>
             An important difference of Runge-Kutta with the previous methods is that it computes up to the fourth derivative of <emphasis>y</emphasis>, while the others only use linear combinations of <emphasis>y</emphasis> and <emphasis>y'</emphasis>.
@@ -94,7 +94,7 @@
             <emphasis>
                 y<superscript>(4)</superscript><subscript>n</subscript>
             </emphasis>
-            ,thus making an error in 
+            , thus making an error in 
             <emphasis>
                 O(h<superscript>5</superscript>)
             </emphasis>
             in total.
         </para>
         <para>
-            Althought the solver works fine for abstol up to 
+            Although the solver works fine for <link linkend="Simulatemenu_Menu_entries">max step size</link> up to 
             <emphasis>
-                abstol = 10<superscript>-3</superscript>
+                10<superscript>-3</superscript>
             </emphasis>
             , rounding errors sometimes come into play as we approach 
             <emphasis>
                 4*10<superscript>-4</superscript>
             </emphasis>
-            . Indeed, the interval splitting can't be done properly and we get capricious results.
+            . Indeed, the interval splitting cannot be done properly and we get capricious results.
         </para>
     </refsection>
     <refsection>
                 </inlinemediaobject>
             </link>
             <scilab:image><![CDATA[
+loadScicos();
+loadXcosLibs();
 importXcosDiagram(SCI + "/modules/xcos/examples/solvers/ODE_Example.xcos");
-xcos_simulate(scs_m, 4);
+scs_m.props.tol(6) = 4;
+scs_m.props.tol(7) = 10^-2;
+try xcos_simulate(scs_m, 4); catch disp(lasterror()); end;
 ]]></scilab:image>
         </para>
         <para>
@@ -155,17 +159,19 @@ xcos_simulate(scs_m, 4);
         <para>
             <programlisting language="example"><![CDATA[
       // Import the diagram and set the ending time
+      loadScicos();
+      loadXcosLibs();
       importXcosDiagram("SCI/modules/xcos/examples/solvers/ODE_Example.xcos");
-      scs_m.props.tf = 3500;
+      scs_m.props.tf = 10000;
 
       // Select the solver Runge-Kutta and set the precision
       scs_m.props.tol(6) = 4;
-      scs_m.props.tol(1) = 10^-2;
+      scs_m.props.tol(7) = 10^-2;
 
       // Start the timer, launch the simulation and display time
-      timer();
-      xcos_simulate(scs_m, 4);
-      t = timer();
+      tic();
+      try xcos_simulate(scs_m, 4); catch disp(lasterror()); end;
+      t = toc();
       disp(t, "Time for Runge-Kutta :");
       ]]></programlisting>
         </para>