solve

The
solve command in Maple is used, of course, for solving equations and systems of equations.

An equation in Maple is an object which contains an equals sign -- on each side of the equals sign must be a Maple
expression (not a function). At least one of the expressions in an equation must contain at least one variable. Some examples of equations are:

x^2+5*x=2
3*x+4*y=5*z
1/a + 1/b = 1/c
x^2=sin(x)

and so on. An equation can be assigned to a name, as in:

>   restart;

>   eqn:=x^2+5*x=2;

eqn := x^2+5*x = 2

Then, you can use the Maple commands lhs (for "left-hand side") and rhs (for "right-hand side") to specify the two expressions in the equation, as follows:

>   lhs(eqn);

x^2+5*x


Using solve to solve a single equation: The syntax of solve for one equation is the standard Maple syntax:  

solve(what,how);

In place of "what" goes the equation to be solved (or the name of the equation). "How" in the case of the solve command means "for what variable". In some of the examples above, there is more than one variable, and it is necessary to tell Maple which variable it should solve for. So, examples of valid solve statements would be:

>   solve(1/a+1/b=1/c,b);

a*c/(-c+a)

>   solve(eqn,x);

-5/2+1/2*33^(1/2), -5/2-1/2*33^(1/2)

In this second example, we used the name of the equation instead of typing it out again.


What solve does: The solve command attempts to apply the rules of algebra to find an expression which, when substituted for the variable, will satisfy the equation. Solve thus returns "exact" mathematical answers, rather than numerical approximations (you can see this in the two examples above). If the logarithm of 17 appears in the solution to the equation being solved, solve will print out ln(17) rather than its decimal equivalent.

Solve knows that the number of roots of a polynomial equation is equal to its degree. It also knows the quadratic, cubic and quartic formulas, and that there is no general formula for the roots of polynomials of degree 5 or higher. Thus, solve will report all of the roots of a polynomial if it can find them. For transcendental (i.e., non-polynomial) equations, solve will attempt to find a solution, but will not attempt to find all solutions (in fact, many transcendental equations have an infinite number of solutions -- think of the equation sin(x)=exp(-x) -- so it is a good thing that Maple does not attempt to find them all).

The result of solve:  Assuming you have input the correct syntax, the result of the solve command will be one of the following:

(a) a solution (or solutions) of the equation (which may contain mysterious special functions from advanced mathematics or substitute expressions), or

(b) nothing.

In case (a), it is important to realize several things: The
solve command simply tells you the answer to the equation. It does not assign the answer to the variable being solved for. For example, in the exchange:

>   solve(x+4=9,x);

5

the variable x has no value after the execution of the solve statement. In general , it is a good idea to assign the result of the solve command to a variable (usually other than the one being solved for). This way, you will have easy access to the solutions for further use (especially if there is more than one).


EXAMPLE:

A falling object is
100-16*t^2 feet above the ground at time t seconds. Its velocity at time t is -32*t feet per second. What is its velocity when it hits the ground?

Solution: First, we need to solve for the time t for which the height is zero. We first define variables h and v to represent the height and velocity:

>   h:=100-16*t^2:  v:=-32*t:


Now we solve for when h=0 --

>   c:=solve(h=0,t);

c := -5/2, 5/2

There are two solutions, and the variable c now stands for the list consisting of the two solutions. To see or use one of the solutions at a time, we can use the expressions c[1] and c[2]. For example, to substitute the second solution into v (which is what the problem asks for), we can enter:

>   subs(t=c[2],v);

-80

So the velocity at impact is 80 feet per second. (See the section on the subs command if you do not understand this last statement).

-----

Some kind of mysterious symbols that can appear come up when you attempt to solve a transcendental equation. This is because Maple knows about several special functions from advanced mathematics, many of which were invented and given names precisely because names were required for the solutions of certain transcendental equations (you have already met examples of these, such as the logarithm and the arcsin functions). Often, in this case, using evalf will help, sometimes Maple's help facility will provide useful information concerning the special function being used, and still other times one must resort to the plot-and-fsolve strategy discussed in the next paragraph.

In case (b), when the solve command returns nothing, this means that either there are no solutions of the equation at all, or that there are no solutions that can be expressed algebraically, or that Maple is unable to find the solution. How you respond to this depends on the particular situation. The most common situation is when you are trying to solve one equation containing one variable and no other unspecified variable names. In this case, the best way to proceed is often to plot the left and right hand sides of the equation over various ranges to see if there are any intersection points (whose x-coordinates are solutions of the equation), and, if you find one, to use
fsolve to get decimal approximations of the solutions (see the sections on plot and fsolve for more details). Here is an example:

>   eqn:=sin(x)=exp(-x);

eqn := sin(x) = exp(-x)

>   solve(eqn,x);

RootOf(_Z+ln(sin(_Z)))

This unhelpful output indicates that Maple has given up -- solve cannot find a solution. So, we try plotting:

>   plot({sin(x),exp(-x)},x=-2..2,color=[red,blue],thickness=2);

