home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / bit / listserv / csgl / 1413 < prev    next >
Encoding:
Internet Message Format  |  1992-11-09  |  25.1 KB

  1. Path: sparky!uunet!stanford.edu!bcm!convex!news.oc.com!eff!sol.ctr.columbia.edu!spool.mu.edu!hri.com!noc.near.net!mars.caps.maine.edu!maine.maine.edu!cunyvm!psuvm!auvm!VAXF.COLORADO.EDU!POWERS_W
  2. From: POWERS_W%FLC@VAXF.COLORADO.EDU (William T. Powers)
  3. Newsgroups: bit.listserv.csg-l
  4. Subject: Primer for modelers: draft
  5. Message-ID: <01GQY0F9Q842006FKI@VAXF.COLORADO.EDU>
  6. Date: 9 Nov 92 17:25:31 GMT
  7. Sender: "Control Systems Group Network (CSGnet)" <CSG-L@UIUCVMD.BITNET>
  8. Lines: 533
  9. Comments: Gated by NETNEWS@AUVM.AMERICAN.EDU
  10. X-Envelope-to: CSG-L@vmd.cso.uiuc.edu
  11. X-VMS-To: @CSG
  12. MIME-version: 1.0
  13. Content-transfer-encoding: 7BIT
  14.  
  15.  
  16.                Experimenting with the control paradigm
  17.                    A primer for computer modelers
  18.                         DRAFT: William T. Powers
  19.  
  20.        PART I: PROPERTIES OF A SIMPLE STABLE CONTROL SYSTEM
  21.  
  22.  The following is intended to introduce programmers and control-system
  23.  engineers to the terminology and architecture of control theory as
  24.  used under the name PCT, or perceptual control theory. For those who
  25.  have experience with modeling control systems, there are some
  26.  readjustments to be made, because we will divide the system into
  27.  functions in a way that is not standard in control engineering. For
  28.  example, the output of the control system is not the controlled
  29.  variable, but is an influence on the controlled variable. If the
  30.  controlled variable were defined as the rotational speed of a motor,
  31.  the output of the control system would be the torque applied to the
  32.  motor armature, not the speed. The speed would be classified as an
  33.  INPUT quantity, because it is this quantity that is sensed by a
  34.  tachometer, and that can be disturbed by variables in the environment
  35.  such as friction and loads. We define torque as the output because
  36.  torque depends only on the output of the control system -- the
  37.  current going through the motor -- and is not subject to disturbance
  38.  by the environment. If you are an engineer it will take some effort
  39.  to reorganize your thinking in this new way, but even in control
  40.  engineering you might find that there are some considerable benefits
  41.  in doing so. The normal way of presenting control processes to
  42.  students is rather disorganized; the PCT organization brings in a
  43.  standard approach that often makes control problems easier to solve.
  44.  
  45.  The aim here is to develop some insights into the properties of
  46.  control systems, not through complexity but through simple examples
  47.  and hands-on experience. Watching computer simulations work is the
  48.  next best thing to seeing a real control system work; in some ways it
  49.  is superior because you have time to see the details of what is going
  50.  on. Rather than exhort the reader to run these programs on a computer
  51.  and examine the results, I have decided to make it necessary to do
  52.  this by not presenting any numerical or graphical tables. You will
  53.  have to run the program to see what this discussion is about. Perhaps
  54.  frustration will prove to be an effective motive for actually
  55.  experiencing this simulation in operation.
  56.  
  57.                Suggestions for standard terminology
  58.  
  59.  A function is a physical device with an output signal the magnitude
  60.  of which can be computed from the state of its input magnitudes. All
  61.  functions are true mathematical functions: that is, they may have
  62.  multiple inputs (arguments) but they produce only one output (value
  63.  of the function given those arguments). Thus the term function refers
  64.  both to some physical element of the system and to the equivalent
  65.  mathematical function that describes the dependence of its output on
  66.  its input(s) in terms of magnitudes.
  67.  
  68.  A generic control system consists of an input function, a comparator,
  69.  and an output function. The output of one function generates a
  70.  variable that is an input to another function. Such information- carrying
  71.  variables inside the system are called signals. A signal not
  72.  only represents the value of the function, but serves to carry that
  73.  value to the input of another function in a different physical
  74.  location. All signals have a single measure, magnitude. The name of a
  75.  signal identifies a pathway; the value of the signal indicates the
  76.  momentary magnitude of the signal carried unidirectionally by that
  77.  pathway.
  78.  
  79.  The environment model
  80.  
  81.  In the environment of a control system the variables are called
  82.  quantities. The output of the output function is measured in terms of
  83.  an effect on a physical variable called the output quantity. The
  84.  output function in a model of a single control system interacting
  85.  with an environment is therefore a transducer: its input is a signal
  86.  while its output is a quantity. The output quantity is always defined
  87.  so that its magnitude depends only on the output function's value: it
  88.  is always a single variable. If it has multiple effects in the
  89.  environment, each of those effects must be separately indicated in a
  90.  model of the environment.
  91.  
  92.  The input to the control system is another physical variable called
  93.  the input quantity. The input function senses the state of the input
  94.  quantity and converts it to a perceptual signal. The input function
  95.  is also a transducer in a single system-environment model; its input
  96.  is a physical quantity and its output is a signal. An input function
  97.  may respond to multiple input quantities.
  98.  
  99.  In the environment, there is a feedback link connecting the output
  100.  quantity to the input quantity. This link is called the environmental
  101.  feedback function, or simply the feedback function.
  102.  
  103.  Also in the environment there is a link through which independent
  104.  environmental variables called disturbing quantities act on the input
  105.  quantity concurrently with the action of the output quantity on the
  106.  input quantity. Because the number and kind of disturbing quantities
  107.  is immaterial, it is customary, when modeling a single control
  108.  system, to represent all disturbing quantities and their individual
  109.  links to the input quantity as a single equivalent disturbance acting
  110.  through a single equivalent disturbing function.
  111.  
  112.  The control system model
  113.  
  114.  The perceptual signal generated by the input quantity enters a
  115.  comparator; also entering the comparator is a reference signal, an
  116.  independent variable. Where possible, the signs of various system
  117.  constants are chosen so that the reference signal has a positive
  118.  effect on the comparator while the perceptual signal has a negative
  119.  effect. The comparator is a function with two arguments and a single
  120.  value. The output value is represented by an error signal, the
  121.  magnitude of which is equal to the reference signal's magnitude minus
  122.  the perceptual signal's magnitude. The error signal enters the output
  123.  function. Often, as shorthand, we speak of subtracting one signal
  124.  from another, or adding signals together. What is meant is that the
  125.  magnitudes are subtracted or added.
  126.  The system-environment diagram
  127.  
  128.                                 sr
  129.                       sp        +|      se
  130.                    -----------> (fc)----------->
  131.                   |           -                 |    CONTROL
  132.                  (fi)                          (fo)   SYSTEM
  133.  ---------------  | --------------------------- | -------------
  134.                  qi <-----------(ff)<--------- qo   ENVIRONMENT
  135.                   ^
  136.                   |
  137.                  (fd)
  138.                   ^
  139.                   |
  140.                  qd
  141.  
  142.  DEFINITIONS:
  143.  
  144.  Signals:
  145.  sp = perceptual signal
  146.  sr = reference signal
  147.  se = error signal
  148.  
  149.  Functions:
  150.  fi = input function
  151.  fc = comparison function or comparator
  152.  fo = output function
  153.  ff = feedback function
  154.  fd = disturbance function
  155.  
  156.  Quantities:
  157.  qi = input quantity
  158.  qo = output quantity
  159.  qd = disturbing quantity
  160.  
  161.  THE CONTROL EQUATIONS:
  162.  
  163.  System:
  164.  sp = fi(qi)
  165.  se = sr - sp
  166.  
  167.  Interface transducers:
  168.  qo = fo(se)
  169.  sp = fi(qi)
  170.  
  171.  Environment:
  172.  qi = ff(qo) + fd(qd)
  173.  
  174.  Combined equations:
  175.  System: qo = fo(sr - fi(qi))
  176.  Env:    qi = ff(qo) + fd(qd)
  177.  
  178.                    Setting up a working model
  179.  The following discussion assumes that you know a programming language
  180.  like C, Fortran, Pascal, Modula, or Basic. The actual programming
  181.  involved is elementary. The student is advised to write the simplest
  182.  program possible in the most familiar language and experiment with
  183.  it. The most important knowledge to be gained is a feel for the
  184.  relationships among variables in a control system, and for the
  185.  effects of changing various system parameters. There is a temptation
  186.  to tackle some interesting and complex problem first, but without a
  187.  strong intuitive foundation for designing more complex systems the
  188.  most likely result will be confusion and failure. Control systems do
  189.  many surprising things and the effects of changes in the parameters
  190.  are seldom what you would initially guess.
  191.  
  192.  The simplest control system to model on a digital computer is one in
  193.  which all the functions are simple proportionalities except the
  194.  output function, which is an integrator. Alternatively, the feedback
  195.  function or the input function can be made into an integrator;
  196.  however, only one function should be an integrator and the rest
  197.  should be proportional multipliers. We will use a design with an
  198.  integrator in the output function; you can experiment with the other
  199.  possibilities.
  200.  
  201.  In computer programs, integration is summation. Because this is a
  202.  closed-loop system, integrations do not need to be precise, so
  203.  advanced methods of numerical integration are not needed. If we make
  204.  the output function into an integrator, the program step for
  205.  computing output becomes (in C notation)
  206.  
  207.  qo = qo + ko*se*dt;
  208.  
  209.  where ko is an integration factor determining how much the output
  210.  will change on each iteration for a given magnitude of error signal.
  211.  The constant dt defines the physical time represented by one
  212.  iteration of the program -- it should be set to 0.1 or 0.01
  213.  initially, implying that you should use floating point variables. We
  214.  will use 0.1 sec.
  215.  
  216.  The central part of a C program for implementing a control system
  217.  would then be (starting with the computation of the perceptual signal
  218.  sp):
  219.  
  220.  sp = ki*qi;
  221.  se = sr - sp;
  222.  qo = qo + ko*se*dt;
  223.  qi = kf*qo + kd*qd;
  224.  
  225.  The disturbing, input, and feedback functions are replaced by
  226.  constants kd, ki, and kf. For initial experimentation they can all be
  227.  set to 1. Two variables have to be initialized before the first time
  228.  this series of steps is used: qi and qo. Initializing to zero is
  229.  sufficient. Two independent variables must also be set, sr and qd.
  230.  Using these variables is described below.
  231.  
  232.  The diagram with constants in place of the general functions:
  233.                                 sr
  234.                       sp        +|      se
  235.                    -----------> (fc)----------->
  236.                   |           -                 |
  237.                   ki                       ko*integral(se)
  238.                   |                             |
  239.                   |                             |  CONTROL SYSTEM
  240.  ---------------  | --------------------------- | -------------
  241.                  qi <------------kf<---------- qo   ENVIRONMENT
  242.                   ^
  243.                   |
  244.                   kd
  245.                   ^
  246.                   |
  247.                  qd
  248.  
  249.  
  250.  
  251.  The general flow chart of the program
  252.  
  253.  1. Initialize variables qo and qi.
  254.  
  255.  2. Input or set constants ki, kf, kd, and ko.
  256.  
  257.  3. Input or set the values of the reference signal sr and the
  258.     disturbing quantity qd.
  259.  
  260.  4. Execute the four program steps above.
  261.  
  262.  5. Plot or print the values of variables of interest.
  263.  
  264.  6. Return to step 4 until the desired number of iterations is
  265.     finished. If dt = 0.1, 25 iterations will show 2.5 seconds of
  266.     behavior.
  267.  
  268.  An alternative is to pre-record an array of values for the reference
  269.  signal or the disturbing quantity or both, and step through this
  270.  array as the iterations proceed. In that case step six would involve
  271.  returning to step 3, and step 3 would advance pointers to the arrays
  272.  of values for sr or qd or both. Below we will use still another way
  273.  of showing the effects of changes in sr and qd.
  274.  
  275.             Exploring a control system using the model
  276.  
  277.  /* A SAMPLE PROGRAM IN C: */
  278.  
  279.  #include "stdio.h"
  280.  
  281.  void main()
  282.   {
  283.  float sp = 0.0,sr = 20.0,se = 0.0,qo = 0.0,qi = 0.0, qd = 0.0;
  284.  float kd = 1.0,ki = 1.0,ko = 8.0, kf = 1.0, dt = 0.1;
  285.  int i;
  286.  
  287.  /* you may put statements here to input values of the k-constants */
  288.  printf("\n");
  289.   for(i=0;i<25;++i)
  290.    {
  291.     if(i > 12) qd = 10.0; else qd = 0.0;
  292.     qi = kf*qo + kd*qd;
  293.     sp = ki*qi;
  294.     se = sr - sp;
  295.     qo = qo + ko*se*dt;
  296.     printf(
  297.     "\x0d\x0a qd=%6.2f qi=%6.2f qo=%6.2f sp=%6.2f sr=%6.2f se=%6.2f",
  298.     qd,qi,qo,sp,sr,se);
  299.    }
  300.   (void) getch(); /* pause to view; press key to exit */
  301.  }
  302.  ---------------------------------------------------------------
  303.  In this program, the disturbance remains at zero for the first 12
  304.  iterations, and then jumps to 10.0 for the last 13. The resulting
  305.  table will just fill the screen. You will see the input quantity and
  306.  perceptual signal rise quickly to 20 units, to equal the reference
  307.  signal's setting, and then briefly be disturbed when the disturbing
  308.  quantity changes from 0 to 10. The perceptual signal sp will then
  309.  return within half a second (5 iterations) to the reference value
  310.  again.
  311.  
  312.  Illuminating experiments with the program
  313.  
  314.  There are several basic rules of thumb that can be demonstrated with
  315.  this program. The first is the maxim that control systems control
  316.  their own perceptual signals, not the input quantity and not their
  317.  own outputs.
  318.  
  319.  First, run the program and note that the perceptual signal sp, the
  320.  input quantity qi, and the output quantity qo all rise to 20.0 just
  321.  before the disturbance enters. Note that after the disturbance
  322.  appears, the output drops from 20.0 to 10.0 units; this is because
  323.  the disturbance is trying to make the perceptual signal too large;
  324.  the output automatically drops by the amount needed to bring the
  325.  perceptual signal sp back down to 20.0. The control system clearly
  326.  does not control to produce a specific output. The output quantity
  327.  changes as the disturbing quantity changes.
  328.  
  329.  Because the input function is a multiplier of 1, the input quantity
  330.  qi and the perceptual signal sp are numerically equal. Change the
  331.  input constant ki from 1.0 to 0.5 and compile and run the program
  332.  again (to save time you may want to insert some lines to read in ki,
  333.  kf, ko, and kd from the keyboard). Intuitively one might expect that
  334.  halving the input sensitivity would halve the perceptual signal. But
  335.  this is a closed-loop system, and that is not what happens.
  336.  
  337.  The perceptual signal still rises to match the reference signal's
  338.  value of 20.0, although more slowly than before. The input quantity,
  339.  however, rises nearly to 40. It must do this because we have reduced
  340.  the effect of the input quantity on the reference signal -- the input
  341.  quantity must be greater to produce the former amount of perceptual signal.
  342.  This shows that changing the input function alters the input
  343.  quantity, but does not alter the perceptual signal's final value.
  344.  Note also that the output quantity has risen to 40.0 units, as it
  345.  must do to bring the perceptual signal to the reference value of
  346.  20.0. The control system treats a change in the input function as
  347.  just another disturbance, and alters its output to counteract the
  348.  change in the perceptual signal. Both the output quantity qo and the
  349.  input quantity qi are altered by this change in parameter, but the
  350.  final value of the perceptual signal sp is not altered.
  351.  
  352.  Now restore the input constant ki to 1.0, and change the feedback
  353.  constant kf to 0.5. Note that the output quantity now becomes 40
  354.  instead of 20 as before, while the perceptual signal still rises to
  355.  the same value as the reference signal, 20.0 units. This shows that
  356.  changes in the feedback function will change the final value of the
  357.  output quantity, but not the final value of the input quantity or
  358.  perceptual signal.
  359.  
  360.  Finally, if you alter the output integration factor ko, you will see
  361.  a change in the speed with which errors are corrected, but the final
  362.  states of all the variables are unaffected. CAUTION: keep the product
  363.  ko*kf*ki*dt less than 1.0. If you make it equal to 1.0 or larger, a
  364.  computer artifact will be introduced and the system will become
  365.  unstable. You can try it to see what "unstable" means, but this is
  366.  not true instability. It's caused by the fact that we're simulating a
  367.  continous system on a digital computer. On an analogue computer this
  368.  kind of instability would not happen, because "dt" is infinitesimal.
  369.  
  370.  The integration factor is initialized to 8.0. If you use smaller
  371.  values, the computation will remain stable.
  372.  
  373.  To sum up, when we change the disturbance, the input function, the
  374.  feedback function, or the output function, the perceptual signal
  375.  always returns to a match with the reference signal as long as the
  376.  control system is still working. The only variable that remains under
  377.  control under all these changes in conditions is the perceptual
  378.  signal. That is why we say that control systems control their own
  379.  perceptual signals and not their outputs. They can be said to control
  380.  their input quantities only if the form of the input function does
  381.  not change.
  382.  
  383.  You may have noticed that when you alter a function, the resulting
  384.  change in the final state of the system variables is not at the
  385.  output of that function but at the input. Changing the input function
  386.  ki does not alter the final value of the output of that function, sp,
  387.  but the input to that function, qi. Changing the feedback function kf
  388.  does not alter the quantity qi, but the quantity qo at the input of
  389.  the feedback function. Causation appears to be working backward.
  390.  Furthermore, the effect of a change is opposite to the direction of
  391.  the change. By halving ki, we caused the final value of qi to double;
  392.  by halving the feedback factor kf, we caused the final value of qo to
  393.  double.
  394.  
  395.  These strange reversals of causation are typical of control systems,
  396.  and account for most of the difficulty people have in understanding how
  397.  different control systems are from straight-through systems in
  398.  which causation works in the direction we expect. Of course causation
  399.  has not really been reversed here, but the feedback effects make it
  400.  seem that it has.
  401.  
  402.  Relationship of disturbance to output
  403.  
  404.  Restore ki and kf to 1.0 and ko to 8.0, recompile, and run. When the
  405.  disturbing quantity jumps from 0 to 10.0 in the middle of the run,
  406.  look at the resulting change in the output quantity. It changes from
  407.  20.0 to 10.0. This relationship is not accidental. The effect of the
  408.  disturbing quantity on the input quantity is just cancelled by the
  409.  change in the effect of the output quantity on the input quantity. 10
  410.  units of disturbance is cancelled by -10 units of change in the
  411.  output quantity.
  412.  
  413.  Now double the constant representing the disturbance function (change
  414.  kd from 1.0 to 2.0). This doubles the effect of a given change in the
  415.  disturbing quantity on the input quantity. Recompile and run.
  416.  
  417.  As usual, the perceptual signal returns to 20.0 after the
  418.  disturbance. But look at the output quantity: it drops from 20.0 to
  419.  0.0 when the disturbance turns on. Now a 10-unit change in the
  420.  disturbing quantity results in a negative 20-unit change in the
  421.  output quantity. The reason? One unit of disturbance now has twice as
  422.  much effect on the input quantity as one unit of output from the
  423.  control system. Result: twice as much output is now needed to
  424.  counteract the same disturbance. That is what happens. It happens not
  425.  because something "knows" that twice as much output is needed, but
  426.  simply as the natural result of the operation of the control system.
  427.  
  428.  The "behavioral illusion"
  429.  
  430.  If we consider just the disturbing quantity and the output quantity,
  431.  we can see that there is an apparent direct relationship between
  432.  them. It looks as though changing the disturbing quantity causes the
  433.  output quantity to change. If we didn't know about the input quantity
  434.  qi, we might well think that the system was sensing the disturbing
  435.  quantity directly, and responding by altering its output quantity. It
  436.  looks as if a change in the disturbing quantity is a stimulus, which
  437.  causes a response in the form of a change in the output quantity.
  438.  
  439.  Of course we can see that this relationship holds only because of the
  440.  input quantity and the fact that the perceptual signal is being
  441.  maintained at a particular value. The apparent stimulus would alter
  442.  the input quantity if it were the only influence. But it does not
  443.  alter the input quantity (for long) because the output changes to
  444.  have an equal and opposite effect on the input quantity. That is the
  445.  true explanation of the relationship between the remote disturbing
  446.  quantity and the output action of the system. The appearance of
  447.  stimulus and response is an illusion. There can be, of course, true
  448.  stimulus-response organizations. But an apparent stimulus-response
  449.  relationship is an illusion when the behaving system is really a
  450.  control system.
  451.  Effect of the reference signal
  452.  
  453.  Right after the bracket following the "for" statement, insert this
  454.  line of code:
  455.  
  456.  if(i>5 && i < 20) sr = 20.0 else sr = 5.0;
  457.  
  458.  Recompile and run. Now the reference signal begins at 5.0, and rises
  459.  to 20.0 halfway through the first part of the run. Then the
  460.  disturbance is turned on. Halfway through the second part of the run,
  461.  with the disturbance still present, the reference signal returns to
  462.  5.0.
  463.  
  464.  Just follow the behavior of the perceptual signal. You will see that
  465.  it rises quickly to 5.0, then rises again to 20.0 before the
  466.  disturbance occurs. When the disturbance rises to 10.0 there is a
  467.  brief excursion of the perceptual signal which immediately returns to
  468.  20.0. Then when the reference signal drops to 5.0 again, so does the
  469.  perceptual signal.
  470.  
  471.  In fact, the perceptual signal tracks the reference signal in terms
  472.  of magnitude. The reference signal determines the value to which the
  473.  perceptual signal will be brought initially, and at which it will be
  474.  maintained, even if disturbances occur. By varying the reference
  475.  signal, we can make the control system produce physical effects in
  476.  the environment that result in corresponding variations in the
  477.  perceptual signal. Even if disturbances come and go, and even if the
  478.  feedback function and input function characteristics change (over
  479.  some range), the system will still produce just the output needed to
  480.  control the perception at the specified level.
  481.  
  482.  This is why we identify the reference signal with the commonsense
  483.  notions of intention and purpose.
  484.  
  485.  Dynamic considerations
  486.  
  487.  During the program run, the output quantity of the system becomes
  488.  whatever it must be to keep sp matching sr, for all combinations of
  489.  qd and sr. Immediately after sudden changes in these independent
  490.  variables there is an error, but the error is soon corrected --
  491.  sooner if ko is larger.
  492.  
  493.  In real environments, physical variables can't jump instantly from
  494.  one state to another. Normally the changes are smooth; they are also
  495.  slow enough to allow control processes to begin changing before the
  496.  environmental changes have gone to completion. To illustrate this,
  497.  change the line in the program
  498.  
  499.     if(i > 12) qd = 10.0; else qd = 0.0;
  500.  
  501.  to
  502.  
  503.    if(i >= 5 && i < 15) qd = qd + 1;
  504.  In C this could be shortened but this will work in all languages. The
  505.  effect is to make the disturbance change smoothly instead of in one
  506.  jump.
  507.  
  508.  Also, "comment out" the line that alters the reference signal sr, or
  509.  delete it. Compile and run.
  510.  
  511.  Now the perceptual signal sr rises quickly to the default reference
  512.  level of 20.0. When the ramp disturbance begins, it rises slightly
  513.  above 20.0 and remains there until the ramp levels out; then it
  514.  returns quickly to 20.0 again. You will notice the output quantity
  515.  changing during the change in the disturbance.
  516.  
  517.  If you reduce ko to slow the system, you will find that the ramp
  518.  disturbance has a greater effect. The amount of effect that a
  519.  disturbance has depends on how rapidly it changes in comparison with
  520.  the control system's speed of error-correction.
  521.  
  522.  By reducing the time interval dt to 0.01 and raising ko to 80, you
  523.  could make the control system work 10 times faster and reduce the
  524.  effect of the disturbing ramp by a factor of 10. You would, however,
  525.  need 10 times as many iterations to cover the same period of 2.5
  526.  seconds, and this would not fit on the screen. If you want to see
  527.  this effect, change the print statement so it prints to the printer,
  528.  and change the limit of the "for" statement to 250. If you can
  529.  program graphics, you could plot these variables on the screen and
  530.  see the behavior in much more detail without using 5 pages of paper.
  531.  
  532.  ------------------------------------------------------------------
  533.  NOTE: I would appreciate it if programmers versed in BASIC, Pascal,
  534.  and other languages would write versions of the above program, test
  535.  them, and transmit them to me for inclusion in an appendix to this
  536.  primer. Programs should be as generic as possible so as to run on as
  537.  many computers as possible. I especially need versions for mainframes
  538.  and workstations. In the future I will simplify the program and make
  539.  it easier for the user to change parameters from the keyboard. For
  540.  now, I hope that all programmers and would-be programmers will try
  541.  the program as it stands and learn from it, even if you have to get
  542.  some help from a 14-year-old. As this primer evolves I will post
  543.  revisions and again ask for your help.
  544.  ------------------------------------------------------------------
  545.  Best,
  546.  
  547.  Bill P.
  548.