I'm going to try and show that indeed the question title is false!
First we'll need to define the original M
matrix in a modular form:
M[μ_] := {
{0, 1, 0, 0},
{-ω0^2 - μ^2 - 4 g x, 0, 0, μ},
{-μ, 0, 0, 1},
{0, 0, -ωk^2 + μ^2, 0}
}
This will prove useful later on.
Next, we are going to define a function that operates on the M
matrix and returns its eigenvalues. We are not going to use Eigenalues
or Eigensystem
, this time.
evals
, the function we are going to define, makes use of the modular definition of M
(see above).
(* evals returns a list of eigenvalues for M *)
evals[μ_] := evals[μ] = Solve[0 == Det[M[μ] - λ IdentityMatrix[4]], λ]
Discussion
The eigenvalues of M
when $μ\rightarrow0$ can be obtained by first solving for the roots of the characteristic equation in the general case ($μ\neq0$) and then substitute for the value of $μ=0$. On the other hand, solving for the eigenvalues in the specific case where $μ=0$ is straightforward. These two operations are performed by the code below:
(* operators applied after the outcome is derived *)
postOps = MapAt[fAux, \[Bullet], {All, -1, 1, -1}] /* FullSimplify /* PowerExpand
(* first solve for the eigenvalues and then set μ = 0 *)
λ /. evals[μ] /. μ -> 0 // Simplify /* postOps
{-Sqrt[-4 g x - ω0^2], Sqrt[-4 g x - ω0^2], -I ωk, I ωk}
Similarly,
(* solve for the eigenvalues of M[0] *)
λ /. evals[0]
{-Sqrt[-4 g x - ω0^2], Sqrt[-4 g x - ω0^2], -I ωk, I ωk}
Please note how the two evaluations produce the same output. Hence, it seems that the eigenvalues of M[0]
are indeed the same with the respective eigenvalues of M[μ]/.μ->0
.
"OK, so, what happens with the eigenvectors, bud?"
First we'll consider the case for M[0]
and then we'll discuss the general case M[μ]
.
In the case of M[0]
, the eigenvectors can be obtained in the following way:
(* just a vector of auxiliary variables *)
xs = {x1, x2, x3, x4};
(* the eigensystem in the general case for μ *)
eqs[μ_] := eqs[μ] = M[μ].xs - λ xs == 0 // Thread
(* the eigenvalues @ μ = 0 *)
v = λ /. evals[0];
(* post-ops *)
(postOps = {\[Bullet], 1/v} /*
MapThread[xs /. Quiet@Solve[#1, xs] /. Thread[xs -> #2] &, \[Bullet]] /*
Flatten[\[Bullet], 1];
(* the eigenvectors @ μ = 0 *)
eqs[0] /. Transpose[{Thread[λ -> v]}] // Simplify /* postOps
{
{-(1/Sqrt[-4 g x - ω0^2]), 1, 0, 0},
{1/Sqrt[-4 g x - ω0^2], 1, 0, 0},
{0, 0, I/ωk, 1},
{0, 0, -(I/ωk), 1}
}
It so happens that these are the eigenvectors one obtains when using the built-ins eg Eigensystem[M[0]]
.
Now, it's not clear to me if this is actually a part of the original question but I feel I should address what happens when the calculations are performed for the general case ($μ\neq0$) and then we impose the restriction.
In that case the eigenvectors are different from the ones we previously calculated (I won't present those calculations here since they are essentially the same with the ones for the special case presented above; the only difference is that the eigenvalues used should be the ones corresponding to the general case).
My guess as to why this happens has to do with the matrix M[μ]
itself. Notice how it is possible to write the general-case matrix M[μ]
as a sum of two matrices:
M[μ] == M[0] + {{0, 0, 0, 0},
{-μ^2, 0, 0, μ},
{-μ, 0, 0, 0},
{0, 0, μ^2, 0}}
In the special case where $μ=0$ the second matrix disappears and we obtain the familiar results as in above.
In the general case, where $μ\neq0$ the simple-case matrix M[0]
is perturbed by the non-zero second matrix (see above) in such ways that essentially it is transformed into a completely different matrix with completely distinct characteristics from the former one.
That's as far as I can go. I would be really interested to know more.
Auxiliary code
The Bullet operator (obtained from here)
\[Bullet] /: f_[pre___, \[Bullet], post___] := With[{n=Length[List@pre], m=Length[List@post]},
Curry[f, Join[Range[n], {n + m + 1}, Range[m] + n]][pre, post]
]
The fAux
auxiliary function
(* just an error message *)
fAux::herr = "Something went wrong. Please, look into it!";
and
(* relevant for input that match -Sqrt[x__] *)
fAux[pattn : -Sqrt[x__]] := With[{sim = Simplify[x]},
Which[
MatchQ[sim, Power[p__, 2]], -sim /. Power[p__, 2] :> p,
True, (Message[h::herr]; pattn)
]
]
and
(* relevant for input that match Sqrt[x__] *)
fAux[pattn : Sqrt[x__]] := With[{sim = Simplify[x]},
Which[
MatchQ[sim, Power[p__, 2]], sim /. Power[p__, 2] :> p,
True, (Message[h::herr]; pattn)
]
]