MATLAB课件 第八章 线性代数基础Word文件下载.docx
《MATLAB课件 第八章 线性代数基础Word文件下载.docx》由会员分享,可在线阅读,更多相关《MATLAB课件 第八章 线性代数基础Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
![MATLAB课件 第八章 线性代数基础Word文件下载.docx](https://file1.bdocx.com/fileroot1/2023-1/10/8dbf9847-ec4c-407f-b194-6573f625feb3/8dbf9847-ec4c-407f-b194-6573f625feb31.gif)
102030];
size(a)
43
length(a)ans=
注意size(a)与length(a)两者之间的区别。
1.4矩阵的迹
矩阵的迹定义为该矩阵对角线上的各元素之和,也等于该矩阵的特征值之和。
Matlab调用格式为:
trace();
【例5】求矩阵A=[1230;
2203;
3211]的迹
A=[1230;
3211];
trace(A)
32
1.5转置运算
在MATLAB中,矩阵转置运算的表达式和线性代数一样,即对于矩阵A,其转置矩阵的MATLAB表达式为A’或transpose(A)。
但应该注意,在MATLAB中,有几种类似于转置运算的矩阵元素变换运算是线性代数中没有的,他们是:
fliplr(A)将A左右翻转;
flipud(A)将A上下翻转;
rot90(A)将A逆时针方向旋转90。
【例6】求矩阵A=[1230;
3211]的转置矩阵
3211],B=A'
A=
1230
2203
3211
B=
123
2202
30311
transpose(A)
rot90(A)
30311
1.6逆矩阵运算
矩阵的逆运算是矩阵运算中很重要的一种运算。
它在线性代数及计算方法中都有很多的论述,而在MATLAB中,众多的复杂理论只变成了一个简单的命令inv()。
【例7】求矩阵A=[12;
34]的逆矩阵。
A=[12;
34],invA=inv(A),A*invA
12
34
invA=
-2.00001.0000
1.5000-0.5000
1.00000
0.00001.0000
从ans变量的结果可以看出,A的逆矩阵没有求错。
在线性代数教材中,通常采用初等行变换的方式来求解矩阵的逆。
这样的方法可以用以下方法可以实现:
34],n=size(A);
A1=[A,eye(n)];
A2=rref(A1);
invA=A2(:
1+n
(1):
end)
【例8】求矩阵A=[ab;
cd]的逆矩阵。
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
1.00002.0000
3.00006.0000
0.10000.3000
0.30000.9000
0.20000.4000
0.40000.8000
从结果可以看出,所求的广义逆矩阵满足以上的三个条件。
【例10】求矩阵A=[12;
34]的广义逆矩阵。
34];
invA=pinv(A)
1.8伴随矩阵
Matlab中没有直接求矩阵的伴随矩阵的函数,引入伴随矩阵的概念,实际上是为了求逆阵,一般数学软件都有求逆阵的函数。
如果A可逆,则A*=|A|A^(-1),伴随矩阵是容易求得的;
【例11】求矩阵A=[101;
212;
046]的伴随矩阵。
A=[101;
046],bsjz=det(A)*inv(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;
046]的伴随矩阵
046];
bsjz=bansui(A)
-2.00004.0000-1.0000
-12.00006.00000
8.0000-4.00001.0000
det(A)
6
A*bsjz
6.000000.0000
0.00006.00000.0000
00.00006.0000
从上面结果可以看出,A*bsjz=det(A)*E
【例13】求奇异矩阵A=[12;
36]的伴随矩阵
36];
6-2
-31
2.线性方程组求解
我们将线性方程的求解分为两类:
一类是方程组求唯一解或求特解,另一类是方程组求无穷解即通解。
可以通过系数矩阵的秩来判断:
若系数矩阵的秩和增广矩阵的秩相等且等于n(n为方程组中未知变量的个数),则有唯一解;
若系数矩阵的秩和增广矩阵的秩相等且r<
n,则有无穷解;
线性方程组的无穷解=对应齐次方程组的通解+非齐次方程组的一个特解;
其特解的求法属于解的第一类问题,通解部分属第二类问题。
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;
C=[A,B];
%构成增广矩阵
R=rref(C)
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'
)%求解空间的有理基
运行后显示结果如下:
-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)
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]'
回车可得:
3.0000
-4.0000
-1.0000
1.0000
或采用简化行阶梯形方法:
R=rref(C)
10003
0100-4
0010-1
00011
【例18】求解方程组的通解:
解法一:
在Matlab编辑器中建立M文件如下:
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_A<
n
C=null(A,'
)
else
X='
Equationhasnosolves'
end
运行后结果显示为:
2
R_B=
Warning:
Rankdeficient,rank=2tol=8.8373e-015.
InD:
\Matlab\pujun\lx0723.matline11
0
-8/15
3/5
C=
3/2-3/4
3/27/4
01
所以原方程组的通解为X=k1
+k2
+
解法二:
用rref求解
C=rref(B)%求增广矩阵的行最简形,可得最简同解方程组。
10-3/23/45/4
01-3/2-7/4-1/4
00000
对应齐次方程组的基础解系为:
,
非齐次方程组的特解为:
所以,原方程组的通解为:
X=k1
【例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);
R_A==n
(2)
n
(2)
X=pinv(A)*b
)
else
equitionnosolve'
编写完后,保存为mm.m文件,然后在窗口输入mm,回车后按提示输入系数矩阵和常数列,即可自动判定方程组解的情况并求出方程组的解。
mm
[12;
34]
[1;
2]
X=%方程组有唯一解的情况
1/2
24]
X=%方程组有无穷多解的情况
1/5
2/5
-2
1
3]
X=%方程组无解的情况
equitionnosolve