[Maple Plot]


It appears there is a solution for x between zero and one -- so we try fsolving:

>   fsolve(eqn,x,x=0..1);

.5885327440

>   c:=%; sin(c),exp(-c);

c := .5885327440

.5551412218, .5551412217

So we have found a solution of the equation (to about 10 decimal places).


Using solve for systems of equations:  The solve command can also be used for solving several simultaneous equations for several unknowns. The most important thing to remember when dealing with systems is that the basic syntax of the solve statement solve(what,how); does not change -- since the "what" is now a collection of equations, and the "how" is a set of variables to solve for, some grouping symbols must be used so that Maple will know where the equations stop and the variables start. Maple syntax uses braces {  } for this purpose. For example, the following statement solves a pair of linear equations for their unknowns:

>   solve({3*x+2*y=5, x-4*y=7}, {x,y});

{y = -8/7, x = 17/7}

Within the braces, the equations and variables must be separated by commas.

As when one solves a single equation, the equations in a system can be referred to by name -- each equation can have its own name, or the whole collection can have one name:

>   eqn1:=x+y=2:  eqn2:=x-y=2:

>   solve({eqn1,eqn2},{x,y});

{y = 0, x = 2}

>   eqns:=x^2-y^2=9, x^2+y^2=41;

eqns := x^2-y^2 = 9, x^2+y^2 = 41

>   q:=solve({eqns},{x,y});

q := {x = 5, y = 4}, {y = 4, x = -5}, {x = 5, y = -4}, {y = -4, x = -5}

In this last statement, we have assigned the result to the variable q -- recall again that solve just tells you what the answer is (if it can), it does not change the values of any variables. In this example, q is now a list of four sets .. q[1] is the first set etc. up to q[4]. It is possible to use these sets in conjunction with the subs command, as in

>   subs(q[2],x+y);

-1

This statement substituted the second solution (y=4 and x=-5) into the expression  x+y.  

The same considerations given above about solving one equation apply to systems.  Sometimes, the result will contain special functions from advanced mathematics which may be unfamiliar to you. And sometimes solve will not report any solution, either because there is none or because it is impossible to express the solution precisely in "closed form". The fsolve and evalf commands may be used in this context just as in the single variable context.


Hints, errors, special cases...

1. When working with systems of equations, it is usually a good idea to assign a name to the set of equations you want to solve. This makes your work easier to read. (It also helps avoid the most common syntax error when
solve-ing systems of equations, which is to forget the braces around the list of equations). Example:

>   c:='c';

>   eqns:={a*x+b*y=c,d*x+e*y=f};

c := 'c'

eqns := {a*x+b*y = c, d*x+e*y = f}

>   solve(eqns,{x,y});

{y = (a*f-d*c)/(a*e-d*b), x = -(b*f-c*e)/(a*e-d*b)}

This is also an example where there are many variable names, but we solved for two, because we had two equations.

2. Shortcut #1: If (one of) your equation(s) is of the form "expression=0", it is not necessary to include the "=0" part -- Maple will assume that you intend to set any loose expression equal to zero. Example:

>   solve(x^2-5*x,x);

0, 5

3. Shortcut #2: If you are solving n equations (n can be any number at least 1), and there are precisely n variables used in the equations, it is not necessary to specify the variable list (the "how" part) -- Maple will assume that you want to solve for all the variables that are there. Example:

>   solve({x+2=y,x+y=2});

{x = 0, y = 2}

4. It is possible that the number of equations and the number of unknowns can be different. If there are more equations than unknowns, then it is quite likely that there will be no solutions to the system of equations. On the other hand, if there are more unknowns than equations, then it is likely that some of the unknowns will be "free" in the solution -- this means that their values can be specified arbitrarily and the other variables solved for in terms of these. Examples:

>   solve(x+y=2,x);

2-y

>   solve(x+y=2,{x,y});

{y = y, x = 2-y}

In this last output, the equation  "y=y" is how Maple indicates that y is a "free" variable, and x is defined in terms of it.

5. It is possible to use the solve command to solve inequalities as well as equations. Example:

>   solve(x^2+2*x<5);

RealRange(Open(-1-6^(1/2)),Open(-1+6^(1/2)))


You can even combine equations and inequalities:

>   sys:={x^2+y^2<4,x+y=2}:

>   solve(sys,{x,y});

{x = 2-y, 0 < y, y < 2}


6. (Advanced, obscure topic) Solve can also be used to find functions which are defined algebraically in terms of other functions:

>   solve(f(x)^2+2*x=-1,f);

proc (x) RootOf(_Z^2+2*x+1,label = _L1) end proc

Note that the solution(s) are given in the long "proc" form of function definition.

7. The most common error to make when using solve (other than syntax errors) is to have inadvertently given the variable a value in previous work:

>   x:=5:

>   solve(x+4=8,x);

Error, (in solve) a constant is invalid as a variable, 5


8. Online help for solve can be found in the Help Contents browser using the path Mathematics -> Finding Roots -> solve.