矩阵的特征值是指矩阵在某个方向上的拉伸倍数,数学表达式为:

其中, 为原矩阵, 为特征向量, 为特征值。

在数学上,通常求解特征方程来求解特征值:

但是,由于题目明确输入是2*2的矩阵,所以可以利用公式:

alt

标准代码如下

def calculate_eigenvalues(matrix: List[List[Union[int, float]]]) -> List[float]:
    a, b, c, d = matrix[0][0], matrix[0][1], matrix[1][0], matrix[1][1]
    trace = a + d
    determinant = a * d - b * c
    discriminant = trace**2 - 4 * determinant
    lambda_1 = (trace + discriminant**0.5) / 2
    lambda_2 = (trace - discriminant**0.5) / 2
    return [lambda_1, lambda_2]

本代码中,利用了上述公式,通过求解二次方程来求解特征值,这种方法在2*2矩阵中是可行的,但在更高维度的矩阵中,这种方法的计算复杂度会变得非常高,所以需要使用更高效的算法来求解特征值。

当然,也可以使用numpy库中的eig方法来简化计算

def calculate_eigenvalues(matrix: List[List[Union[int, float]]]) -> List[float]:
    import numpy as np
    return np.sort(np.round(np.linalg.eigvals(matrix), 2))[::-1].tolist()

这里通过对数据四舍五入来省去不必要的精度,并通过sort返回最终结果;但值得注意的是,如果使用scipy库中的eig方法,返回的是复数,需要进一步的操作来处理输出