第五讲 线性代数中的数值计算问题
【 引 例 】 求下列三阶线性代数方程组的近似解



542
625
5452
321
321
321
xxx
xxx
xxx
MATLAB程序为:
A=[2 -5 4;1 5 -2;-1 2 4];
b=[5;6;5];
x=A\b
在 MATLAB命令窗口,先输入下列命令构造系数矩阵 A和右端向量 b:
A=[2 -5 4;1 5 -2;-1 2 4]
A = 2 -5 4
1 5 -2
-1 2 4
b=[5;6;5]
b = 5
6
5
然后只需输入命令 x=A\b即可求得解 x:
x=A\b
x = 2.7674
1.1860
1.3488
一,特殊矩阵的实现
1.零矩阵,所有元素值为零的矩阵称为零矩阵 。 零矩阵可以用 zeros函数实现 。 zeros是 MATLAB内部函数,使用格式如下:
zeros(m):产生 m m阶零矩阵;
zeros(m,n):产生 m n阶零矩阵,当 m=n时等同于
zeros(m);
zeros(size(A)):产生与矩阵 A同样大小的零矩阵。
一,特殊矩阵的实现常见的特殊矩阵有零矩阵、幺矩阵、单位矩阵、三角形矩阵等,这类特殊矩阵在线性代数中具有通用性;还有一类特殊矩阵在专门学科中有用,如有名的希尔伯特
(Hilbert)矩阵、范德蒙 (Vandermonde) 矩阵等。
2.幺矩阵,所有元素值为 1的矩阵称为幺矩阵。
幺矩阵可以用 ones函数实现。它的调用格式与
zeros函数一样。
【 例 1】 试用 ones分别建立 3 2阶幺矩阵,和与前例矩阵 A同样大小的幺矩阵 。
用 ones(3,2) 建立一个 3 2阶幺阵:
ones(3,2) % 一个 3 2阶幺阵
ans =1 1
1 1
1 1
一,特殊矩阵的实现
3.单位矩阵,主对角线的元素值为 1,其余元素值为 0的矩阵称为单位矩阵 。 它可以用 MATLAB内部函数 eye建立,
使用格式与 zeros相同 。
4.数量矩阵,主对角线的元素值为一常数 d,其余元素值为 0的矩阵称为数量矩阵 。 显然,当 d=1时,即为单位矩阵,故数量矩阵可以用 eye(m)*d或 eye(m,n)*d建立 。
一,特殊矩阵的实现
5.对角阵,对角线的元素值为常数,其余元素值为 0的矩阵称为对角阵 。 我们可以通过 MATLAB内部函数 diag,
利用一个向量构成对角阵;或从矩阵中提取某对角线构成一个向量 。 使用格式为 diag(V)和 diag(V,k)两种。
6.用一个向量 V构成一个对角阵设 V为具有 m个元素的向量,diag(V)将产生一个 m m
阶对角阵,其主对角线的元素值即为向量的元素值;
diag(V,k)将产生一个 n n(n=m+|k|,k为一整数 )阶对角阵,
其第 k条对角线的元素值即为向量的元素值。注意:当 k
> 0,则该对角线位于主对角线的上方第 k条;当 k< 0,
该对角线位于主对角线的下方第 |k|条;当 k=0,则等同于
diag(V)。用 diag建立的对角阵必是方阵。
一,特殊矩阵的实现
【 例 2】 已知向量 v,试建立以向量 v作为主对角线的对角阵 A;建立分别以向量 v作为主对角线两侧的对角线的对角阵 B和 C。
MATLAB程序如下:
v =[1;2;3]; % 建立一个已知的向量 A
A=diag(v)
A= 1 0 0
0 2 0
0 0 3
B=diag(v,1)
B = 0 1 0 0
0 0 2 0
0 0 0 3
0 0 0 0
C=diag(v,-1)
C = 0 0 0 0
1 0 0 0
0 2 0 0
0 0 3
% 按各种对角线情况构成相应的对角阵 A,B和 C
一,特殊矩阵的实现
7.从矩阵中提取某对角线我们也可以用 diag从矩阵中提取某对角线构成一个向量。设 A为 m n阶矩阵,diag(A)将从矩阵 A中提取其主对角线产生一个具有 min(m,n)个元素的向量。 diag(A,k)的功能是:
当 k> 0,则将从矩阵 A中提取位于主对角线的上方第 k条对角线构成一个具有 n-k个元素的向量;
当 k< 0,则将从矩阵 A中提取位于主对角线的下方第 |k|条对角线构成一个具有 m+k个元素的向量;
当 k=0,则等同于 diag(A)。
一,特殊矩阵的实现
【 例 3】 已知矩阵 A,试从矩阵 A分别提取主对角线及它两侧的对角线构成向量 B,C和 D。
MATLAB程序如下:
A=[1 2 3;4 5 6]; % 建立一个已知的 2 3阶矩阵 A
% 按各种对角线情况构成向量 B,C和 D
B=diag(A)
B = 1
5
C=diag(A,1)
C = 2
6
D=diag(A,-1)
D = 4
一,特殊矩阵的实现
8.上三角阵:使用格式为 triu(A),triu(A,k)
设 A为 m n阶矩阵,triu(A)将从矩阵 A中提取主对角线之上的上三角部分构成一个 m n阶上三角阵; triu(A,k)将从矩阵 A中提取主对角线第 |k|
条对角线之上的上三角部分构成一个 m n阶上三角阵。注意:这里的 k与 diag(A,k)的用法类似,
当 k> 0,则该对角线位于主对角线的上方第 k条;
当 k< 0,该对角线位于主对角线的下方第 |k|条;
当 k=0,则等同于 triu (A)
一,特殊矩阵的实现
【 例 4】 试分别用 triu(A),triu(A,1)和,triu(A,-1)从矩阵 A提取相应的上三角部分构成上三角阵 B,C和 D。
MATLAB程序如下:
A=[1 2 3;4 5 6;7 8 9;9 8 7]; % 一个已知的 4 3阶矩阵 A
% 构成各种情况的上三角阵 B,C和 D
B=triu(A)
B = 1 2 3
0 5 6
0 0 9
0 0 0
C=triu(A,1)
D=triu(A,-1)
一,特殊矩阵的实现
9.下三角阵:使用格式为 tril(A),tril(A,k)
tril的功能是从矩阵 A中提取下三角部分构成下三角阵 。
用法与 triu相同 。
10.空矩阵在 MATLAB里,把行数、列数为零的矩阵定义为空矩阵。空矩阵在数学意义上讲是空的,但在 MATLAB里确是很有用的。例如
A=[0.1 0.2 0.3;0.4 0.5 0.6];
B=find(A>1.0)
B = [ ]
这里 [ ]是空矩阵的符号,B=find(A>1.0)表示列出矩阵 A中值大于
1.0的元素的序号。当不能满足括号中的条件时,返回空矩阵。另外,
也可以将空矩阵赋给一个变量,如:
B=[ ]
B = [ ]
一,特殊矩阵的实现二、矩阵的特征值与特征向量对于 N N阶方阵 A,所谓 A的特征值问题是:
求数 λ和 N维非零向量 x( 通常为复数 ),使之满足下式:
A,x=λ? x
则称 λ为矩阵 A的一个特征值 ( 特征根 ),而非零向量 x为矩阵 A的特征值 λ所对应的特征向量 。
对一般的 N N阶方阵 A,其特征值通常为复数,若 A为实对称矩阵,则 A的特征值为实数 。
二、矩阵的特征值与特征向量
MATLAB提供的内部函数 eig可以用来计算特征值与特征向量 。 eig函数的使用格式有五种,其中 常 见 的 有 E=eig(A),[V,D]=eig(A) 和
[V,D]=eig(A,’nobalance’)三种,另外两种格式用来 计 算 矩 阵 的 广 义 特 征 值 与 特 征 向 量,
E=eig(A,B)和 [V,D]=eig(A,B)。
二、矩阵的特征值与特征向量
(1) E=eig(A):由 eig(A)返回方阵 A的 N个特征值,
构成向量 E;
(2) [V,D]=eig(A):由 eig(A)返回方阵 A的 N个特征值,构成 N N阶对角阵 D,其对角线上的 N个元素即为相应的特征值,同时将返回相应的特征向量赋予 N N阶方阵 V的对应列,且 A,V,D满足
A?V=V? D;
(3) [V,D]=eig(A,’nobalance’):本格式的功能与格式 (2) 一样,只是格式 (2)是先对 A作相似变换
(balance),然后再求其特征值与相应的特征向量;
而本格式则事先不作相似变换;
二、矩阵的特征值与特征向量
(4) E=eig(A,B):由 eig(A,B)返回 N N阶方阵 A
和 B的 N个广义特征值,构成向量 E。
(5) [V,D]=eig(A,B):由 eig(A,B)返回方阵 A和 B
的 N个广义特征值,构成 N N阶对角阵 D,其对角线上的 N个元素即为相应的广义特征值,同时将返回相应的特征向量构成 N N阶满秩矩阵,
且 满足 A?V=B? V? D。
二、矩阵的特征值与特征向量
【 例 5】 试用格式 (1)求下列对称矩阵 A的特征值;用格式 (2)求 A的特征值和相应的特征向量,
且验证之 。
A =[
1.0000 1.0000 0.5000
1.0000 1.0000 0.2500
0.5000 0.2500 2.0000 ];
执行 eig(A)将直接获得对称矩阵 A的三个实特征值:
二、矩阵的特征值与特征向量
eig(A)
ans = -0.0166
1.4801
2.5365
而下列命令则将其三个实特征值作为向量赋予变量 E:
E=eig(A)
E = -0.0166
1.4801
2.5365
二、矩阵的特征值与特征向量三、行列式的值
MATLAB提供的内部函数 det用来计算矩阵的行列式的值 。 设矩阵 A为一方阵 (必须是方阵 ),求矩阵 A的行列式值的格式为,det(A)。 注意:本函数同样能计算通过构造出的稀疏矩阵的行列式的值 。 关于如何构造稀疏矩阵,
将在本章最后一节介绍 。
三、行列式的值
【 例 6】 利用随机函数产生一个三阶方阵 A,然后计算方阵之行列式的值 。
A=rand(3)
A =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
det(A)
ans =
0.4289
四,矩阵求逆及其线性代数方程组求解
1,矩阵求逆若方阵 A,B满足等式
A*B = B*A = I (I为单位矩阵 )
则称 A为 B的逆矩阵,或称 B为 A的逆矩阵 。 这时 A,B都称为可逆矩阵 (或非奇异矩阵,或满秩矩阵 ),否则称为不可逆矩阵 (或奇异矩阵,或降秩矩阵 )。
四、矩阵求逆及其线性代数方程组求解
【 例 7】 试用 inv函数求方阵 A的逆阵 A-1赋值给
B,且验证 A与 A-1是互逆的 。
A=[1 -1 1;5 -4 3;2 1 1];
B=inv(A)
B =
-1.4000 0.4000 0.2000
0.2000 -0.2000 0.4000
2.6000 -0.6000 0.2000
A*B
ans =
1.0000 0.0000 0.0000
0.0000 1.0000 0.0000
0.0000 0.0000 1.0000
B*A
ans =
1.0000 0.0000 0.0000
0.0000 1.0000 0.0000
0.0000 0.0000 1.0000
四、矩阵求逆及其线性代数方程组求解
2,矩阵求逆解法利用求系数矩阵 A的逆阵 A-1,我们可以得到矩阵求逆解法 。 对于线性代数方程组 Ax=b,等号两侧各左乘 A-1,有:
A-1Ax=A-1b
由于 A-1A=I,故得:
x=A-1b
四、矩阵求逆及其线性代数方程组求解
【 例 8】 试用矩阵求逆解法求解 例 6.20中 矩阵
A为系数矩阵的线性代数方程组 Ax=b的解 。
A=[1 -1 1;5 -4 3;2 1 1];
b=[2;-3;1];
x=inv(A)*b
x =
-3.8000
1.4000
7.2000
四、矩阵求逆及其线性代数方程组求解
3,直接解法对于线性代数方程组 Ax=b,我们可以运用左除运算符,\”象解一元一次方程那样简单地求解:
x=A\b
当系数矩阵 A为 N*N的方阵时,MATLAB会自行用高斯消去法求解线性代数方程组 。 若右端项 b为 N*1的列向量,则 x=A\b可获得方程组的数值解 x( N*1的列向量 ) ;
若右端项 b为 N*M的矩阵,则 x=A\b可同时获得同一系数矩阵 A,M个方程组数值解 x( 为 N*M的矩阵 ),即
x(:,j)=A\b(:,j),j=1,2,… M。
四、矩阵求逆及其线性代数方程组求解

1
3
2
3
2
1
112
345
111
x
x
x
5
4
3
3
2
1
112
345
111
y
y
y
四、矩阵求逆及其线性代数方程组求解解法 1,分别解方程组 (1)Ax=b1; (2)Ay=b2
A=[1 -1 1;5 -4 3;2 1 1];
b1=[2;-3;1];
b2=[3;4;-5];
x=A\b1
x =
-3.8000
1.4000
7.2000
y=A\b2
-3.6000
-2.2000
4.4000
得两个线性代数方程组的解:
(1) x1= -3.8,x2= 1.4,x3= 7.2;
(2) y1= -3.8,y2= 1.4,y3= 7.2
四、矩阵求逆及其线性代数方程组求解解法 2,将 两个方程组连在一起求解,Az=b
b=[2 3;-3 4;1 -5]
z=A\b
z =
-3.8000 -3.6000
1.4000 -2.2000
7.2000 4.4000
很明显,这里的解 z的两个列向量便是前面分别求得的两组解 x和 y
四、矩阵求逆及其线性代数方程组求解习题
1、解方程组 Ax= b,分别用求逆解法与直接解法求其解。
2、编一个 m程序,求 N阶方阵 A的行列式的值。