文章目录
- 一、Jacobi 旋转法
- 二、Jacobi 过关法
- 三、Householder 方法
- 四、乘幂法
矩阵的特征值(eigenvalue)和特征向量(eigenvector)在很多应用中都具有重要的数学和物理意义。
本文将详细介绍乘幂法的基本原理和步骤,并给出其Python实现。
一、Jacobi 旋转法
Jacobi 旋转法的每一次迭代中,需要选择一个非对角元素最大的位置,然后构造相应的旋转矩阵,进行相似变换,使得矩阵逐渐对角化。
【计算方法与科学建模】矩阵特征值与特征向量的计算(一):Jacobi 旋转法及其Python实现
二、Jacobi 过关法
Jacobi 过关法(Jacobi’s threshold method)是 Jacobi 旋转法的一种改进版本,其主要目的是减少计算工作和提高运行速度。该方法通过动态调整阈值,并根据阈值对非对角元素进行选择性的旋转变换,以逐步对角化对称矩阵。
【计算方法与科学建模】矩阵特征值与特征向量的计算(二):Jacobi 过关法及其Python实现(Jacobi 旋转法的改进)
三、Householder 方法
如果对任意向量 z z z,我们可以将其分解为与 u u u 平行的分量 a u au au 和与 u u u 正交的分量 b v bv bv,即 z = a u + b v z = au + bv z=au+bv,那么 Householder 变换会将 z z z 变换为 − a u + b v -au + bv −au+bv。这个变换可以理解为镜面反射,它不改变向量在与 u u u 正交的平面上的投影,但将向量沿着 u u u 的方向反射。数学表达式为:
H z = a u + b v → − a u + b v Hz = au + bv \rightarrow -au + bv Hz=au+bv→−au+bv
这个性质使得 Householder 变换在一些数值计算的应用中非常有用,例如矩阵三对角化、 QR 分解等。
【计算方法与科学建模】矩阵特征值与特征向量的计算(三):Householder方法及其Python实现
四、乘幂法
PS:乘幂法具体内容解析,待明日完善……
import numpy as npdef normalize_vector(vec):# 计算向量的最大分量max_val = np.max(np.abs(vec))# 对向量进行规范化return vec / max_val, max_valdef power_iteration(A, x, max_iter=100, tol=1e-6):for i in range(max_iter):# 计算矩阵与向量的乘积Ax = np.dot(A, x)# 对乘积结果进行规范化x, max_val = normalize_vector(Ax)# print(x)# 计算对应的特征值eigenvalue = np.dot(Ax, x) / np.dot(x, x)return x, eigenvalue# 给定矩阵 A
A = np.array([[-4, 14, 0],[-5, 13, 0],[-1, 0, 2]])# 初始向量
x0 = np.array([1, 1, 1])# 运行乘幂法迭代
result_vector, eigenvalue = power_iteration(A, x0)print("估计的特征向量:", result_vector)
print("估计的特征值:", eigenvalue)