题目
题目链接
矩阵的特征值是指矩阵在某个方向上的拉伸倍数,数学表达式为:
\[A \times v = \lambda \times v
\]
其中,\(A\) 为原矩阵,\(v\) 为特征向量,\(\lambda\) 为特征值。
在数学上,通常求解特征方程来求解特征值:
\[det(A - \lambda I) = 0
\]
但是,由于题目明确输入是2*2的矩阵,所以可以利用公式:
标准代码如下
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 + ddeterminant = a * d - b * cdiscriminant = trace**2 - 4 * determinantlambda_1 = (trace + discriminant**0.5) / 2lambda_2 = (trace - discriminant**0.5) / 2return [lambda_1, lambda_2]
本代码中,利用了上述公式,通过求解二次方程来求解特征值,这种方法在2*2矩阵中是可行的,但在更高维度的矩阵中,这种方法的计算复杂度会变得非常高,所以需要使用更高效的算法来求解特征值。
当然,也可以使用numpy库中的eig方法来简化计算
def calculate_eigenvalues(matrix: List[List[Union[int, float]]]) -> List[float]:import numpy as npreturn np.sort(np.round(np.linalg.eigvals(matrix), 2))[::-1].tolist()