calc: Basic Algebra Tutorial

 
 3.5.1 Basic Algebra
 -------------------
 
 If you enter a formula in Algebraic mode that refers to variables, the
 formula itself is pushed onto the stack.  You can manipulate formulas as
 regular data objects.
 
      1:  2 x^2 - 6       1:  6 - 2 x^2       1:  (3 x^2 + y) (6 - 2 x^2)
          .                   .                   .
 
          ' 2x^2-6 <RET>        n                   ' 3x^2+y <RET> *
 
    (•) *Exercise 1.*  Do ‘' x <RET> Q 2 ^’ and ‘' x <RET> 2 ^ Q’ both
 wind up with the same result (‘x’)?  Why or why not?  See1 Algebra
 Answer 1.  (•)
 
    There are also commands for doing common algebraic operations on
 formulas.  Continuing with the formula from the last example,
 
      1:  18 x^2 - 6 x^4 + 6 y - 2 y x^2    1:  (18 - 2 y) x^2 - 6 x^4 + 6 y
          .                                     .
 
          a x                                   a c x <RET>
 
 First we “expand” using the distributive law, then we “collect” terms
 involving like powers of ‘x’.
 
    Let’s find the value of this expression when ‘x’ is 2 and ‘y’ is
 one-half.
 
      1:  17 x^2 - 6 x^4 + 3      1:  -25
          .                           .
 
          1:2 s l y <RET>               2 s l x <RET>
 
 The ‘s l’ command means “let”; it takes a number from the top of the
 stack and temporarily assigns it as the value of the variable you
 specify.  It then evaluates (as if by the ‘=’ key) the next expression
 on the stack.  After this command, the variable goes back to its
 original value, if any.
 
    (An earlier exercise in this tutorial involved storing a value in the
 variable ‘x’; if this value is still there, you will have to unstore it
 with ‘s u x <RET>’ before the above example will work properly.)
 
    Let’s find the maximum value of our original expression when ‘y’ is
 one-half and ‘x’ ranges over all possible values.  We can do this by
 taking the derivative with respect to ‘x’ and examining values of ‘x’
 for which the derivative is zero.  If the second derivative of the
 function at that value of ‘x’ is negative, the function has a local
 maximum there.
 
      1:  17 x^2 - 6 x^4 + 3      1:  34 x - 24 x^3
          .                           .
 
          U <DEL>  s 1                  a d x <RET>   s 2
 
 Well, the derivative is clearly zero when ‘x’ is zero.  To find the
 other root(s), let’s divide through by ‘x’ and then solve:
 
      1:  (34 x - 24 x^3) / x    1:  34 - 24 x^2
          .                          .
 
          ' x <RET> /                  a x
 
      1:  0.70588 x^2 = 1        1:  x = 1.19023
          .                          .
 
          0 a =  s 3                 a S x <RET>
 
 Now we compute the second derivative and plug in our values of ‘x’:
 
      1:  1.19023        2:  1.19023         2:  1.19023
          .              1:  34 x - 24 x^3   1:  34 - 72 x^2
                             .                   .
 
          a .                r 2                 a d x <RET> s 4
 
 (The ‘a .’ command extracts just the righthand side of an equation.
 Another method would have been to use ‘v u’ to unpack the equation
 ‘x = 1.19’ to ‘x’ and ‘1.19’, then use ‘M-- M-2 <DEL>’ to delete the
 ‘x’.)
 
      2:  34 - 72 x^2   1:  -68.         2:  34 - 72 x^2     1:  34
      1:  1.19023           .            1:  0                   .
          .                                  .
 
          <TAB>               s l x <RET>        U <DEL> 0             s l x <RET>
 
 The first of these second derivatives is negative, so we know the
 function has a maximum value at ‘x = 1.19023’.  (The function also has a
 local _minimum_ at ‘x = 0’.)
 
    When we solved for ‘x’, we got only one value even though ‘0.70588
 x^2 = 1’ is a quadratic equation that ought to have two solutions.  The
 reason is that ‘a S’ normally returns a single “principal” solution.  If
 it needs to come up with an arbitrary sign (as occurs in the quadratic
 formula) it picks ‘+’.  If it needs an arbitrary integer, it picks zero.
 We can get a full solution by pressing ‘H’ (the Hyperbolic flag) before
 ‘a S’.
 
      1:  0.70588 x^2 = 1    1:  x = 1.19023 s1      1:  x = -1.19023
          .                      .                       .
 
          r 3                    H a S x <RET>  s 5        1 n  s l s1 <RET>
 
 Calc has invented the variable ‘s1’ to represent an unknown sign; it is
 supposed to be either +1 or -1.  Here we have used the “let” command to
 evaluate the expression when the sign is negative.  If we plugged this
 into our second derivative we would get the same, negative, answer, so
 ‘x = -1.19023’ is also a maximum.
 
    To find the actual maximum value, we must plug our two values of ‘x’
 into the original formula.
 
      2:  17 x^2 - 6 x^4 + 3    1:  24.08333 s1^2 - 12.04166 s1^4 + 3
      1:  x = 1.19023 s1            .
          .
 
          r 1 r 5                   s l <RET>
 
 (Here we see another way to use ‘s l’; if its input is an equation with
 a variable on the lefthand side, then ‘s l’ treats the equation like an
 assignment to that variable if you don’t give a variable name.)
 
    It’s clear that this will have the same value for either sign of
 ‘s1’, but let’s work it out anyway, just for the exercise:
 
      2:  [-1, 1]              1:  [15.04166, 15.04166]
      1:  24.08333 s1^2 ...        .
          .
 
        [ 1 n , 1 ] <TAB>            V M $ <RET>
 
 Here we have used a vector mapping operation to evaluate the function at
 several values of ‘s1’ at once.  ‘V M $’ is like ‘V M '’ except that it
 takes the formula from the top of the stack.  The formula is interpreted
 as a function to apply across the vector at the next-to-top stack level.
 Since a formula on the stack can’t contain ‘$’ signs, Calc assumes the
 variables in the formula stand for different arguments.  It prompts you
 for an “argument list”, giving the list of all variables in the formula
 in alphabetical order as the default list.  In this case the default is
 ‘(s1)’, which is just what we want so we simply press <RET> at the
 prompt.
 
    If there had been several different values, we could have used
 ‘V R X’ to find the global maximum.
 
    Calc has a built-in ‘a P’ command that solves an equation using
 ‘H a S’ and returns a vector of all the solutions.  It simply automates
 the job we just did by hand.  Applied to our original cubic polynomial,
 it would produce the vector of solutions ‘[1.19023, -1.19023, 0]’.
 (There is also an ‘a X’ command which finds a local maximum of a
 function.  It uses a numerical search method rather than examining the
 derivatives, and thus requires you to provide some kind of initial guess
 to show it where to look.)
 
    (•) *Exercise 2.*  Given a vector of the roots of a polynomial (such
 as the output of an ‘a P’ command), what sequence of commands would you
 use to reconstruct the original polynomial?  (The answer will be unique
 to within a constant multiple; choose the solution where the leading
 coefficient is one.)  See2 Algebra Answer 2.  (•)
 
    The ‘m s’ command enables Symbolic mode, in which formulas like
 ‘sqrt(5)’ that can’t be evaluated exactly are left in symbolic form
 rather than giving a floating-point approximate answer.  Fraction mode
 (‘m f’) is also useful when doing algebra.
 
      2:  34 x - 24 x^3        2:  34 x - 24 x^3
      1:  34 x - 24 x^3        1:  [sqrt(51) / 6, sqrt(51) / -6, 0]
          .                        .
 
          r 2  <RET>     m s  m f    a P x <RET>
 
    One more mode that makes reading formulas easier is Big mode.
 
                     3
      2:  34 x - 24 x
 
            ____   ____
           V 51   V 51
      1:  [-----, -----, 0]
             6     -6
 
          .
 
          d B
 
    Here things like powers, square roots, and quotients and fractions
 are displayed in a two-dimensional pictorial form.  Calc has other
 language modes as well, such as C mode, FORTRAN mode, TeX mode and LaTeX
 mode.
 
      2:  34*x - 24*pow(x, 3)               2:  34*x - 24*x**3
      1:  {sqrt(51) / 6, sqrt(51) / -6, 0}  1:  /sqrt(51) / 6, sqrt(51) / -6, 0/
          .                                     .
 
          d C                                   d F
 
      3:  34 x - 24 x^3
      2:  [{\sqrt{51} \over 6}, {\sqrt{51} \over -6}, 0]
      1:  {2 \over 3} \sqrt{5}
          .
 
          d T   ' 2 \sqrt{5} \over 3 <RET>
 
 As you can see, language modes affect both entry and display of
 formulas.  They affect such things as the names used for built-in
 functions, the set of arithmetic operators and their precedences, and
 notations for vectors and matrices.
 
    Notice that ‘sqrt(51)’ may cause problems with older implementations
 of C and FORTRAN, which would require something more like ‘sqrt(51.0)’.
 It is always wise to check over the formulas produced by the various
 language modes to make sure they are fully correct.
 
    Type ‘m s’, ‘m f’, and ‘d N’ to reset these modes.  (You may prefer
 to remain in Big mode, but all the examples in the tutorial are shown in
 normal mode.)
 
    What is the area under the portion of this curve from ‘x = 1’ to ‘2’?
 This is simply the integral of the function:
 
      1:  17 x^2 - 6 x^4 + 3     1:  5.6666 x^3 - 1.2 x^5 + 3 x
          .                          .
 
          r 1                        a i x
 
 We want to evaluate this at our two values for ‘x’ and subtract.  One
 way to do it is again with vector mapping and reduction:
 
      2:  [2, 1]            1:  [12.93333, 7.46666]    1:  5.46666
      1:  5.6666 x^3 ...        .                          .
 
         [ 2 , 1 ] <TAB>          V M $ <RET>                  V R -
 
    (•) *Exercise 3.*  Find the integral from 1 to ‘y’ of ‘x sin(pi x)’
 (where the sine is calculated in radians).  Find the values of the
 integral for integers ‘y’ from 1 to 5.  See3 Algebra Answer 3.  (•)
 
    Calc’s integrator can do many simple integrals symbolically, but many
 others are beyond its capabilities.  Suppose we wish to find the area
 under the curve ‘sin(x) ln(x)’ over the same range of ‘x’.  If you
 entered this formula and typed ‘a i x <RET>’ (don’t bother to try this),
 Calc would work for a long time but would be unable to find a solution.
 In fact, there is no closed-form solution to this integral.  Now what do
 we do?
 
    One approach would be to do the integral numerically.  It is not hard
 to do this by hand using vector mapping and reduction.  It is rather
 slow, though, since the sine and logarithm functions take a long time.
 We can save some time by reducing the working precision.
 
      3:  10                  1:  [1, 1.1, 1.2,  ...  , 1.8, 1.9]
      2:  1                       .
      1:  0.1
          .
 
       10 <RET> 1 <RET> .1 <RET>        C-u v x
 
 (Note that we have used the extended version of ‘v x’; we could also
 have used plain ‘v x’ as follows: ‘v x 10 <RET> 9 + .1 *’.)
 
      2:  [1, 1.1, ... ]              1:  [0., 0.084941, 0.16993, ... ]
      1:  ln(x) sin(x)                    .
          .
 
          ' sin(x) ln(x) <RET>  s 1    m r  p 5 <RET>   V M $ <RET>
 
      1:  3.4195     0.34195
          .          .
 
          V R +      0.1 *
 
 (If you got wildly different results, did you remember to switch to
 Radians mode?)
 
    Here we have divided the curve into ten segments of equal width;
 approximating these segments as rectangular boxes (i.e., assuming the
 curve is nearly flat at that resolution), we compute the areas of the
 boxes (height times width), then sum the areas.  (It is faster to sum
 first, then multiply by the width, since the width is the same for every
 box.)
 
    The true value of this integral turns out to be about 0.374, so we’re
 not doing too well.  Let’s try another approach.
 
      1:  ln(x) sin(x)    1:  0.84147 x + 0.11957 (x - 1)^2 - ...
          .                   .
 
          r 1                 a t x=1 <RET> 4 <RET>
 
 Here we have computed the Taylor series expansion of the function about
 the point ‘x=1’.  We can now integrate this polynomial approximation,
 since polynomials are easy to integrate.
 
      1:  0.42074 x^2 + ...    1:  [-0.0446, -0.42073]      1:  0.3761
          .                        .                            .
 
          a i x <RET>            [ 2 , 1 ] <TAB>  V M $ <RET>         V R -
 
 Better!  By increasing the precision and/or asking for more terms in the
 Taylor series, we can get a result as accurate as we like.  (Taylor
 series converge better away from singularities in the function such as
 the one at ‘ln(0)’, so it would also help to expand the series about the
 points ‘x=2’ or ‘x=1.5’ instead of ‘x=1’.)
 
    (•) *Exercise 4.*  Our first method approximated the curve by
 stairsteps of width 0.1; the total area was then the sum of the areas of
 the rectangles under these stairsteps.  Our second method approximated
 the function by a polynomial, which turned out to be a better
 approximation than stairsteps.  A third method is “Simpson’s rule”,
 which is like the stairstep method except that the steps are not
 required to be flat.  Simpson’s rule boils down to the formula,
 
      (h/3) * (f(a) + 4 f(a+h) + 2 f(a+2h) + 4 f(a+3h) + ...
                    + 2 f(a+(n-2)*h) + 4 f(a+(n-1)*h) + f(a+n*h))
 
 where ‘n’ (which must be even) is the number of slices and ‘h’ is the
 width of each slice.  These are 10 and 0.1 in our example.  For
 reference, here is the corresponding formula for the stairstep method:
 
      h * (f(a) + f(a+h) + f(a+2h) + f(a+3h) + ...
                + f(a+(n-2)*h) + f(a+(n-1)*h))
 
    Compute the integral from 1 to 2 of ‘sin(x) ln(x)’ using Simpson’s
 rule with 10 slices.  See4 Algebra Answer 4.  (•)
 
    Calc has a built-in ‘a I’ command for doing numerical integration.
 It uses “Romberg’s method”, which is a more sophisticated cousin of
 Simpson’s rule.  In particular, it knows how to keep refining the result
 until the current precision is satisfied.
 
    Aside from the commands we’ve seen so far, Calc also provides a large
 set of commands for operating on parts of formulas.  You indicate the
 desired sub-formula by placing the cursor on any part of the formula
 before giving a “selection” command.  Selections won’t be covered in the
 tutorial; SeeSelecting Subformulas, for details and examples.