solve
solve one or more equations
Calling Sequence
Parameters
Options
Basic Information
Description
Calling Sequence Shortcuts
Output
Additional Information
Examples
Other Maple solvers
solve(equations, variables, options)
equations
-
expression, equation, or inequality; or set, list, or rtable of expressions, equations, or inequalities; or an equation (or relation) of rtables
variables
(optional) name or set or list of names; unknown(s) for which to solve
options
(optional) a sequence of equations option=value.
Options may be supplied as listed below, or in all lower-case.
allsolutions
allsolutions = truefalse
Return more solutions for non-algebraic equations (default is false).
conditionalsolutions
conditionalsolutions = truefalse
Return piecewise conditional solutions (default is true).
dropmultiplicity
dropmultiplicity = truefalse
Do not return multiple identical solutions of polynomials (default is false).
explicit
explicit = {posint, truefalse}
Express RootOfs in solution as radicals when possible (default is false).
maxsols
maxsols = {posint, pos_infinity}
Limit the number of solutions returned (default is 100).
tryhard
tryhard = truefalse
Use radical form for quadratic solutions (default is false).
useassumptions
useassumptions = truefalse
Convert assumptions into additional inequalities (default is false).
useunits
useunits = {truefalse, list(variable::unit)}
Do preprocessing to handle units in the solve input. By default solve does this automatically if it detects units. Set this option to true to force preprocessing if detection fails. Set this option to false to have units treated as symbols. The default behavior is that solve analyzes the input to determine what units are associated with the symbols in the input. To aid that analysis or to override the units it finds by other units, units can be specified in this option as a list of variable::unit pairs.
This help page contains complete information about the solve command. For basic information on the solve command, see the solve help page.
The solve command solves one or more equations or inequalities for the specified unknowns. The unknowns may be names, including indexed names (though for efficiency reasons, indexed names should be avoided when possible), or functions. Both indexed names and functions are considered to be independent of each other and of all other unknowns.
To find parameterized solutions of the equations, specify variables that are functions of a free variable.
If you use the abs command, the solve command assumes that the argument to abs is real-valued.
In the equations parameter, if you specify an expression expr, Maple interprets it as the equation expr=0.
If you do not specify the variables parameter, Maple solves for all the variables that appear in equations, that is, indets(equations, name).
The data type of the solution depends on the data type of the first (equations) and second (unknowns for which to solve) arguments.
- If the second argument is a name and the first argument is an equation, then the solution is an expression sequence.
- If the second argument is a name and the first argument is a set or list of equations, then the solution is comprised of sets.
- If the second argument is a list of names, then for any type of first argument, the solution is a list of lists.
- If there is no second argument, then the solution for a single variable equation is an expression sequence, and the solution for a multi variable equation or a set or list of equations is comprised of sets.
If the solve command does not find any solutions, then it returns the empty sequence (NULL) (instead of an expression sequence or sets) or empty list (instead of a list of lists). This means that there are no solutions or the solve command cannot find the solutions.
Missed Solutions
If the solve command cannot confirm that the solution set returned is complete, it sets the global variable _SolutionsMayBeLost to true and issues a warning.
Conditional Solutions
The solve command can return conditional solutions to many types of parametric equations and inequalities. Systems of linear inequalities in one or more variables are fully supported, as well as relations involving some types of simple functions of linear expressions. Conditional solutions are returned in the form of piecewise functions whose conditions depend upon the values of the parameters. Each output of the piecewise function will be a list of lists or sets, identifying all of the solutions that are valid under the corresponding condition. If a branch of the piecewise function contains no solutions, then its output will be an empty list.
To prevent solve from returning conditional solutions, use the solve option conditionalsolutions=false. In this case, if solve encounters a conditional solution, it will be discarded, a warning message will be displayed, and only solutions that hold unconditionally, if any, will be returned. You can also set the environment variable _EnvConditionalSolutions := false.
Controlling the Form of Solutions
A single quadratic equation with constant coefficients in one variable is solved directly by substitution into the quadratic formula. To attempt to express solutions in the common radical form, which may take a longer time to process, use the option tryhard=true. You can also set the environment variable _EnvTryHard := true.
In general, explicit solutions in terms of radicals do not exist for polynomial equations of degree greater than 4. The solve command returns explicit solutions for low degree polynomial equations (by default, degree less than 4). For higher degree equations, implicit solutions are given in terms of RootOf.
To control the form of solutions returned, use the option explicit. The behavior is described in the following table.
explicit=Value
Behavior
not given
return explicit solutions for polynomial equations of degree less than or equal to 3
true
return explicit solutions for polynomial equations of degree less than or equal to 4
false
return explicit solutions for polynomial equation solutions that are rational
numeric
return explicit solutions for polynomial equations with a length less than the numeric value specified
You can also control this by setting the environment variable _EnvExplicit.
Controlling the Number of Solutions
By default, solve may return multiple identical solutions to a polynomial (i.e. the roots of multiplicity greater than one). To have solve return only one of each of these multiple roots use the option dropmultiplicity=true or set the environment variable _EnvDropMultiplicity := true.
To control the total number of solutions returned, use the option maxsols. This integer specifies the maximum number of solutions generated inside the solve engine. The default value is 100. You can set the environment variable _MaxSols instead of using the option to the solve command, but take case, because other commands may also be effected by environment variables.
The solve command returns all solutions for polynomial equations. In general for transcendental equations, the solve command returns only one solution, but does not set _SolutionsMayBeLost to true. To force the solve command to return the entire set of solutions for all inverse transcendental functions, provide the solve option allsolutions = true or set the environment variable _EnvAllSolutions := true.
In the solution, Maple may generate variables that take numeric values. Normally such variables are named with the prefix _Z for integer values, _NN for non-negative integer values, and _B for binary values (0 and 1). If other conditions on these values apply, then the conditions will be converted to assumptions and simplified, if possible. Note that if the solution includes one of these variables, you can use about to find out information on the variable. If such conditions are sufficient to allow Maple to determine that the variable may only take on a finite number of values, then the full list of solutions can be requested by using the option explicit=true.
Using Assumptions
In most cases, solve ignores assumptions on the variables for which it is solving. However, the useassumptions option may be supplied to force solve to inspect any assumptions on the variables, and extract inequalities that it will add to the input. For example:
solve(x^2-1,{x}, useassumptions) assuming x>0;
x=1
is equivalent to:
solve({x^2-1, x>0},{x});
but, in some case, the user may find the former more convenient. The useassumptions option will not make use of any assumptions that cannot be rewritten as polynomial inequations. In particular, it does not process assumptions restricting the domain:
solve(x^2+1,{x}, useassumptions) assuming x::real;
Warning, solve may not respect assumed property 'real' on 'x'.
x=I,x=−I
instead one should use RealDomain[solve] or isolve for solutions over the real numbers or over the integers, respectively. SolveTools[SemiAlgebraic] or SolveTools[PolynomialSystem] (with the domain=real option) may also be helpful for finding real solutions.
Further information is available for the subtopics solve/subtopic where subtopic is one of
float
function
identity
ineq
linear
parametric
parametrized
radical
scalar
series
symbolic
system
Simple Examples
Solving an implicit equation
solve⁡2⁢y−x−12=2,y
12⁢x2−x+32
Solving a quadratic equation
solve⁡x2−x=2025,x
12+81012,12−81012
Specifying variables
To ignore parameters, specify the variables for which to solve.
solve⁡a2⁢c2−4⁢b2b=a6⁢b−4⁢a3⁢b,c
c=b⁢a3−2a,c=−b⁢a3−2a
Solving a set of equations
When the solved for variables are provided as set, the solutions to the set of equations are returned as sets of equation sequences.
solve⁡x+y<10,x2=9,x,y
x=−3,y<13,x=3,y<7
Solving trigonometric equations
solve⁡cos⁡x+y=9,x
π−arccos⁡y−9
Solving inequations
solve⁡5<x2+x,x
−∞,−12−212,−12+212,∞
solve⁡x2⁢y2=0,x−y=1
x=0,y=−1,x=1,y=0
You can add inequations to filter out unwanted solutions. In this case, the previous call to solve has two solutions. Adding x≠0 filters out one of these solutions.
solve⁡x≠0,x2⁢y2=0,x−y=1
x=1,y=0
Examples Involving Units
solve⁡x2=4⁢Unit⁡m2,x
x=2⁢m,x=−2⁢m
solve⁡x2=4⁢Unit⁡m2,x,useunits=false
x=2⁢m2,x=−2⁢m2
solve⁡x−y,x2=4⁢Unit⁡m2
x=2⁢m,y=2⁢m,x=−2⁢m,y=−2⁢m
solve⁡x−y,x2=4⁢Unit⁡m2,useunits=x::Unit⁡ft,y::Unit⁡cm
x=2500381⁢ft,y=200⁢cm,x=−2500381⁢ft,y=−200⁢cm
Units can be specified for parameters
solve⁡x−y,x2=a2⁢Unit⁡m2,x,y
x=a⁢m,y=a⁢m,x=−a⁢m,y=−a⁢m
solve⁡x−y,x2=a2⁢Unit⁡m2,x,y,useunits=a::Unit⁡1m
x=a1m,y=a1m,x=−a1m,y=−a1m
Ignoring Multiple Identical Solutions
solve⁡x4,x
0,0,0,0
solve⁡x4,x,dropmultiplicity
0
Evaluating Solutions to Floating-Point Values and Verifying Solutions
eq≔x4−5⁢x2+6⁢x=2
solve⁡eq,x
3−1,−1−3,1,1
solutions≔solve⁡eq,x
solutions≔3−1,−1−3,1,1
solutions1
3−1
To convert to floating-point values, use the evalf command.
evalf⁡solutions
0.732050808,−2.732050808,1.,1.
solutions≔1,−1−3,3−1
1
To verify the solution, use the eval command.
eval⁡eq,x=solutions1
2=2
Implicit Solutions
solve⁡x4+x+1,x
RootOf⁡_Z4+_Z+1,index=1,RootOf⁡_Z4+_Z+1,index=2,RootOf⁡_Z4+_Z+1,index=3,RootOf⁡_Z4+_Z+1,index=4
evalf⁡
−0.7271360845−0.4300142883⁢I,−0.7271360845+0.4300142883⁢I,0.7271360845−0.9340992895⁢I,0.7271360845+0.9340992895⁢I
To find an explicit symbolic representation for the roots, use map with the allvalues command. This applies allvalues to each solution and is generally better than applying allvalues directly to all the solutions at once.
solve⁡x4−2⁢x3+2,x
RootOf⁡_Z4−2⁢_Z3+2,index=1,RootOf⁡_Z4−2⁢_Z3+2,index=2,RootOf⁡_Z4−2⁢_Z3+2,index=3,RootOf⁡_Z4−2⁢_Z3+2,index=4
map⁡allvalues,
12−I2−4+2⁢I2,12−I2+4+2⁢I2,12+I2−4−2⁢I2,12+I2+4−2⁢I2
solve⁡x2⁢y2−b,x2−y2−a,x,y
x=RootOf⁡_Z2−RootOf⁡_Z4+a⁢_Z2−b2−a,y=RootOf⁡_Z4+a⁢_Z2−b
x=a2+a2+4⁢b2,y=2⁢a2+4⁢b−2⁢a2,x=−a2+a2+4⁢b2,y=2⁢a2+4⁢b−2⁢a2,x=a2+a2+4⁢b2,y=−2⁢a2+4⁢b−2⁢a2,x=−a2+a2+4⁢b2,y=−2⁢a2+4⁢b−2⁢a2,x=a2−a2+4⁢b2,y=−2⁢a2+4⁢b−2⁢a2,x=−a2−a2+4⁢b2,y=−2⁢a2+4⁢b−2⁢a2,x=a2−a2+4⁢b2,y=−−2⁢a2+4⁢b−2⁢a2,x=−a2−a2+4⁢b2,y=−−2⁢a2+4⁢b−2⁢a2
Assigning Solutions to Corresponding Names
equations≔3⁢u+v=3,u+v+w=1,u−2⁢v−w=0
equations≔3⁢u+v=3,u−2⁢v−w=0,u+v+w=1
solutions≔solve⁡equations
solutions≔u=45,v=35,w=−25
Check solutions.
eval⁡equations,solutions
0=0,1=1,3=3
Select one solution.
eval⁡u,solutions
45
Assign all solutions.
assign⁡solutions
u
Finding All Solutions
solve⁡sin⁡x=cos⁡x−1,x,allsolutions
2⁢π⁢_Z2~,−12⁢π+2⁢π⁢_Z1~
r≔solve⁡cos⁡x,x,allsolutions
r≔12⁢π+π⁢_Z3~
Substitute 3 for _Z3~ in r.
eval⁡r,op⁡indets⁡r=3
7⁢π2
Finding All Solutions with Restrictions
solve⁡sin⁡x⁢cos⁡x=0,0<x,x<10,x,allsolutions
x=π⁢_Z5~,x=12⁢π+π⁢_Z4~
about⁡_Z4
Originally _Z4, renamed _Z4~: is assumed to be: AndProp(integer,RealRange(0,2))
about⁡_Z5
Originally _Z5, renamed _Z5~: is assumed to be: AndProp(integer,RealRange(1,3))
solve⁡sin⁡x⁢cos⁡x=0,0<x,x<10,x,allsolutions,explicit
x=π,x=2⁢π,x=3⁢π,x=π2,x=3⁢π2,x=5⁢π2
Vector/Matrix/Array Equations
equations can be given entry-wise in terms of any rtable
solve⁡x+1|y+1,z+2|w+2=1|1,2|2
a constant is interpreted as a constant rtable of the right dimensions
solve⁡x+1|y+1,z+2|w+2=1
all other dimension mismatches will produce an error
solve⁡x+1|y+1,z+2|w+2=1,2
Error, (in SolveTools:-rtableToEquations) invalid input: left- and right-hand sides have incompatible dimensions
While it is possible to solve linear equations as solve⁡M·v=b, it advisable to use LinearAlgebra:-LinearSolve instead.
restart
solve⁡b<a⁢x,x
x=xb<0∧a=0ba<x0<ax<baa<0otherwise
solve⁡2<abs⁡x+a+abs⁡x+b,x
−a2−b2+1<x,x<−a2−b2−1−2+b≤a∧a≤2+b−b≤x,x<−a,−a≤x,x<−ba<−2+b−a≤x,x<−b,−b≤x,x<−a2+b<aotherwise
solve⁡x−1⁢x−2⁢x−3=0,a⁢x−1<2+b⁢x−1,x
x=3,x=2,x=1a<1+bx=2,x=11+b≤a∧a<2+bx=1otherwise
solve⁡x−1⁢x−2⁢x−3=0,a⁢x−1<2+b⁢x−1,x,conditionalsolutions=false
Warning, one or more conditional solutions have been discarded
dsolve - solve an ordinary differential equation (ODE) or system of ODEs
fsolve - solve equations and inequalities using numeric methods
intsolve - solve a linear integral equation
isolve - solve equations for integer solutions
Groebner[Solve] - preprocess an algebraic system before solving with the solve command (to solve using Groebner methods)
LinearAlgebra[LinearSolve] - solve a linear system A . x = b
msolve - solve equations in Z mod m
pdsolve - solve a partial differential equation (PDE) or system of PDEs
rsolve - solve a recurrence equation
SolveTools - solve a system of algebraic equations using low-level commands
See Also
allvalues
assign
eval
evalf
Groebner
indets
invfunc
isolate
match
op
RootOf
simplex
Download Help Document