The eigenvalues of these matrices are super ill conditioned. I spent some time on these matrices with @sverek a while ago. Sven-Erik knows a lot more about these than I do.
The condition number of the eigenvalue is roughly reciprocal of the inner product between the right and the left (normalized) eigenvectors for that value. (I think I have the condition number from Nick HIgham’s book). So you have
julia> n = 20;
julia> A = Tridiagonal([q for _ in 1:(n-1)], zeros(n), [p for _ in 1:(n-1)]);
julia> F = eigen(Array(A));
julia> vr = (A - F.values[end]*I)\randn(n) |> t -> t/norm(t);
julia> vl = (A' - F.values[end]*I)\randn(n) |> t -> t/norm(t);
julia> abs(inv(vl'vr))
6.737730466564851
julia> n = 200;
julia> A = Tridiagonal([q for _ in 1:(n-1)], zeros(n), [p for _ in 1:(n-1)]);
julia> F = eigen(Array(A));
julia> vr = (A - F.values[end]*I)\randn(n) |> t -> t/norm(t);
julia> vl = (A' - F.values[end]*I)\randn(n) |> t -> t/norm(t);
julia> abs(inv(vl'vr))
7.360334831197046e19
so n
doen’t have to get large before small perturbations will be heavily amplified in the eigenvalues.