怎么⽤matlab分解因式,MATLAB因式分解
4.1 因式分解
本节介绍线性代数的⼀些基本操作,包括⾏列式、逆和秩,LU分解和QR分解,以及范数等。其中LU分解和QR分解都是使⽤对⾓线上⽅或者下⽅的元素均为0的三⾓矩阵来进⾏计算。使⽤三⾓矩阵表⽰的线性⽅程组,可以通过向前或者向后置换很容易地得出结果。
4.1.1 ⾏列式、逆和秩
在MATLAB中,⽤户可以通过以下命令来计算矩阵A的⾏列式、逆和矩阵的秩。
(1)det(A):求⽅阵A的⾏列式。
(2)rank(A):求矩阵A的秩,即A中线性⽆关的⾏数和列数。
(3)inv(A):求⽅阵A的逆矩阵。如果A是奇异矩阵或者近似奇异矩阵,则会给出⼀个错误信息。
(4)pinv(A):求矩阵A的伪逆。如果A是m×n的矩阵,则伪逆的尺⼨为n×m。对于⾮奇矩阵A来说,有pinv(A)=inv(A)。
(5)trance(A):求矩阵A的迹,也就是对⾓线元素之和。
下⾯⽤具体⽰例对矩阵⾏列式、逆和秩作简要的说明。
【例4-1】 矩阵的⾏列式计算⽰例。
det函数可以⽤来计算矩阵的⾏列式。
>> A1=[1 2;3 4] % 创建矩阵A1
1 2
3 4
>> A2=[1 2;3,6] % 创建矩阵A2
1 2
3 6
>> A3=[1 2;3 4;5 6] % 创建矩阵A3
1 2
3 4
5 6
>> det1=det(A1) % 求⽅阵A1的⾏列式
>> det2=det(A2) % 求⽅阵A2的⾏列式
>> det3=det(A3) % 注意⾮⽅阵的⾏列式没有意义
Error using ==> det
Matrix must be square.
>> det_1=det(A1') % 实数矩阵的⾏列式和它的转置的⾏列式相同
>> det_2=det(A2')
>> det_3=det(A3')
Error using ==> det
Matrix must be square.
本例使⽤det函数计算A3的⾏列式时返回了错误信息,提醒⽤户A3必须是是⽅阵才可以调⽤det函数。
【例4-2】 矩阵的逆计算⽰例。
本例在上例创建的矩阵基础上进⾏演⽰。
>> inv1=inv(A1)
-2.0000 1.0000
1.5000 -0.5000
>> inv2=inv(A2) % A2⾏列式为0,不存在逆矩阵
Warning: Matrix is singular to working precision.
Inf Inf
Inf Inf
>> inv3=inv(A3) % ⾮⽅阵不存在逆矩阵
Error using ==> inv
Matrix must be square.
>> detinv1=det(inv(A1)) % A1的逆矩阵的⾏列式就等于1/det(A1)
>> 1/det(A1)
【例4-3】 使⽤pinv函数计算矩阵的伪逆⽰例。
>> pinv1=pinv(A1) % A1的逆矩阵和它的伪逆是⼀样的
-2.0000 1.0000
1.5000 -0.5000
>> pinv2=pinv(A2)
0.0200 0.0600
0.0400 0.1200
>> pinv3=pinv(A3)
-1.3333 -0.3333 0.6667
1.0833 0.3333 -0.4167
本例调⽤pinv函数计算了矩阵A1、A2、A3的伪逆。因为矩阵A2⾏列式为0,矩阵A3不是⽅阵,所以不能求矩阵A2和A3的逆,但是可以求这两个矩阵的伪逆。
【例4-4】 使⽤rank函数求解矩阵的秩⽰例。
>> rank1=rank(A1)
>> rank2=rank(A2)
>> rank3=rank(A3)
>> rank_1=rank(A1')
>> rank_2=rank(A2')
>> rank_3=rank(A3')
从本例中可以看出矩阵的秩和它的转置的秩相同。
通过上⾯的这4个例⼦,可以总结出以下规律。
(1)只有⽅阵的⾏列式才有意义。
(2)只有⽅阵的逆才有意义,但如果⽅阵的⾏列式为0,该⽅阵则不存在逆矩阵。
(3)如果⽅阵的逆矩阵存在,它的伪逆和逆相同。
(4)如果⽅阵的逆矩阵存在,它的逆矩阵的⾏列式det(A-1)等于1/det(A)。
(5)矩阵的秩和它的转置的秩相同。
(6)实数矩阵的⾏列式和它的转置矩阵的⾏列式相同。
4.1.2 Cholesky因式分解
分解法是将原⽅阵分解成⼀个上三⾓形矩阵(或是以不同次序排列的上三⾓阵)和⼀个下三⾓形矩阵,这样的分解法⼜称为三⾓分解法,它主要⽤于简化⼤矩阵⾏列式值的计算过程、求逆矩阵和求解联⽴⽅程组。需要注意的是:这种分解法所得到的上下三⾓阵并不是唯⼀的,可以到多个不同的上下三⾓阵对,每对三⾓阵相乘都会得到原矩阵。
对线性系统的求解,MATLAB依据系数矩阵A的不同,⽽相应地使⽤不同的⽅法。如有可能,MATLAB会先分析矩阵的结构。例如A是对称且正定的,则使⽤Cholesky分解。
如果没有到可以替代的⽅法,则采⽤⾼斯消元法和部分主元法,主要是对矩阵进⾏LU因式分解或LU分解。这种⽅法就是令A=LU,其中A是⽅阵,U是⼀个上三⾓矩阵,L是⼀个带有单位对⾓线的下三⾓矩阵。
Cholesky因式分解是把⼀个对称正定矩阵A分解为⼀个上三⾓矩阵R和其转置矩阵的乘积,其对应的表达式为:A=R'R。从理论上说,并不是所有的对称矩阵都可以进⾏Cholesky因式分解,只有正定矩阵才可以。
Pascal矩阵就是⼀个有趣的例⼦。下⾯以Pascal矩阵为例,说明Cholesky因式分解的使⽤⽅法。
【例4-5】 Cholesky因式分解⽰例。
>> A = pascal(6) % 创建Pascal矩阵
1 1 1 1 1 1
1 2 3 4 5 6
1 3 6 10 15 21
1 4 10 20 35 56
1 6 21 56 126 252
矩阵A的元素是⼆项式系数,每⼀个元素都是上⽅和左⽅两个元素的和。在MATLAB中,进⾏Cholesky因式分解的是chol函数。矩阵A的Cholesky因式分解可以通过以下命令得到:
>> R = chol(A)
1 1 1 1 1 1
0 1 2 3 4 5
0 0 1 3 6 10
0 0 0 1 4 10
0 0 0 0 1 5
0 0 0 0 0 1
得到的矩阵R的元素同样也是⼆项式系数。
Cholesky因式分解允许线性⽅程组A x = b被R’Rx=b代替。在MATLAB环境中,这个线性⽅程组可以通过以下命令来求解:
>> x=R\(R'\b)
4.1.3 LU因式分解
LU分解法主要⽤于简化⼤矩阵⾏列式值的计算过程、求逆矩阵和求解联⽴⽅程组。需要注意的是:这种分解法得到的上下三⾓阵对并不是唯⼀的,可以到多个不同的上下三⾓阵对,每对三⾓阵相乘都会得到原矩阵。
在MATLAB中,求矩阵A的LU分解的调⽤函数是lu,调⽤格式如下:
[L,U]=lu(A)
另外,矩阵A的LU分解为线性系统A*x=b提供了以下表达式来快速求解:
【例4-6】 矩阵A的LU分解⽰例。
>> A=[5 2 0;2 6 2;5 6 7]
5 2 0
2 6 2
5 6 7
>> [L,U]=lu(A) % 分解所得L是带有单位对⾓线的下三⾓矩阵,U是上三⾓矩阵
1.0000 0 0
0.4000 1.0000 0
1.0000 0.7692 1.0000
5.0000 2.0000 0
0 5.2000 2.0000
0 0 5.4615
>> L*U % 验证结果
5 2 0
2 6 2
5 6 7
【例4-7】 矩阵A的LU分解实例。
>> A=[1 2 3;4 5 6;7 8 9];
>> [L,U]=lu(A);
>> B=[9 8 7;6 5 4; 3 2 1];
>> x=U\(L\B)
Warning: Matrix is close to singular or badlyscaled.
Results may be inaccurate. RCOND =1.e-017.
-27 -26 -17
42 41 24
-16 -16 -8
>> A*x % 验证结果
9 8 7
6 5 4
3 2 1
4.1.4 QR因式分解
如果A是正交矩阵,那么它满⾜A’A=1。⼆维坐标旋转变换矩阵就是⼀个简单的正交矩阵:
矩阵的正交分解⼜称做QR分解,是将矩阵分解成⼀个单位正交矩阵和上三⾓形矩阵。假设A是m×n的矩阵,那么A就可以分解成:
其中Q是⼀个正交矩阵,R是⼀个维数和A相同的上三⾓矩阵,因此Ax=B可以表⽰为QRx=B或者等同于Rx=QB。这个⽅程组的系数矩阵是上三⾓的,因此容易求解。
在MATLAB中,⽤户可以调⽤函数qr来求QR因式分解,这个命令可⽤于分解m×n的矩阵,假设A是m×n的矩阵。qr函数常⽤调⽤格式有以下⼏种。
(1)[Q,R]=qr(A):求得m×m阶矩阵Q和m×n阶上三⾓矩阵R。Q和R满⾜A=QR。
(2)[Q,R,P]= qr(A):求得矩阵Q,上三⾓矩阵R和置换矩阵P。R的对⾓线元素按⼤⼩降序排列,且满⾜AP=QR。
(3)[Q,R]= qr(A,0):求矩阵A的QR因式分解。如果在m×n的矩阵A中⾏数⼩于列数,则给出Q的前n列。
(4)[Q1,R1]=gradelete(Q,R,j):求去掉矩阵A中第j列之后形成的矩阵的QR因式分解,矩阵Q和R是A的QR因⼦。
(5)[Q1,R1]=qrinset(Q,R,b,j):求在矩阵A的第j列前插⼊列向量b后形成的矩阵的QR因式分解,矩阵Q和R是A的QR因⼦。如果j=n+1,那么插⼊的⼀列放在最后。
【例4-8】 QR分解⽰例。已知魔⽅矩阵
对其进⾏QR分解。
⽤户只需要调⽤qr函数就可以实现对A进⾏QR分解。具体过程如下:
>> A=magic(3)
8 1 6
3 5 7
4 9 2
rank函数怎么用>> [Q,R]=qr(A) % QR分解
-0.8480 0.5223 0.0901
-0.3180 -0.3655 -0.8748
-0.4240 -0.7705 0.4760
-9.4340 -6.2540 -8.1620
0 -8.2394 -0.9655
0 0 -4.6314
>> Q*R % 验证结果
发布评论