File:  [LON-CAPA] / loncom / html / adm / help / tex / Authoring_Piecewise_Plot.tex
Revision 1.2: download - view: text, annotated - select for diffs
Wed Dec 11 19:04:47 2002 UTC (21 years, 6 months ago) by albertel
Branches: MAIN
CVS tags: version_2_9_X, version_2_9_99_0, version_2_9_1, version_2_9_0, version_2_8_X, version_2_8_99_1, version_2_8_99_0, version_2_8_2, version_2_8_1, version_2_8_0, version_2_7_X, version_2_7_99_1, version_2_7_99_0, version_2_7_1, version_2_7_0, version_2_6_X, version_2_6_99_1, version_2_6_99_0, version_2_6_3, version_2_6_2, version_2_6_1, version_2_6_0, version_2_5_X, version_2_5_99_1, version_2_5_99_0, version_2_5_2, version_2_5_1, version_2_5_0, version_2_4_X, version_2_4_99_0, version_2_4_2, version_2_4_1, version_2_4_0, version_2_3_X, version_2_3_99_0, version_2_3_2, version_2_3_1, version_2_3_0, version_2_2_X, version_2_2_99_1, version_2_2_99_0, version_2_2_2, version_2_2_1, version_2_2_0, version_2_1_X, version_2_1_99_3, version_2_1_99_2, version_2_1_99_1, version_2_1_99_0, version_2_1_3, version_2_1_2, version_2_1_1, version_2_1_0, version_2_12_X, version_2_11_X, version_2_11_4_uiuc, version_2_11_4_msu, version_2_11_4, version_2_11_3_uiuc, version_2_11_3_msu, version_2_11_3, version_2_11_2_uiuc, version_2_11_2_msu, version_2_11_2_educog, version_2_11_2, version_2_11_1, version_2_11_0_RC3, version_2_11_0_RC2, version_2_11_0_RC1, version_2_11_0, version_2_10_X, version_2_10_1, version_2_10_0_RC2, version_2_10_0_RC1, version_2_10_0, version_2_0_X, version_2_0_99_1, version_2_0_2, version_2_0_1, version_2_0_0, version_1_99_3, version_1_99_2, version_1_99_1_tmcc, version_1_99_1, version_1_99_0_tmcc, version_1_99_0, version_1_3_X, version_1_3_3, version_1_3_2, version_1_3_1, version_1_3_0, version_1_2_X, version_1_2_99_1, version_1_2_99_0, version_1_2_1, version_1_2_0, version_1_1_X, version_1_1_99_5, version_1_1_99_4, version_1_1_99_3, version_1_1_99_2, version_1_1_99_1, version_1_1_99_0, version_1_1_3, version_1_1_2, version_1_1_1, version_1_1_0, version_1_0_99_3, version_1_0_99_2, version_1_0_99_1, version_1_0_99, version_1_0_3, version_1_0_2, version_1_0_1, version_1_0_0, version_0_99_5, version_0_99_4, version_0_99_3, version_0_99_2, version_0_99_1, version_0_99_0, version_0_6_2, version_0_6, loncapaMITrelate_1, language_hyphenation_merge, language_hyphenation, conference_2003, bz6209-base, bz6209, bz5969, bz2851, PRINT_INCOMPLETE_base, PRINT_INCOMPLETE, HEAD, GCI_3, GCI_2, GCI_1, BZ5971-printing-apage, BZ5434-fox, BZ4492-merge, BZ4492-feature_horizontal_radioresponse
- spellchecked (BUG#1052)

\label{Authoring_Piecewise_Plot}
Suppose you want to plot a piecewise function similar to the
following:

\begin{verbatim}
f(x) = a*x + b if (x < 4.5)
f(x) = a*x     if (x >=4.5)
\end{verbatim}

The following is the XML representation of a problem with a dynamic
plot based on this. The work is done in a <script> block that
generates the data sets used in the plot.

\begin{verbatim}
 <script type="loncapa/perl" >
 $a = &random(2,5,1);
 $b = &random(3,6,1);
 
 for ($x = 0; $x<4.5; $x+= 0.05) {
     push @X, $x;
     push @Y, $a*$x + $b;
 }
 
 for ($x = 4.5; $x<=10; $x+= 0.05) {
     push @X, $x;
     push @Y, $a*$x;
 }
 </script >
 <gnuplot font="medium" width="500" grid="on" height="400" border="on" 
          fgcolor="x000000" alttag="dynamically generated plot" align="center" 
          bgcolor="xffffff" transparent="off" >
     <curve linestyle="lines" pointsize="1" pointtype="1" color="x000000" 
      name="">
         <data >@X</data >
         <data >@Y</data >
     </curve >
 </gnuplot >
\end{verbatim}

The above script works, but it produces a plot like this:

\includegraphics{dynamic_piecewise}

A better solution is to use two separate <curve> statements to plot
two separate curves. So on the second piece of the function we use
@X2 and @Y2 instead of @X and @Y. Then in the <gnuplot> tag we
include a second <curve> sub-tag.

\begin{verbatim}
 <script type="loncapa/perl" >
 $a = &random(2,5,1);
 $b = &random(3,6,1);
 
 for ($x = 0; $x<4.5; $x+= 0.05) {
     push @X, $x;
     push @Y, $a*$x + $b;
 }
 
 for ($x = 4.5; $x<=10; $x+= 0.05) {
     push @X2, $x;
     push @Y2, $a*$x;
 }
 </script >
 <gnuplot font="medium" width="500" grid="on" height="400" border="on" 
          fgcolor="x000000" alttag="dynamically generated plot" align="center" 
          bgcolor="xffffff" transparent="off" >
     <curve linestyle="lines" pointsize="1" pointtype="1" color="x000000" 
      name="" >
         <data >@X</data >
         <data >@Y</data >
     </curve >
     <curve linestyle="lines" pointsize="1" pointtype="1" color="x000000" 
      name="" >
         <data >@X2</data >
         <data >@Y2</data >
     </curve >
 </gnuplot >
\end{verbatim}

\includegraphics{dynamic_piecewise2}

This is still not a desirable result. Typically one wants an open
circle or closed circle defining the domain of each
piece. Unfortunately there is no easy way to do this in gnuplot
currently. If this effect is desired, perhaps using a static image
and a randomlabel problem would be a better approach. A second
solution would be to add data which draws a circle to your curves.

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>