Read up on the option MaxExtraConditions
in the documentation for Solve[]
. The default number is None
, and Solve[]
returns the solutions that require no extra conditions on the parameters. It's a bit hard to predict what you'll get by raising it. You mention one condition in particular, so let's try 1
:
Solve[sys, {x1, x2, x3}, MaxExtraConditions -> 1]
(*
{{x1 -> ConditionalExpression[c2/x4, -c2 c3 + c1 c4 == 0],
x2 -> ConditionalExpression[(c2 c3)/(c1 x4), -c2 c3 + c1 c4 == 0],
x3 -> ConditionalExpression[(c1 x4)/c2, -c2 c3 + c1 c4 == 0]}}
*)
Simplify[%, c2 c3 == c1 c4]
(*
{{x1 -> c2/x4, x2 -> c4/x4, x3 -> (c1 x4)/c2}}
*)
That worked. If you let it do All
, it will reduce the conditions as much as possible to cases consisting of combinations of v == value
, v != value
, v > value
(if the parameter v
is real), etc.
Solve[Append[sys, x4 != 0], {x1, x2, x3}, MaxExtraConditions -> All]
(* 7 solutions with up to 4 conditions each *)
The solutions here are the Solve[]
version of the Reduce[]
solutions that Frank Kampas shows.
Another way:
Eliminate[Append[sys, c2 c3 == c1 c4], {c4}]
Solve[%, {x1, x2, x3}]
(*
c3 x1 - c1 x2 == 0 && -c1 + x1 x3 == 0 && -c3 + x2 x3 == 0 &&
c2 x3 - c1 x4 == 0 && -c2 + x1 x4 == 0 && -c2 c3 + c1 x2 x4 == 0
{{x1 -> c2/x4, x2 -> (c2 c3)/(c1 x4), x3 -> (c1 x4)/c2}}
*)