Let
-
$\lambda \in \mathbb{C}$ is an eigenvalue of$A$ if the system$(A - \lambda I)x = 0$ has non-zero solutions. In this case, the dimension of the solution space is called the geometric multiplicity of the eigenvalue$\lambda$ . We denote this quantity as$\text{mult}_{\text{geo}}(\lambda)$ :$$ \text{mult}_{\text{geo}}(\lambda) := n - \text{rk}(A - \lambda I). $$
-
$\lambda \in \mathbb{C}$ is an eigenvalue of$A$ if$\lambda$ is a root of the equation$f_A(x) = 0$ , where$f_A(x) := \text{det}(A - xI)$ . In this case, the root's multiplicity is called the algebraic multiplicity of$\lambda$ . We denote this as$\text{mult}_{\text{alg}}(\lambda)$ :$$ \text{mult}_{\text{alg}}(\lambda) := {m \in \mathbb{N} : 0 = f_A(\lambda) = f_A'(\lambda) = \dots = f_A^{(m-1)}(\lambda), \text{but } f_A^{(m)}(\lambda) \neq 0}. $$
A matrix is diagonalizable (i.e.,
We aim to develop a program capable of verifying the diagonalizability of a given matrix.
To compute the geometric multiplicity, we will rely on LU factorization. The LU algorithm (with partial pivoting) produces a matrix
To compute the algebraic multiplicity of an eigenvalue, we can use the convergence properties of the Newton method. It is known that the Newton method, when approximating a root of order
where
Create a function multgeo with the call:
k = multgeo(A, l, tolerance)-
A: A square real or complex matrix. -
l: A complex scalar (the eigenvalue whose geometric multiplicity is to be calculated). -
tolerance: A positive real scalar to verify the nullity condition of the diagonal elements of$U$ .
k: A positive natural number representing the dimension of the eigenspace.
The function should call MATLAB’s LU factorization and count how many diagonal elements of
In the Newton method, we need to compute
Note that in the Newton method,
Additionally, if
The value
Create a function myobjective with the call:
[f, g] = myobjective(z, A)- Compute
$\det(A - zI)$ as$\det(U)/\det(P)$ . - Compute
$g_A(z)$ using the previously computed LU factorization to invert$B(z)$ .
Create a function multalg with the call:
[l, m, flag] = multalg(A, l0, tolerance, it, maxit)A: A square real or complex matrix.l0: Initial guess for the Newton method.tolerance: Stopping criterion for step size.it: Integer greater than or equal to 2.maxit: Positive integer greater thanit.
l: Calculated eigenvalue.m: Positive natural number (multiplicity).flag: 1 for success, 0 for error.
- Perform
itNewton steps starting froml0. If the method stops due to reaching tolerance, setm = 1andflag = 1, then exit. - Use the last two Newton steps and heuristic (3) to guess
$m$ . - Restart from
l0and initialize the modified Newton method$z_{k+1} = z_k - m g_A(z_k)$ with at mostmaxitsteps. - If the step criterion is met before the maximum allowed steps, exit with
flag = 1. Otherwise, increment$m$ by one and repeat. - Exit with
flag = 0after a total of$10 \times \text{maxit}$ calls tomyobjective.
To test the developed program, create some "synthetic" tests and analyze the results, possibly producing illustrative graphs.
We can create matrices with known eigenvalues and multiplicities using the structure:
where
where each block is of the form:
The matrix
and algebraic multiplicity:
Perform tests with matrices created using this procedure and identify the software's limitations. Consider eigenvalues that are well-spaced or clustered with low (1-2) or high (3-7) multiplicities.