I am assuming you know a few things about the parameters. Specifically, I use
$Assumptions = Thread[{a, b, c, Ray, P, q, X1, X2} > 0]
(* {a > 0, b > 0, c > 0, Ray > 0, P > 0, q > 0, X1 > 0, X2 > 0} *)
Then you can get all discontinuities with
breakpoints = Flatten[
Solve[# == 0, h] & /@
DeleteDuplicates@
Cases[Simplify`PWToUnitStep[Qplot], UnitStep[arg_] :> arg, Infinity]
]
(* {h -> c/3, h -> c, h -> b + c, h -> a + b + c} *)
(I guess there is a more elegant way, but it works) and the left/right limits at each point in symbolic form:
Table[
Most@Pick[
Sequence@@Reverse[Simplify[Internal`FromPiecewise[Qplot] /. bp]]
],
{bp, breakpoints}
]
(* {{Ray, -P + Ray}, {-P + Ray, -P + Ray + X1}, {-P - b q + Ray +
X1, -P - b q + Ray + X1 + X2}, {-P - b q + Ray + X1 + X2}} *)
You can safely ignore the red mark the front end will show you at the end of the argument of Pick, as Pick expects two arguments. We actually provide two arguments using Sequence@@.
Here I use the undocumented function Internal`FromPiecewise which does this:
Internal`FromPiecewise[Qplot]
(* {{h <= c/3, c/3 <= h <= c, c <= h <= b + c, b + c <= h <= a + b + c,
True}, {Ray, -P + Ray, -P - (-c + h) q + Ray + X1, -P - b q + Ray +
X1 + X2, 0}} *)
a,b, etc.? For example, isc > 0? – JEM_Mosig Jul 15 '17 at 22:14