2.9 KiB
Homework 7
Question One
See UTEST(eigen, dominant_eigenvalue)
in test/eigen.t.c
and the entry
Eigen-Adjacent -> dominant_eigenvalue
in the LIZFCM API documentation.
Question Two
See UTEST(eigen, leslie_matrix_dominant_eigenvalue)
in test/eigen.t.c
and the entry Eigen-Adjacent -> leslie_matrix
in the LIZFCM API
documentation.
Question Three
See UTEST(eigen, least_dominant_eigenvalue)
in test/eigen.t.c
which
finds the least dominant eigenvalue on the matrix:
which has eigenvalues: $5 + \sqrt{17}, 2, 5 - \sqrt{17}$ and should thus produce $5 - \sqrt{17}$.
See also the entry Eigen-Adjacent -> least_dominant_eigenvalue
in the LIZFCM API
documentation.
Question Four
See UTEST(eigen, shifted_eigenvalue)
in test/eigen.t.c
which
finds the least dominant eigenvalue on the matrix:
which has eigenvalues: $5 + \sqrt{17}, 2, 5 - \sqrt{17}$ and should thus produce $2.0$.
With the initial guess: $[0.5, 1.0, 0.75]$.
See also the entry Eigen-Adjacent -> shift_inverse_power_eigenvalue
in the LIZFCM API
documentation.
Question Five
See UTEST(eigen, partition_find_eigenvalues)
in test/eigen.t.c
which
finds the eigenvalues in a partition of 10 on the matrix:
which has eigenvalues: $5 + \sqrt{17}, 2, 5 - \sqrt{17}$, and should produce all three from the partitions when given the guesses $[0.5, 1.0, 0.75]$ from the questions above.
See also the entry Eigen-Adjacent -> partition_find_eigenvalues
in the LIZFCM API
documentation.
Question Six
Consider we have the results of two methods developed in this homework: least_dominant_eigenvalue
, and dominant_eigenvalue
into lambda_0
, lambda_n
, respectively. Also assume that we have the method implemented as we've introduced,
shift_inverse_power_eigenvalue
.
Then, we begin at the midpoint of lambda_0
and lambda_n
, and compute the
new_lambda = shift_inverse_power_eigenvalue
with a shift at the midpoint, and some given initial guess.
- If the result is equal (or within some tolerance) to
lambda_n
then the closest eigenvalue to the midpoint is still the dominant eigenvalue, and thus the next most dominant will be on the left. Setlambda_n
to the midpoint and reiterate. - If the result is greater or equal to
lambda_0
we know an eigenvalue of greater or equal magnitude exists on the right. So, we setlambda_0
to this eigenvalue associated with the midpoint, and re-iterate. - Continue re-iterating until we hit some given maximum number of iterations. Finally we will return
new_lambda
.