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
? $\endgroup$