Write a Python function that calculates the eigenvalues of a 2x2 matrix. The function should return a list containing the eigenvalues, sort values from highest to lowest.

Example:

  • Input:matrix = [[2, 1], [1, 2]]
  • Output:[3.0, 1.0]

要求写一个函数,计算一个2x2矩阵的特征值。

A是一个矩阵(这里2x2),它的特征向量v就是经过A的线性变换后,方向是不变的,也就是 Av =λv,其中λ是一个标量,而λ就是特征值。

简单推一下,就可以等到上面这个等式。根据线性方程组理论,要使这个Bx=0有非零解,B的行列式就必须为0。

也就是:

那么解λ就变成了一元二次方程,初中就会解了。

所以这道题,就变成了写一个函数算矩阵的迹(trace,对解线的和)和行列式(determinant)。然后用它们一算,一元二次方程的参数就有了,直接套公式,就可以出特征值了。

def trace(matrix: list[list[float|int]]) -> list[float|int]:  
 res = 0  
 for i in range(len(matrix)):  
  for j in range(len(matrix[i])):  
   if i == j:  
    res += matrix[i][j]  
 return res  
  
def determinant(matrix: list[list[float|int]]) -> list[float|int]:  
 # for 2x2 matrix only  
 return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]  
  
import math  
def calculate_eigenvalues(matrix: list[list[float|int]]) -> list[float]:  
 a = 1  
 b = -1 * trace(matrix)  
 c = determinant(matrix)  
 tmp = math.sqrt(b * b - 4 * a * c)  
 eigenvalues = [(-1*b + tmp)/(2*a), (-1*b - tmp)/(2*a)]  
 return eigenvalues