# Analytical full-width half-maximum of hyperbolic functions composition

I'm trying to find the analytical FWHM of the following function (that I know has a Bell-type envelope):

auto[t0_, tau_] := -4 (tau - t0 Coth[t0/tau]) Csch[t0/tau]^2


Here is what I tried so far:

1. Rescale the function to 1:

Limit[auto[t, tau], t -> 0]


(4 tau)/3

autoNorm[t0_, tau_] := -((3 (tau - t0 Coth[t0/tau]) Csch[t0/tau]^2)/tau)


2. Try (unsuccessfully) Solve

Solve[{autoNorm[t0, tau] == 1/2, tau > 0, t0 \[Element] Reals}, t0]


Solve::nsmet: This system cannot be solved with the methods available to Solve.

3. Try NSolve imposing tau=1

NSolve[{autoNorm[t0, 1] == 1/2, t0 \[Element] Reals}, t0]


{{t0 -> -1.35979}, {t0 -> 1.35979}}

4. Check whether the numerical result scales linearly with tau (it does)

autoNorm[1.3597924763052964 tau, tau]


1/2

What I need is an analytical formula for 1.3597924763052964 (even if I'm not completely sure it exists), as the FWHM is just 2 times this value. I tried Rationalize on the number (that clearly didn't work in this case). I tried to play with TrigExpand, TrigToExp, ExpandAll etc before feeding the function to Solve, but it didn't help either.

I expect the number to be some combination of square roots, exponentials and Logs (due to the nature of the input function), but I'm not 100% sure.

Any suggestion is more than welcome!

• Typo in the first line: should be auto[t0_, tau_] = ... Commented Jan 6, 2020 at 16:38
• fixed, thanks! :D Commented Jan 6, 2020 at 16:43
• Only approximation: ArcSec[-3 (3 + Sqrt[2]) + (82 Log[3])/5],but analytical formula not exist for you equation. Commented Jan 6, 2020 at 16:47
• Thanks @MariuszIwaniuk ! Could you elaborate on why the analytical formula doesn't exist? Commented Jan 6, 2020 at 16:53
• See: en.wikipedia.org/wiki/Transcendental_equation. It's seems a waste of time and life.:) Commented Jan 6, 2020 at 17:01

Clear["Global*"]

auto[t0_, tau_] = -4 (tau - t0 Coth[t0/tau]) Csch[t0/tau]^2;


Verifying symmetry,

auto[t0, tau] == auto[-t0, tau]

(* True *)

maxV = Limit[auto[t0, tau], t0 -> 0]

(* (4 tau)/3 *)

autoNorm[t0_, tau_] = auto[t0, tau]/maxV

(* -((3 (tau - t0 Coth[t0/tau]) Csch[t0/tau]^2)/tau) *)


Restricting the domain to Reals, the exact value for the FWHM point for tau == 1 is expressed as a Root expression

(tfwhm = Solve[autoNorm[t0, 1] == 1/2, t0, Reals][[1]]) // InputForm

(* {t0 -> Root[{-1 + E^(-6*#1) -
(-21 - 24*#1)/E^(4*#1) -
(21 - 24*#1)/E^(2*#1) & , 1.3\
59792476305296405508513391097477440\
8820.593565523497226}]} *)


Verifying,

autoNorm[t0, 1] /. tfwhm // FullSimplify

(* 1/2 *)


However, this is not the FWHM point for general tau, e.g.,

(autoNorm[t0, 2] /. tfwhm) // N

(* 0.833814 *)


To find the FWHM as a function of tau

fwhm[tau_?NumericQ] := Module[{tauR = Rationalize[tau, 0]},
2*t0 /. Solve[autoNorm[t0, tauR] == 1/2, t0, Reals][[1]]]


Plotting the FWHM as a function of tau

Plot[
fwhm[tau], {tau, 1/100, 10},
Frame -> True,
FrameLabel -> (Style[#, 14] & /@ {tau, FWHM})]


Since this appears linear

(FWHM[tau_] = ((fwhm[10] - fwhm[1])*tau + 10*fwhm[1] - 1*fwhm[10])/(10 - 1) //
FullSimplify) // InputForm

(* (2*tau*
(-Root[{21*Sinh[#1] +
Sinh[3*#1] - 24*Cosh[#1]*
#1 & , 1.35979247630529640\
55085133910974774408820.5935655234\
97226}] + Root[
{-5 + (5 + 3*E^(#1/5)*
(35 + 4*#1 + E^(#1/5)*
(-35 + 4*#1)))/
E^((3*#1)/5) & , 13.5979247\
630529640550858053686716685538520.\
60205999118258}]))/9 *)


Verifying that the result is the same for a larger interval

FWHM[tau] ==
((fwhm[1000] - fwhm[1])*tau + 1000*fwhm[1] - 1*fwhm[1000])/(1000 -
1) // FullSimplify

(* True *)


Since the Root expressions are exact, FWHM can be evaluated to any desired precision

FWHM[1.50]

(* 2.7195849526105928110103621113550874258460333053779 *)


EDIT: Since Akku14 has shown that a simpler representation is possible, note that

FWHM[0]

(* 0 *)


Consequently, the linear equation can be simplified by using the point {0, 0} as one of the defining points.

(FWHM2[tau_] = fwhm[10]*tau/10) // InputForm

(* (tau*Root[{-5 + 5/E^((3*#1)/5) -
(-105 - 12*#1)/E^((2*#1)/5) -
(105 - 12*#1)/E^(#1/5) & , 13\
.5979247630529640550858053686716685\
538520.60205999118258}])/5 *)


Which is approximately,

FWHM2[tau] // N

(* 2.71958 tau *)


Verifying that this corresponds to a fwhm point

autoNorm[FWHM2[tau]/2, tau] // FullSimplify

(* 1/2 *)


The answer of @Bob Hanlon inspired me to find an alternative expression for FWHM as a multiple of the fwhm for tau = 1 multiplied with the function value at t0 = tau.

fact1 = (t0 /. First@Solve[autoNorm[t0, 1] == 1/2, t0,
Reals][[1]])/autoNorm[1, 1]

FWHM[tau_] = 2*autoNorm[tau, tau]*fact1*tau

(*   (1/(1 - Coth[1]))(tau - tau Coth[1])*
Root[{-1 + E^(-6 #1) - E^(-4 #1) (-21 - 24 #1) -
E^(-2 #1) (21 - 24 #1) &, 1.35979247630529640551}]   *)


Proof

FWHM[1.50]

(*   2.719584952610592811010362111355087425846033305378   *)

(2*t0 /. First@Solve[autoNorm[t0, 1] == 1/2, t0, Reals][[1]])// N[#, 49] &

(*   2.719584952610592811010362111355087425846033305378   *)

FWHM[11.50]

(*   29.91543447871652092111398322490596168430636635916   *)

(2*t0 /. First@Solve[autoNorm[t0, 11] == 1/2, t0, Reals][[1]]) // N[#, 49] &

(*   29.91543447871652092111398322490596168430636635916   *)

• +1 The proof is that with your definition for FWHM, autoNorm[FWHM[tau]/2, tau] // FullSimplify evaluates to 1/2 Commented Jan 6, 2020 at 22:34