Next: List Tutorial Exercise 9, Previous: List Tutorial Exercise 7, Up: Answers to Exercises [Contents][Index]

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.