300 likes | 629 Views
矩阵特征值. 特征值和特征向量 乘幂法 雅可比方法 矩阵的谱分解和矩阵函数. 考试的问题. Stephen Hawking. 特征值和特征向量. 特征值. 特征向量. 特征方程. 求解方程. 当 n 稍大,多项式方程是个高次方程. 确定系数 a n 时不可避免会引入误差. 多项式方程未必就能得到精确的特征方程的解。. 乘幂法:计算绝对值最大的特征值. 来源于实际问题:求绝对值最大的特征值 设 n 阶实矩阵 A 的 n 个特征值为 则所对应的特征向量为: 满足:. 假设矩阵特征值的绝对值按从大到小的顺序排列,并且绝对值最大的特征值是单重的。. 求.
E N D
矩阵特征值 特征值和特征向量 乘幂法 雅可比方法 矩阵的谱分解和矩阵函数
特征值和特征向量 特征值 特征向量 特征方程
求解方程 当n稍大,多项式方程是个高次方程 确定系数an时不可避免会引入误差 多项式方程未必就能得到精确的特征方程的解。
乘幂法:计算绝对值最大的特征值 • 来源于实际问题:求绝对值最大的特征值 • 设n阶实矩阵A的n个特征值为 • 则所对应的特征向量为: • 满足: • 假设矩阵特征值的绝对值按从大到小的顺序排列,并且绝对值最大的特征值是单重的。
求 • 任意取一个异于0的n维初始向量V0,并假定V0可以唯一地表示为: • 如果令: • 则有: • 则有:
规格化(归一化) • 乘法递推计算中:可能会由于Vk各分量的绝对值不断增大而造成运算溢出。 • 必须对Vk规格化: 即:
计算举例 计算以下矩阵的最大特征值和相应的特征向量: 取初始向量为:
程序 • A = [2 3 2;10 3 4;3 6 1]; • v = [0 0 1]'; • for ii=1:8 • v = A*v; • u = max(v) • v = v/u • end
求对称矩阵的雅可比方法 • 实际应用中常见的一种矩阵 • 基本概念 • 计算方法
基本概念 • 设A是n阶实对称矩阵,则它的所有特征值均为实数,所对应的n个特征向量是线性无关,且相互正交。 • 如果矩阵A和B相似,则它们具有相同的特征值。 P为可逆方阵
雅可比方法 • 用途:用于求实对称矩阵的全部特征值和特征向量; • 基本思路:用一系列正交变换对角化A,即逐步消去A的非对角元,从而得到A的全部特征值; • 实质:找到一个正交矩阵V,使A对角化。
新矩阵B • B的非对角线元素的平方之和: • B的对角线元素的平方之和: • 迭代中,在对角线元素的平方和变大的同时,非对角线元素趋近于0。
选取非对角线元素中绝对值最大者 具体算法流程图 是 否 求得特征值和特征向量 计 算 计算矩阵A的新元素 结 束
matlab程序 • A = [2 -1 0;-1 2 -1;0 -1 2] • [mA,nA] = size(A); • V = eye(mA); • for i=1:5 • Ab = abs(A); • Ad = diag(diag(Ab)); • Ab = Ab-Ad; • [vmax,idx] = max(Ab(:)); • m = -A(idx); • p = ceil(idx/mA);
q = rem(idx,mA); • if q==0 • q = mA; • end • n = (A(q,q)-A(p,p))/2; • nSgn = sign(n); • if nSgn==0 • nSgn = 1; • end • omiga = nSgn*m/sqrt(m^2+n^2); • sin_theta = omiga/sqrt(2*(1+sqrt(1-omiga^2))); • cos_theta = sqrt(1-sin_theta^2); • R = eye(mA);
R(p,p) = cos_theta; • R(q,q) = R(p,p); • R(p,q) = -sin_theta; • R(q,p) = sin_theta; • V = V*R; • A = R'*A*R; • A • A(p,q) • sin_theta • cos_theta • R • end • V
矩阵的谱分解 • 特征根各异的矩阵A的特征值分解可以重写如下: • 即为矩阵的谱分解
矩阵函数 • 定义矩阵函数为:
数组乘方和矩阵乘方 • A = reshape(1:9,3,3); • A_Ap = A.^0.3 • A_Mp = A^0.3 • [V,D] = eig(A); • AAp = V*diag([D(1,1)^0.3,D(2,2)^0.3,D(3,3)^0.3])/V
标量的数组乘方和矩阵乘方 • A = reshape(1:9,3,3); • pA_A = (0.3).^A • pA_M = (0.3)^A
Sin的数组运算和矩阵运算比较 • A = reshape(1:9,3,3); • A_sinA = sin(A) • A_sinM = funm(A,'sin')