Next: List Answer 9, Previous: List Answer 7, Up: Answers to Exercises

#### 3.7.26 List Tutorial Exercise 8

The first step is to build a list of values of ‘`x`’.

         1:  [1, 2, 3, ..., 21]  1:  [0, 1, 2, ..., 20]  1:  [0, 0.25, 0.5, ..., 5]
             .                       .                       .

             v x 21 <RET>              1 -                     4 /  s 1

Next, we compute the Bessel function values.

         1:  [0., 0.124, 0.242, ..., -0.328]
             .

             V M ' besJ(1,$) <RET>

(Another way to do this would be `1 <TAB> V M f j`.)

A way to isolate the maximum value is to compute the maximum using `V R X`, then compare all the Bessel values with that maximum.

         2:  [0., 0.124, 0.242, ... ]   1:  [0, 0, 0, ... ]    2:  [0, 0, 0, ... ]
         1:  0.5801562                      .                  1:  1
             .                                                     .

             <RET> V R X                      V M a =                <RET> V R +    <DEL>

It's a good idea to verify, as in the last step above, that only one value is equal to the maximum. (After all, a plot of ‘`sin(x)`’ might have many points all equal to the maximum value, 1.)

The vector we have now has a single 1 in the position that indicates the maximum value of ‘`x`’. Now it is a simple matter to convert this back into the corresponding value itself.

         2:  [0, 0, 0, ... ]         1:  [0, 0., 0., ... ]    1:  1.75
         1:  [0, 0.25, 0.5, ... ]        .                        .
             .

             r 1                         V M *                    V R +

If `a =` had produced more than one ‘`1`’ value, this method would have given the sum of all maximum ‘`x`’ values; not very useful! In this case we could have used `v m` (`calc-mask-vector`) instead. This command deletes all elements of a “data” vector that correspond to zeros in a “mask” vector, leaving us with, in this example, a vector of maximum ‘`x`’ values.

The built-in `a X` command maximizes a function using more efficient methods. Just for illustration, let's use `a X` to maximize ‘`besJ(1,x)`’ over this same interval.

         2:  besJ(1, x)                 1:  [1.84115, 0.581865]
         1:  [0 .. 5]                       .
             .

         ' besJ(1,x), [0..5] <RET>            a X x <RET>

The output from `a X` is a vector containing the value of ‘`x`’ that maximizes the function, and the function's value at that maximum. As you can see, our simple search got quite close to the right answer.