I wish to compute the logarithmic spectral norm of a square matrix $A$, which is defined by
\begin{equation} \mu_2[A]=\lim_{t\downarrow0}\frac{\|I+tA\|_2-1}{t}. \end{equation}
Hence, I simply code the above formula in Mathematica, but the deal is for large sizes, the computation will not stop and does not provide any results! I think, a kind of $\frac{0}{0}$ happens in the middle of the process and that is why this raw implementation does not work properly.
ClearAll["Global`*"]
logarithmicNorm[B_] :=
Limit[(Norm[Id + t*B, 2] - 1)/t, t -> 0., Assumptions -> t > 0]
n = 2;
Id = SparseArray[{{i_, i_} -> 1.}, {n, n}, 0];
A = N@SparseArray[{{i_, i_} -> 2.6, {i_, j_} /; Abs[i - j] == 1 ->
RandomReal[]}, {n, n}, 0];
logarithmicNorm[A]
The above sample example works fine when $n=2$, but if I choose $n\geq3$ it gets stuck! Now, the point is I want to compute this kind of norm for matrices of high dimensions, such as $n>200$.
I will be thankful if anyone gives me some tips or help.
Limit
is a function that evaluates limits purely symbolically, which means it has to convert to a function first, then if it knows that functional form, it can take the limit. You will probably need to design your own limit function that numerically finds a large enought
such that the value of the function doesn't change very much (within some user-defined tolerance). $\endgroup$