MATLAB课件 第八章 线性代数基础.docx
《MATLAB课件 第八章 线性代数基础.docx》由会员分享,可在线阅读,更多相关《MATLAB课件 第八章 线性代数基础.docx(15页珍藏版)》请在冰豆网上搜索。
![MATLAB课件 第八章 线性代数基础.docx](https://file1.bdocx.com/fileroot1/2023-1/10/8dbf9847-ec4c-407f-b194-6573f625feb3/8dbf9847-ec4c-407f-b194-6573f625feb31.gif)
MATLAB课件第八章线性代数基础
第八章线性代数基础
1.矩阵的重要运算
1.1方阵的行列式
方阵的行列式的值由det函数计算得出;
【例1】计算矩阵A=[122;235;457]的行列式的值。
>>A=[122;235;457];det(A)
ans=
4
【例2】计算矩阵A=[ab;cd]的行列式的值。
>>symsabcd;A=[ab;cd],det(A)
A=
[a,b]
[c,d]
ans=
a*d-b*c
1.2矩阵的秩
矩阵的秩由rank函数来计算。
【例3】计算矩阵A=[122;235;457]的秩。
>>rank(A)
ans=
3
1.3矩阵的维数和长度
size()%求矩阵的维数(columns&rows)。
length()%求矩阵的长度,矩阵的长度用向量(或columns)数定义。
表示的是矩阵的列数和行数中的最大数。
【例4】>>a=[10,20,42;34,20,4;198,34,6;102030];
>>size(a)
ans=
43
>>length(a)ans=
4
注意size(a)与length(a)两者之间的区别。
1.4矩阵的迹
矩阵的迹定义为该矩阵对角线上的各元素之和,也等于该矩阵的特征值之和。
Matlab调用格式为:
trace();
【例5】求矩阵A=[1230;2203;3211]的迹
>>A=[1230;2203;3211];trace(A)
ans=
32
1.5转置运算
在MATLAB中,矩阵转置运算的表达式和线性代数一样,即对于矩阵A,其转置矩阵的MATLAB表达式为A’或transpose(A)。
但应该注意,在MATLAB中,有几种类似于转置运算的矩阵元素变换运算是线性代数中没有的,他们是:
fliplr(A)将A左右翻转;
flipud(A)将A上下翻转;
rot90(A)将A逆时针方向旋转90。
【例6】求矩阵A=[1230;2203;3211]的转置矩阵
>>A=[1230;2203;3211],B=A'
A=
1230
2203
3211
B=
123
2202
30311
>>transpose(A)
ans=
123
2202
30311
>>rot90(A)
ans=
30311
2202
123
1.6逆矩阵运算
矩阵的逆运算是矩阵运算中很重要的一种运算。
它在线性代数及计算方法中都有很多的论述,而在MATLAB中,众多的复杂理论只变成了一个简单的命令inv()。
【例7】求矩阵A=[12;34]的逆矩阵。
>>A=[12;34],invA=inv(A),A*invA
A=
12
34
invA=
-2.00001.0000
1.5000-0.5000
ans=
1.00000
0.00001.0000
从ans变量的结果可以看出,A的逆矩阵没有求错。
在线性代数教材中,通常采用初等行变换的方式来求解矩阵的逆。
这样的方法可以用以下方法可以实现:
>>A=[12;34],n=size(A);A1=[A,eye(n)];A2=rref(A1);invA=A2(:
1+n
(1):
end)
A=
12
34
invA=
-2.00001.0000
1.5000-0.5000
【例8】求矩阵A=[ab;cd]的逆矩阵。
>>symsabcd;A=[ab;cd];invA=inv(A)
invA=
[d/(a*d-b*c),-b/(a*d-b*c)]
[-c/(a*d-b*c),a/(a*d-b*c)]
1.7广义逆矩阵
由线代知识知道,如果矩阵奇异,则逆矩阵不存在,另外,长方形的矩阵有时也会涉及到求逆的问题,这样就需要定义一种新的“逆矩阵”。
对于矩阵A,如果存在一个矩阵N,满足ANA=A,则N矩阵称为A的广义逆矩阵,记作
,如果A是一个n×m的长方形矩阵,则N为m×n阶的矩阵。
满足这样的广义逆矩阵有无穷多个。
可以证明,对于一个给定的矩阵A,存在一个唯一的矩阵M使得下面的3个条件同时成立:
1)AMA=A2)MAM=M3)AM与MA均为对称矩阵
这样的矩阵M称为矩阵A的Moore-Penrose广义逆矩阵,记作
。
MATLAB提供了求取矩阵Moore-Penrose广义逆矩阵的函数pinv(),其格式为:
M=pinv(A)%按默认精度求取Moore-Penrose广义逆矩阵
M=pinv(A,e)%按指定精度e求取Moore-Penrose广义逆矩阵
其中,e为判0用误差限,如果省略此参数,则判0用误差限选用机器的精度eps.如果A是非奇异方阵,则该函数得出的结果就是矩阵的逆矩阵,但这样求解的速度将明显慢于函数inv().
【例9】求奇异矩阵A=[12;36]的广义逆矩阵
>>pinv(A);M=pinv(A),A*M*A,M*A*M,A*M,M*A
M=
0.02000.0600
0.04000.1200
ans=
1.00002.0000
3.00006.0000
ans=
0.02000.0600
0.04000.1200
ans=
0.10000.3000
0.30000.9000
ans=
0.20000.4000
0.40000.8000
从结果可以看出,所求的广义逆矩阵满足以上的三个条件。
【例10】求矩阵A=[12;34]的广义逆矩阵。
>>A=[12;34];invA=pinv(A)
invA=
-2.00001.0000
1.5000-0.5000
1.8伴随矩阵
Matlab中没有直接求矩阵的伴随矩阵的函数,引入伴随矩阵的概念,实际上是为了求逆阵,一般数学软件都有求逆阵的函数。
如果A可逆,则A*=|A|A^(-1),伴随矩阵是容易求得的;
【例11】求矩阵A=[101;212;046]的伴随矩阵。
>>A=[101;212;046],bsjz=det(A)*inv(A)
A=
101
212
046
bsjz=
-24-1
-1260
8-41
下面是自编的函数bansui(),可以直接求得伴随矩阵,但注意一定要将该函数保存在搜索路径之下。
functionB=bansui(A)
ce=poly(eig(A));
cesize=max(size(ce));
p=[0ce(1:
(cesize-1))];
s=(-1)^(max(size(A))+1);
B=s*polyvalm(p,A);
【例12】求矩阵A=[101;212;046]的伴随矩阵
>>A=[101;212;046];bsjz=bansui(A)
bsjz=
-2.00004.0000-1.0000
-12.00006.00000
8.0000-4.00001.0000
>>det(A)
ans=
6
>>A*bsjz
ans=
6.000000.0000
0.00006.00000.0000
00.00006.0000
从上面结果可以看出,A*bsjz=det(A)*E
【例13】求奇异矩阵A=[12;36]的伴随矩阵
>>A=[12;36];bsjz=bansui(A)
bsjz=
6-2
-31
2.线性方程组求解
我们将线性方程的求解分为两类:
一类是方程组求唯一解或求特解,另一类是方程组求无穷解即通解。
可以通过系数矩阵的秩来判断:
若系数矩阵的秩和增广矩阵的秩相等且等于n(n为方程组中未知变量的个数),则有唯一解;
若系数矩阵的秩和增广矩阵的秩相等且r线性方程组的无穷解=对应齐次方程组的通解+非齐次方程组的一个特解;其特解的求法属于解的第一类问题,通解部分属第二类问题。
2.1求线性方程组的唯一解或特解(第一类问题)
利用矩阵除法求线性方程组的特解(或一个解)
方程:
AX=b
解法1:
X=A\b
【例14】求方程组的解
解:
>>A=[56000
15600
01560
00156
00015];
B=[10001]';
R_A=rank(A)%求秩
X=A\B%求解或X=inv(A)*B
运行后结果如下
R_A=
5
X=
2.2662
-1.7218
1.0571
-0.5940
0.3188
这就是方程组的解。
解法2.用函数rref求解:
>>C=[A,B]%由系数矩阵和常数列构成增广矩阵C
>>R=rref(C)%将C化成行最简行
R=
1.000000002.2662
01.0000000-1.7218
001.0000001.0571
0001.00000-0.5940
00001.00000.3188
则R的最后一列元素就是所求之解。
【例15】求方程组
的一个特解。
解:
>>A=[11-3-1;3-1-34;15-9-8];
>>B=[140]';
>>X=A\B%由于系数矩阵不满秩,该解法可能存在误差。
X=[00-0.53330.6000]’(一个特解近似值)。
此时,不能采用如下命令:
x=inv(A)*B,因为inv要求矩阵为方阵。
而用命令:
x=pinv(A)*B
x=[0.3504-0.0916-0.38810.4232],可用A*x验算
注:
如果矩阵A不是一个方阵,或者A是一个非满秩的方阵时,A没有逆矩阵,但可以找到一个与A的转置同型的矩阵B,使得A*B*A=A,B*A*B=B,此时称B为A的伪逆,也称广义逆矩阵。
使用:
pinv(A)
若用rref求解,则比较精确:
>>A=[11-3-1;3-1-34;15-9-8];
B=[140]';
>>C=[A,B];%构成增广矩阵
>>R=rref(C)
R=
1.00000-1.50000.75001.2500
01.0000-1.5000-1.7500-0.2500
00000
由此得解向量X=[1.2500–0.250000]’(一个特解)。
2.2求线性齐次方程组的通解
在Matlab中,函数null[nʌl]用来求解零空间,即满足A·X=0的解空间,实际上是求出解空间的一组基(基础解系)。
对齐次线性方程组Ax=0;
格式z=null(A)%z的列向量为方程组的正交规范基,满足
。
z=null(A,’r’)%z的列向量是方程AX=0的有理基
如果A为数值矩阵,调用null(A,’r’);或调用null(A)
如果A为符号矩阵,只能调用null(A)
【例16】求解方程组的通解:
解:
>>A=[111-1;1-11-3;1311];
>>formatrat%指定有理式格式输出
>>B=null(A,'r')%求解空间的有理基
运行后显示结果如下:
B=
-12
0-1
10
01
即方程组的通解为:
若调用:
c=null(A),则应:
>>formatshort
>>c=null(A)
得:
c=
-0.50000.7071
-0.1667-0.4714
0.83330.2357
0.16670.4714
或通过行最简型得到基:
>>B=rref(A)
B=
101-2
0101
0000
2.3求非齐次线性方程组的通解
非齐次线性方程组需要先判断方程组是否有解,若有解,再去求通解。
因此,步骤为:
第一步:
判断AX=b是否有解,若有解则进行第二步
第二步:
求AX=b的一个特解
第三步:
求AX=0的通解
第四步:
AX=b的通解=AX=0的通解+AX=b的一个特解。
【例17】求方程组的解
解:
>>A=[101-1;0113;0211;14-76];
B=[1-2-80]';
R_A=rank(A)%求秩
X=A\B%求解或X=inv(A)*B
回车可得:
R_A=
4
X=
3.0000
-4.0000
-1.0000
1.0000
或采用简化行阶梯形方法:
>>C=[A,B];R=rref(C)
R=
10003
0100-4
0010-1
00011
则R的最后一列元素就是所求之解。
【例18】求解方程组的通解:
解法一:
在Matlab编辑器中建立M文件如下:
A=[11-3-1;3-1-34;15-9-8];
b=[140]';
B=[Ab];
n=4;
R_A=rank(A)
R_B=rank(B)
formatrat
ifR_A==R_B&R_A==n
X=A\b
elseifR_A==R_B&R_AX=A\b
C=null(A,'r')
else
X='Equationhasnosolves'
end
运行后结果显示为:
R_A=
2
R_B=
2
Warning:
Rankdeficient,rank=2tol=8.8373e-015.
>InD:
\Matlab\pujun\lx0723.matline11
X=
0
0
-8/15
3/5
C=
3/2-3/4
3/27/4
10
01
所以原方程组的通解为X=k1
+k2
+
解法二:
用rref求解
A=[11-3-1;3-1-34;15-9-8];
b=[140]';
B=[Ab];
C=rref(B)%求增广矩阵的行最简形,可得最简同解方程组。
运行后结果显示为:
C=
10-3/23/45/4
01-3/2-7/4-1/4
00000
对应齐次方程组的基础解系为:
,
非齐次方程组的特解为:
所以,原方程组的通解为:
X=k1
+k2
+
。
【例19】:
编写程序求解AX=b,要求由人机交互模式输入矩阵A,b,并根据判定定理给出各种情况的求解答案。
解:
编写程序如下:
A=input('PleaseinputmatrixA:
');
b=input('Pleaseinputmatrixb:
');
B=[A,b];
n=size(A);
R_A=rank(A);
R_B=rank(B);
formatrat
ifR_A==R_B&R_A==n
(2)
X=A\b
elseifR_A==R_B&R_A(2)
X=pinv(A)*b
C=null(A,'r')
else
X='equitionnosolve'
end
编写完后,保存为mm.m文件,然后在窗口输入mm,回车后按提示输入系数矩阵和常数列,即可自动判定方程组解的情况并求出方程组的解。
>>mm
PleaseinputmatrixA:
[12;34]
Pleaseinputmatrixb:
[1;2]
X=%方程组有唯一解的情况
0
1/2
>>mm
PleaseinputmatrixA:
[12;24]
Pleaseinputmatrixb:
[1;2]
X=%方程组有无穷多解的情况
1/5
2/5
C=
-2
1
>>mm
PleaseinputmatrixA:
[12;24]
Pleaseinputmatrixb:
[1;3]
X=%方程组无解的情况
equitionnosolve