In the two previous sections, we've seen examples of how and when to use labels in Maple and how to choose between functions and expressions. In this section we consider the following situation. You have a problem whose solution requires several steps, but you aren't really interested in seeing the intermediate results. An efficient and elegant solution of problems like this can often be obtained by nesting Maple commands.
For example, in an earlier example we solved for the x values where
the second derivative of a function vanished with the following
command. Since a Maple command diff appears as an argument to
the solve command, we describe such a command as a nested or
compound Maple command.
> solve(diff(f(x),x)=0,x);
An alternative would be to break the calculation up into the following steps.
> f2 := diff(f(x),x,x);
> solve(f2=0,x);
However, this solution requires more typing, including defining a label for the second derivative. If you don't need the second derivative for anything else, then it is wasteful to give it a label and the solution with a nested command is preferred.
The easiest way to build up a nested command is to start from the inside and work out. In the example, you would start with the diff command.
> diff(f(x),x,x);
Next, decide if you want to label this result for later use. If you
only need it as an intermediate result in a longer calculation and not
on its own, start building up a nested command. In the example, we
don't need the second derivative of except to find where it
vanishes so the next step is to add the solve command, using the
diff command as an argument. This leads to the following
command and desired result.
> solve(diff(f(x),x,x)=0,x);
This process of nesting commands can lead to Maple commands that look very complicated, for example the command
> subs(x=1/V,interp(map(s->1/s,V_vals),W_vals,x));
used in the section on labels. We now describe the steps in building up this command.
Recall that we had some data for V and W that we wanted to fit with an expression of the form
The difficulty was that we wanted to use the Maple interp
command, but it would only fit data to polynomial expressions. Note
that the desired expression can be thought of as a polynomial in
, so the first idea is to transform the V values to values of
. This can be done with the following commands. The commands
defining the data as lists are repeated for convenience.
> W_vals := [31.3,11.9,8.0,4.3];
> map(s->1/s,V_vals);
The next step is to use the interp command to fit the modified data. Just modify the last command above, using the map command as the first argument to interp.
> interp(map(s->1/s,V_vals),W_vals,x);
The result is really a polynomial in , so the last step is to
substitute
for x. Again, we just add the subs command on
the outside of the previous command.
> subs(x=1/V,interp(map(s->1/s,V_vals),W_vals,x));
As a final comment, there was no special reason we used x and s as ``dummy'' variables in the command. Any other variable names that we weren't using at the time would have worked.