# Solving Equations

An expression like x^2+2x-7==0 represents an *equation* in the Wolfram Language. You will often need to *solve* equations like this, to find out for what values of x they are true.

Solve[lhs==rhs,x] | solve an equation, giving a list of rules for x |

x/.solution | use the list of rules to get values for x |

expr/.solution | use the list of rules to get values for an expression |

Finding and using solutions to equations.

Solve always tries to give you explicit *formulas* for the solutions to equations. However, it is a basic mathematical result that, for sufficiently complicated equations, explicit algebraic formulas in terms of radicals cannot be given. If you have an algebraic equation in one variable, and the highest power of the variable is at most four, then the Wolfram Language can always give you formulas for the solutions. However, if the highest power is five or more, it may be mathematically impossible to give explicit algebraic formulas for all the solutions.

In addition to being able to solve purely algebraic equations, the Wolfram Language can also solve some equations involving other functions.

It is important to realize that an equation such as actually has an infinite number of possible solutions, in this case differing by multiples of . However, Solve by default returns just one solution, but prints a message telling you that other solutions may exist. You can use Reduce to get more information.

Solve can also handle equations involving symbolic functions. In such cases, it again prints a warning, then gives results in terms of formal inverse functions.

Solve[{lhs_{1}==rhs_{1},lhs_{2}==rhs_{2},…},{x,y,…}] | |

solve a set of simultaneous equations for x, y, … |

Solving sets of simultaneous equations.

You can also use the Wolfram Language to solve sets of simultaneous equations. You simply give the list of equations, and specify the list of variables to solve for.

The Wolfram Language can solve any set of simultaneous *linear* or polynomial equations.

When you are working with sets of equations in several variables, it is often convenient to reorganize the equations by eliminating some variables between them.

If you have several equations, there is no guarantee that there exists *any* consistent solution for a particular variable.

The general question of whether a set of equations has any consistent solution is quite a subtle one. For example, for most values of a, the equations {x==1,x==a} are inconsistent, so there is no possible solution for x. However, if a is equal to 1, then the equations *do* have a solution. Solve is set up to give you *generic* solutions to equations. It discards any solutions that exist only when special constraints between parameters are satisfied.

If you use Reduce instead of Solve, the Wolfram Language will however keep *all* the possible solutions to a set of equations, including those that require special conditions on parameters.

*both*a==1

*and*x==1 should be True:

Solve[lhs==rhs,x] | solve an equation for x |

Solve[{lhs_{1}==rhs_{1},lhs_{2}==rhs_{2},…},{x,y,…}] | |

solve a set of simultaneous equations for x, y, … | |

Eliminate[{lhs_{1}==rhs_{1},lhs_{2}==rhs_{2},…},{x,…}] | |

eliminate x, … in a set of simultaneous equations | |

Reduce[{lhs_{1}==rhs_{1},lhs_{2}==rhs_{2},…},{x,y,…}] | |

give a set of simplified equations, including all possible solutions |

Functions for solving and manipulating equations.

Reduce also has powerful capabilities for handling equations specifically over real numbers or integers. "Equations and Inequalities over Domains" discusses this in more detail.