I'm trying to label all intersection points between 2 functions and a 3rd one in a Plot by using Kuba's second solution from here , but I'm not getting the expected result: there are additional, wrong intersection points and the label letters are not correct positioned. What I'm doing wrong?
opts = {ImageSize -> Large, PlotRange -> {{-3, 3}, {-3, 5}},
PlotPoints -> 84, MaxRecursion -> 9,
MeshFunctions -> {f1[#1] - f3[#1] &, f2[#1] - f3[#1] &},
Mesh -> {{0.}}, MeshStyle -> {Directive[Red, PointSize[Medium]]}};
points = Join[{x, f1[x]} /.
NSolve[f1[x] == f3[x] && -3 < x < 3, x, Reals], {x, f2[x]} /.
NSolve[f2[x] == f3[x] && -3 < x < 3, x, Reals]];
names = FromCharacterCode /@ (Range[Length@points] +
96);
Row[{Plot[{f1[p], f2[p], f3[p]}, {p, -3, 3}, Evaluate@opts,
Epilog -> (Text[Style[#, 15], #2 + {.5, 0}] & @@@
Transpose[{names, points}])],
Grid@MapThread[List, {names, points}]}]
What I'm getting:



{x, f1[x]} /. NSolve[f1[x] == f2[x] && -3 < x < 3, x, Reals]to your computation ofpointsand then remove the complexMeshfrom the graphics. Epilog works fine. Another approach is to useShowto join graphics.Show[ Plot[{f1[p], f2[p], f3[p]}, {p, -3, 3}, Evaluate@opts], ListPlot[points, PlotStyle -> {Red, PointSize[Large]}], Graphics[ Text[Style[#, 15], #2 + {.5, 0}] & @@@ Transpose[{names, points}] ] ]– Jack LaVigne Sep 10 '15 at 15:49