home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / gnu / info / calc.info-4 (.txt) < prev    next >
GNU Info File  |  1994-12-22  |  40KB  |  739 lines

  1. This is Info file calc.info, produced by Makeinfo-1.55 from the input
  2. file calc.texinfo.
  3.    This file documents Calc, the GNU Emacs calculator.
  4.    Copyright (C) 1990, 1991 Free Software Foundation, Inc.
  5.    Permission is granted to make and distribute verbatim copies of this
  6. manual provided the copyright notice and this permission notice are
  7. preserved on all copies.
  8.    Permission is granted to copy and distribute modified versions of
  9. this manual under the conditions for verbatim copying, provided also
  10. that the section entitled "GNU General Public License" is included
  11. exactly as in the original, and provided that the entire resulting
  12. derived work is distributed under the terms of a permission notice
  13. identical to this one.
  14.    Permission is granted to copy and distribute translations of this
  15. manual into another language, under the above conditions for modified
  16. versions, except that the section entitled "GNU General Public License"
  17. may be included in a translation approved by the author instead of in
  18. the original English.
  19. File: calc.info,  Node: List Tutorial,  Prev: Matrix Tutorial,  Up: Vector/Matrix Tutorial
  20. Vectors as Lists
  21. ----------------
  22. Although Calc has a number of features for manipulating vectors and
  23. matrices as mathematical objects, you can also treat vectors as simple
  24. lists of values.  For example, we saw that the `k f' command returns a
  25. vector which is a list of the prime factors of a number.
  26.    You can pack and unpack stack entries into vectors:
  27.      3:  10         1:  [10, 20, 30]     3:  10
  28.      2:  20             .                2:  20
  29.      1:  30                              1:  30
  30.          .                                   .
  31.      
  32.                         M-3 v p              v u
  33.    You can also build vectors out of consecutive integers, or out of
  34. many copies of a given value:
  35.      1:  [1, 2, 3, 4]    2:  [1, 2, 3, 4]    2:  [1, 2, 3, 4]
  36.          .               1:  17              1:  [17, 17, 17, 17]
  37.                              .                   .
  38.      
  39.          v x 4 RET           17                  v b 4 RET
  40.    You can apply an operator to every element of a vector using the
  41. "map" command.
  42.      1:  [17, 34, 51, 68]   1:  [289, 1156, 2601, 4624]  1:  [17, 34, 51, 68]
  43.          .                      .                            .
  44.      
  45.          V M *                  2 V M ^                      V M Q
  46. In the first step, we multiply the vector of integers by the vector of
  47. 17's elementwise.  In the second step, we raise each element to the
  48. power two.  (The general rule is that both operands must be vectors of
  49. the same length, or else one must be a vector and the other a plain
  50. number.)  In the final step, we take the square root of each element.
  51.    (*) *Exercise 1.*  Compute a vector of powers of two from `2^-4' to
  52. `2^4'.  *Note 1: List Answer 1. (*)
  53.    You can also "reduce" a binary operator across a vector.  For
  54. example, reducing `*' computes the product of all the elements in the
  55. vector:
  56.      1:  123123     1:  [3, 7, 11, 13, 41]      1:  123123
  57.          .              .                           .
  58.      
  59.          123123         k f                         V R *
  60. In this example, we decompose 123123 into its prime factors, then
  61. multiply those factors together again to yield the original number.
  62.    We could compute a dot product "by hand" using mapping and reduction:
  63.      2:  [1, 2, 3]     1:  [7, 12, 0]     1:  19
  64.      1:  [7, 6, 0]         .                  .
  65.          .
  66.      
  67.          r 1 r 2           V M *              V R +
  68. Recalling two vectors from the previous section, we compute the sum of
  69. pairwise products of the elements to get the same answer for the dot
  70. product as before.
  71.    A slight variant of vector reduction is the "accumulate" operation,
  72. `V U'.  This produces a vector of the intermediate results from a
  73. corresponding reduction.  Here we compute a table of factorials:
  74.      1:  [1, 2, 3, 4, 5, 6]    1:  [1, 2, 6, 24, 120, 720]
  75.          .                         .
  76.      
  77.          v x 6 RET                 V U *
  78.    Calc allows vectors to grow as large as you like, although it gets
  79. rather slow if vectors have more than about a hundred elements.
  80. Actually, most of the time is spent formatting these large vectors for
  81. display, not calculating on them.  Try the following experiment (if
  82. your computer is very fast you may need to substitute a larger vector
  83. size).
  84.      1:  [1, 2, 3, 4, ...      1:  [2, 3, 4, 5, ...
  85.          .                         .
  86.      
  87.          v x 500 RET               1 V M +
  88.    Now press `v .' (the letter `v', then a period) and try the
  89. experiment again.  In `v .' mode, long vectors are displayed
  90. "abbreviated" like this:
  91.      1:  [1, 2, 3, ..., 500]   1:  [2, 3, 4, ..., 501]
  92.          .                         .
  93.      
  94.          v x 500 RET               1 V M +
  95. (where now the `...' is actually part of the Calc display).  You will
  96. find both operations are now much faster.  But notice that even in
  97. `v .' mode, the full vectors are still shown in the Trail.  Type `t .'
  98. to cause the trail to abbreviate as well, and try the experiment one
  99. more time.  Operations on long vectors are now quite fast!  (But of
  100. course if you use `t .' you will lose the ability to get old vectors
  101. back using the `t y' command.)
  102.    An easy way to view a full vector when `v .' mode is active is to
  103. press ``' (back-quote) to edit the vector; editing always works with
  104. the full, unabbreviated value.
  105.    As a larger example, let's try to fit a straight line to some data,
  106. using the method of least squares.  (Calc has a built-in command for
  107. least-squares curve fitting, but we'll do it by hand here just to
  108. practice working with vectors.)  Suppose we have the following list of
  109. values in a file we have loaded into Emacs:
  110.        x        y
  111.       ---      ---
  112.       1.34    0.234
  113.       1.41    0.298
  114.       1.49    0.402
  115.       1.56    0.412
  116.       1.64    0.466
  117.       1.73    0.473
  118.       1.82    0.601
  119.       1.91    0.519
  120.       2.01    0.603
  121.       2.11    0.637
  122.       2.22    0.645
  123.       2.33    0.705
  124.       2.45    0.917
  125.       2.58    1.009
  126.       2.71    0.971
  127.       2.85    1.062
  128.       3.00    1.148
  129.       3.15    1.157
  130.       3.32    1.354
  131. If you are reading this tutorial in printed form, you will find it
  132. easiest to press `M-# i' to enter the on-line Info version of the
  133. manual and find this table there.  (Press `g', then type `List
  134. Tutorial', to jump straight to this section.)
  135.    Position the cursor at the upper-left corner of this table, just to
  136. the left of the `1.34'.  Press `C-@' to set the mark.  (On your system
  137. this may be `C-2', `C-SPC', or `NUL'.) Now position the cursor to the
  138. lower-right, just after the `1.354'.  You have now defined this region
  139. as an Emacs "rectangle."  Still in the Info buffer, type `M-# r'.  This
  140. command (`calc-grab-rectangle') will pop you back into the Calculator,
  141. with the contents of the rectangle you specified in the form of a
  142. matrix.
  143.      1:  [ [ 1.34, 0.234 ]
  144.            [ 1.41, 0.298 ]
  145.            ...
  146. (You may wish to use `v .' mode to abbreviate the display of this large
  147. matrix.)
  148.    We want to treat this as a pair of lists.  The first step is to
  149. transpose this matrix into a pair of rows.  Remember, a matrix is just
  150. a vector of vectors.  So we can unpack the matrix into a pair of row
  151. vectors on the stack.
  152.      1:  [ [ 1.34,  1.41,  1.49,  ... ]     2:  [1.34, 1.41, 1.49, ... ]
  153.            [ 0.234, 0.298, 0.402, ... ] ]   1:  [0.234, 0.298, 0.402, ... ]
  154.          .                                      .
  155.      
  156.          v t                                    v u
  157. Let's store these in quick variables 1 and 2, respectively.
  158.      1:  [1.34, 1.41, 1.49, ... ]        .
  159.          .
  160.      
  161.          t 2                             t 1
  162. (Recall that `t 2' is a variant of `s 2' that removes the stored value
  163. from the stack.)
  164.    In a least squares fit, the slope `m' is given by the formula
  165.      m = (N sum(x y) - sum(x) sum(y)) / (N sum(x^2) - sum(x)^2)
  166. where `sum(x)' represents the sum of all the values of `x'.  While
  167. there is an actual `sum' function in Calc, it's easier to sum a vector
  168. using a simple reduction.  First, let's compute the four different sums
  169. that this formula uses.
  170.      1:  41.63                 1:  98.0003
  171.