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
