I have a symbolic tridiagonal matrix of this form

`a = 0; c = 0.25; sa1[b_] :=SparseArray[{Band[{1, 1}] -> a, Band[{2, 1}, {2 l, 2 l}] -> {I b/4, I c}, Band[{1, 2}, {2 l, 2 l}] -> {-I b/4, -I c}}, {2 l, 2 l}]; `

where *a* and *c* are fixed parameters, *b*>0 is a varying parameter and *l* is the rank of the matrix. By diagonalizing this matrix as a function of *b*, I can obtain the largest value for *b*, let’s say *bmax*, such that the absolute value of the eigenvalues is less than 1/10^5. Note that the eignevalues always appear in pairs by symmetry. To find *bmax*, I have employed the Arnoldi method which has been employed also in this thread

`closestEVtotarget[b_?NumericQ, target_?NumericQ] := Abs[First@ Eigenvalues[sa1[N[b]], -1, Method -> {"Arnoldi", "Criteria" -> "Magnitude", "Shift" -> target}]]; With[{target = 1/10^5}, Plot[closestEVtotarget[b, target], {b, 0, 0.5}, GridLines -> {None, {target}}]]; With[{target = 1/10^5}, plot = Plot[{target, closestEVtotarget[b, target]}, {b, 0, 2}]; bmaxval = Graphics`Mesh`FindIntersections[plot]]; `

For instance for *l*=6, printing the *bmaxval* would be

`{{0.185999,0.00001}} `

where *bmax*=0.185999. Now the question is how I can collect all *bmax* values for different even values of *l*, let’s say

`llist = {4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26}; `

and plot *l* vs. *bmax*?