# Piecewise function with a function as argument

I want to define a piecewise function, which has two arguments, one of which is a function of the other's piecewise argument. I am giving an example

X0 = 1.7635;
X1 = 4.4855;
γ[En_] := En/0.13957
β[En_] := Sqrt[γ[En]^2 - 1]/γ[En]
X[En_] := Log[10, β[En]*γ[En]]
f[En_, Evaluate[X[En_] _]] :=Piecewise[{{0, X[En] < X0}, {4*X[En], X[En] > X0}}]
PLot[f[En, Evaluate[X[En]]], {En, 0.001, 1000}]


Is it possible?

• Why not defining f[En_] :=Piecewise[{{0, X[En] < X0}, {4, X[En] > X0}}] ? Sep 14, 2012 at 7:21
• If I use that it doesn't make any plot at all. I just get PLot[\[Piecewise] { {0, Log[1. Sqrt[-1 + 51.3353 En^2]]/Log[10] < 1.7635}, {((4 Log[1. Sqrt[-1 + 51.3353 En^2]])/Log[10]), Log[1. Sqrt[-1 + 51.3353 En^2]]/Log[10] > 1.7635}, {0, \!$$\* TagBox["True", "PiecewiseDefault", AutoDelete->False, DeletionWarning->True]$$} }, {En, 0.001, 1000}] Sep 14, 2012 at 8:16
• Are you really using PLot ? It should be Plot (L not capitalized). Sep 14, 2012 at 8:26
• That is so true... I realised that a couple of hours ago... Thank's for your help! Sep 14, 2012 at 14:50

In short, yes it is possible. In your setup \[Beta][En] is complex for En < 0.13957.

I'd do :

f[En_] := Piecewise[{{0, X[En] <= X0}, {4, X[En] > X0}}]

minEn=FindRoot[\[Gamma][En]^2 - 1 == 0, {En, 0.1}][[1,2]]
(* 0.13957 *)

Plot[{X0, X[En], f[En]}, {En, minEn, 10}, PlotRange -> All,
PlotStyle -> {Automatic, Automatic, {Red, Thick}}]


• The non real part, is indeed a problem...Actually 0.13957 is a particle's mass. This computation formula doesn't allow me to go bellow that energy, but OK this forum is not about that. Sorry! Thank you very much for your answer! Sep 14, 2012 at 8:28

Not really sure if this is what you want to achieve, but anyway

X0 = 1.7635;
X1 = 4.4855;
γ[En_] := En/0.13957
β[En_] := Sqrt[γ[En]^2 - 1]/γ[En]
X[En_] := Log[10, β[En]*γ[En]]
f[En_?NumericQ, h_?NumericQ] := Piecewise[{{0, h < X0}, {4, h > X0}}]
Plot[f[En, X[En]], {En, 1, 10}, Exclusions -> None]


• I can't understand how you relate h with X[En] Sep 14, 2012 at 8:30
• Oh...I just got it! You give f two arguments and when plotting you use X[En] as the second argument! Nice! Thank you very much! Sep 14, 2012 at 8:32