Next: About this document Up: Some Maple Questions and Previous: Question 10: I

Question 11: I want to plot the following piecewise defined function in Maple but I always seem to get an error. Let if and if . I defined as a Maple procedure thus


f := proc(x,y) if x>y then erf(x-y) else erf(y-x) fi end;

But when I try to plot this I get


> plot3d( f(x,y), x=-2..2, y=-2..2 );
Error, (in f) cannot evaluate boolean


Answer: The plot functions have normal evaluation rules. What happens then is that before plot3d is called, is evaluated at symbolic and . I.e. we get


> f(x,y);
Error, (in f) cannot evaluate boolean

Maple gives an error because it can't decide if when and have no values. There are two ways of using the plotting commands plot and plot3d as illustrated in the following example for plotting the binomial function.


plot3d( binomial(n,k), n=-3..3, k=-3..3 );
plot3d( binomial, -3..3, -3..3 );

Most users are familiar with the first way, which is to plot a formula in two variables, in this case and . The second way allows you to plot a function given by a Maple procedure or an operator expression. Therefore the solution to the problem is


plot3d( f, -2..2, -2..2 );

Alternatively, one can use quotes to prevent from being evaluated before the plot routine is called thus


plot3d( 'f(x,y)', x=-2..2, y=-2..2 );

Note the frustrated user tried to get around the problem by trying to express this way


f := proc(x,y) if signum(x-y)=1 then erf(x-y) else erf(y-x) fi end;

This avoids the error but produced a different surprise. This ends up always plotting because


> signum(x-y);
                                 signum(x - y)

cannot be evaluted to for symbolic and hence the if test always returns false !!


> if signum(x-y) = 1 then true else false fi;

                                     false

> f(x,y);
                                  - erf(x - y)

Note Maple simplified to . The solution again is to simply plot the function directly plot3d( f, -2..2, -2..2 ); Of course, since we could have expressed as a formula


plot3d( signum(x-y)*erf(x-y), x=-2..2, y=-2..2 );


gagin@thsun1.jinr.ru