The Representation of Solution Sets
Any combination of equations or inequalities can be thought of as implicitly defining a region in some kind of space. The fundamental function of
Reduce is to turn this type of implicit description into an explicit one.
An implicit description in terms of equations or inequalities is sufficient if one just wants to test whether a point specified by values of variables is in the region. But to understand the structure of the region, or to generate points in it, one typically needs a more explicit description, of the kind obtained from
Reduce.
Here are inequalities that implicitly define a semicircular region.
| Out[1]= |  |
|
This shows that the point (1/2, 1/2) lies in the region.
| Out[2]= |  |
|
Reduce gives a more explicit representation of the region.
| Out[3]= |  |
|
If we pick a value for x consistent with the first inequality, we then immediately get an explicit inequality for y.
| Out[4]= |  |
|
Reduce[expr, {x1, x2, ...}] is set up to describe regions by first giving fixed conditions for
x1, then giving conditions for
x2 that depend on
x1, then conditions for
x3 that depend on
x1 and
x2, and so on. This structure has the feature that it allows one to pick points by successively choosing values for each of the
xi in turn—in much the same way as when one uses iterators in functions like
Table.
This gives a representation for the region in which one first picks a value for y, then x.
| Out[5]= |  |
|
In some simple cases the region defined by a system of equations or inequalities will end up having only one component. In such cases, the output from
Reduce will be of the form
e1&&e2... where each of the
ei is an equation or inequality involving variables up to
xi.
In most cases, however, there will be several components, represented by output containing forms such as
u1||u2||....
Reduce typically tries to minimize the number of components used in describing a region. But in some cases multiple parametrizations may be needed to cover a single connected component, and each one of these will appear as a separate component in the output from
Reduce.
In representing solution sets, it is common to find that several components can be described together by using forms such as
...&&(u1||u2)&&....
Reduce by default does this so as to return its results as compactly as possible. You can use
LogicalExpand to generate an expanded form in which each component appears separately.
In generating the most compact results,
Reduce sometimes ends up making conditions on later variables
xi depend on more of the earlier
xi than is strictly necessary. You can force
Reduce to generate results in which a particular
xi only has minimal dependence on earlier
xi by giving the option
Backsubstitution->True. Usually this will lead to much larger output, although sometimes it may be easier to interpret.
By default, Reduce expresses the condition on y in terms of x.
| Out[6]= |  |
|
Backsubstituting allows conditions for y to be given without involving x.
| Out[7]= |  |
|
| CylindricalDecomposition[expr,{x1,x2,...}] |
| generate the cylindrical algebraic decomposition of the region defined by expr |
| GenericCylindricalDecomposition[expr,{x1,x2,...}] |
| find the full-dimensional part of the decomposition of the region defined by expr, together with any hypersurfaces containing the rest of the region |
| SemialgebraicComponentInstances[expr,{x1,x2,...}] |
| give at least one point in each connected component of the region defined by expr |
Cylindrical algebraic decomposition.
For polynomial equations or inequalities over the reals, the structure of the result returned by
Reduce is typically a
cylindrical algebraic decomposition or
CAD. Sometimes
Reduce can yield a simpler form. But in all cases you can get the complete CAD by using
CylindricalDecomposition. For systems containing inequalities only,
GenericCylindricalDecomposition gives you "most" of the solution set and is often faster.
Here is the cylindrical algebraic decomposition of a region bounded by a hyperbola.
| Out[8]= |  |
|
This gives the two-dimensional part of the solution set along with a curve containing the boundary.
| Out[9]= |  |
|
This finds solutions from both parts of the solution set.
| Out[10]= |  |
|
The results include a few points from each piece of the solution set.
| Out[11]= |  |
|