Calculate the eigenvalues of a 2x2 matrix. The eigenvalues are the roots of the characteristic polynomial det(A - lambda * I) = 0.
def calculate_eigenvalues(matrix: list[list[float]]) -> list[float]:
a, b = matrix[0]
c, d = matrix[1]
# Characteristic equation: lambda^2 - (a+d)*lambda + (ad - bc) = 0
trace = a + d
det = a * d - b * c
discriminant = trace ** 2 - 4 * det
if discriminant >= 0:
sqrt_disc = discriminant ** 0.5
e1 = (trace + sqrt_disc) / 2
e2 = (trace - sqrt_disc) / 2
else:
# Complex eigenvalues - return real and imaginary parts
sqrt_disc = (-discriminant) ** 0.5
e1 = complex(trace / 2, sqrt_disc / 2)
e2 = complex(trace / 2, -sqrt_disc / 2)
return [e1, e2]