You could use the Levin rule, with a precomputed symbolic analysis. NIntegrate`LevinIntegrandReduce
is discussed in NIntegrate Integration Rules. For some reason li["Rules"]
does not return rules that are all suitable for input to the "LevinRule"
method, so they need some processing.
NN = 60;
?M = {1, -1};
ClearAll[int1, int2, li1, li2, dli1, dli2, liMeth, FLR, dFLR, F1, F2, dF1, dF2];
int1[?C_] := r Exp[-((NN - 1)/2) r^2 + NN Log[BesselJ[0, Sqrt[-2 ?C] r]]]
((NN BesselJ[1, Sqrt[-2 ?C] r] r)/(BesselJ[0, Sqrt[-2 ?C] r] Sqrt[-2 ?C]) *
BesselJ[0, ((NN - 1) r)/Sqrt[-2 ?C] Sqrt[?M.?M]] -
BesselJ[1, ((NN - 1) r)/Sqrt[-2 ?C] Sqrt[?M.?M]] ((NN - 1) r)/(-2 ?C)^(3/2) Sqrt[?M.?M]);
int2[?C_] :=
r Exp[-((NN - 1)/2) r^2 + NN Log[BesselJ[0, Sqrt[-2 ?C] r]]] BesselJ[0, ((NN - 1) r)/Sqrt[-2 ?C] Sqrt[?M.?M]];
li1[?C_] = NIntegrate`LevinIntegrandReduce[int1[?C], {r}];
li2[?C_] = NIntegrate`LevinIntegrandReduce[int2[?C], {r}];
liMeth[li_] := Flatten@{"LevinRule",
Rest@li["Rules"] /. HoldPattern["DifferentialMatrices" -> dmm_] :> "DifferentialMatrix" -> First@dmm,
"MaxOrder" -> 100};
FLR[?C_?NumericQ] := 1/NN NIntegrate[int1[?C], {r, 0, ?}, Method -> liMeth[li1[?C]]]/
NIntegrate[int2[?C], {r, 0, ?}, Method -> liMeth[li2[?C]]];
AbsoluteTiming[
sol = FindRoot[FLR[m] == -0.4, {m, -1, -2}]
]
(* {4.28894, {m -> -0.962643}} *)
Check:
FLR[m] /. sol
(* -0.4 *)
An alternative definition of liMeth
could be
liMeth[li_] := {"LevinRule",
"Kernel" -> li["Kernel"],
"Amplitude" -> li@"Amplitude",
"AdditiveTerm" -> li@"AdditiveTerm",
"DifferentialMatrix" -> First@li@"DifferentialMatrices",
"MaxOrder" -> 100};