首页 > 编程笔记
MATLAB schur()函数的用法
舒尔分解是 Schur 于 1909 年提出的一种矩阵分解方法,它是一种典型的酉相似变换,这种变换的最大好处是能够保持数值稳定,因此它在工程计算中也是重要工具之一。
对于矩阵 A∈Cn×n,所谓的舒尔分解,具体是指找一个酉矩阵 U∈Cn×n,使得 UHAU=T,其中 T 为上三角矩阵,称为舒尔矩阵,其对角元素为矩阵 A 的特征值。在 MATLAB 中,这种分解是通过 schur() 函数来实现的。
schur() 函数的调用格式如下表所示。
【实例】求下列矩阵的舒尔分解。
MATLAB 程序如下:
下面,利用这两种方法求上例中矩阵 A 的舒尔分解:
对于矩阵 A∈Cn×n,所谓的舒尔分解,具体是指找一个酉矩阵 U∈Cn×n,使得 UHAU=T,其中 T 为上三角矩阵,称为舒尔矩阵,其对角元素为矩阵 A 的特征值。在 MATLAB 中,这种分解是通过 schur() 函数来实现的。
schur() 函数的调用格式如下表所示。
调用格式 | 说明 |
---|---|
T = schur(A) | 返回舒尔矩阵 T,若 A 有复特征值,则相应的对角元素以 2x2 的块矩阵形式给出 |
T = schur(A,flag) | 若 A 有复特征值,则 flag='complex',否则 flag='real' |
[U,T] = schur(A,…) | 返回酉矩阵 U 和舒尔矩阵 T |
【实例】求下列矩阵的舒尔分解。
MATLAB 程序如下:
>> clear % 清除工作区的变量 >> A=[1 2 3 4;2 5 7 8;3 7 6 9;4 8 9 1]; % 创建矩阵A >> [U,T]=schur(A) % 对矩阵A进行舒尔分解,返回酉矩阵U和舒尔矩阵T U = -0.2080 0.3018 -0.8974 0.2456 -0.3165 0.6413 0.4380 0.5448 -0.3712 -0.7055 0.0140 0.6036 0.8478 0.0045 -0.0506 0.5278 T = -6.9077 0 0 0 0 -1.7036 0 0 0 0 0.2024 0 0 0 0 21.4089 >> lambda=eig(A) % 求A的特征值,返回一个包含 A 的特征值的列向量 lambda = -6.9077 -1.7036 0.2024 21.4089对于有复特征值的矩阵,可以利用 [U,T]=schur(A,'copmlex') 求其舒尔分解,也可利用 rsf2csf 命令将上例中的U、T转化为复矩阵。
下面,利用这两种方法求上例中矩阵 A 的舒尔分解:
>> clear % 清除工作区的变量 >> A=[1 2 3 4;2 5 7 8;3 7 6 9;4 8 9 1]; % 输入矩阵A >> [U,T]=schur(A,'complex') % 求实矩阵A的舒尔分解,返回酉矩阵U和舒尔矩阵T,T 是三角复矩阵,且具有复数特征值 U = -0.2080 0.3018 -0.8974 0.2456 -0.3165 0.6413 0.4380 0.5448 -0.3712 -0.7055 0.0140 0.6036 0.8478 0.0045 -0.0506 0.5278 T = -6.9077 0 0 0 0 -1.7036 0 0 0 0 0.2024 0 0 0 0 21.4089 >> [U,T]=schur(A); % 求实矩阵A的舒尔分解,返回酉矩阵U和舒尔矩阵T >> [U,T]=rsf2csf(U,T) % 将实数 Schur 形式转换为复数 Schur 形式 U = -0.2080 0.3018 -0.8974 0.2456 -0.3165 0.6413 0.4380 0.5448 -0.3712 -0.7055 0.0140 0.6036 0.8478 0.0045 -0.0506 0.5278 T = -6.9077 0 0 0 0 -1.7036 0 0 0 0 0.2024 0 0 0 0 21.4089