You are on page 1of 159

所有数值功能都足以矩阵为基本单元进行的

线性代数、统计分析等
应用数学学科中,光学
第2章 矩阵分析 天体物理、量子力学计
算机科学,三维动画
2.1 矩阵和向量创建
2.2 矩阵的重组
2.3 稀疏矩阵
2.4 矩阵操作函数 det,inv,eig
2.5 线性方程组求解
2.6 矩阵运算与数组运算
 1 2 3
2.1.1 矩阵的创建  
 4 5 6 
1. 矩阵直接输入法 7 8 9
 
>> A = [1 2 3; 4 5 6; 7 8 9]

 用方括号 “ [ ]” 括起
 同一行中元素间用 空格 或 逗号 分隔
矩阵: m×n
 行与行间用 分号分开 向量: 1×n ; m×1
标量: 1×1
 元素可以是数值或表达式. 空矩阵 [ ] : 0×0
复数矩阵输入——矩阵相加法

例 >> R=[1 2 3;4 5 6];


>> M=[11 12 13;14 15 16];
>> CN=R+i*M
CN =
1 + 11i 2 + 12i 3 +13i
4 + 14i 5 + 15i 6 +16i
2. 函数法 : ① 通用特殊矩阵的生成
零矩阵 zeros
zeros(m,n) m×n 零矩阵
zeros(n) n×n 零矩阵
zeros(size(A)) 矩阵 A 同样大小的零矩阵
壹矩阵 ones ones(m,n), ones(n), ones(size(A))

>> a=zeros(2) size(A): 矩阵的大小,即行和列


a=0 0
0 0
>> b=a+3 用来创建占位矩阵,
a=3 3 以后添加元素值。
3 3 常用程序循环结构
提高运行速度
① 通用特殊矩阵的生成
单位矩阵 eye 主对角线全为 1,
eye(n), eye(m,n), eye(size(A))
随机矩阵 rand 0 ~ 1 间均匀分布 ,
rand(n) , rand(m,n) , rand(size(A))
正态随机矩阵 均值为 0 ,均方差 σ 为 1 的标准正态分布
randn randn(n) , randn(m,n) , randn(size(A))

例 建立随机矩阵:
(1) 在区间 [20,50] 内均匀分布 5 阶随机矩阵。
(2) 均值 0.6 、方差 0.1 的 5 阶正态分布随机矩阵。

x=20+(50-20)*rand(5)
y=0.6+sqrt(0.1)*randn(5)
方差 标准差(均方差)
② 专门学科特殊矩阵

魔术(方)矩阵
magic(n)
矩阵的每行、每列、及两条对
角线的元素之和都相等

>> magic(4)
ans =
16 2 3 13
5 11 10 8 德国画家、版画家阿尔布雷特 ·
丢勒于 1514 年创作的铜版画
9 7 6 12 《忧郁》
4 14 15 1 亚里士多德派学者观点——“所有能够取
得伟大艺术成就的人都是忧郁的”
② 专门学科特殊矩阵 方阵
希尔伯特 有名病态矩阵 , 任何一个元素发生一点变动,整个矩阵值和逆矩
Hilb ( n ) 阵都会发生巨大变化,病态程度和阶数相关。
1
A(i, j ) 
i  j 1
帕斯卡 杨辉三角形矩阵,第 1 行和第 1 列都为 1 ,其余元素为其相邻的
pascal ( n 左面和上面元素之和。
) 是二项式 (x+y)n 系数在三角形中的一种几何排列

>> format rat 例 >> pascal(3)


>> hilb(3) 1 1 1
1 1/2 1/3 +
1 2 3 +
1/2 1/3 1/4
1/3 1/4 1/5 1 + 3 +6
范德蒙德 最后一列全为 1 ,倒数第二列为一个指定的向量 V ,其他各列是其后
vander(v) 列与倒数第二列的点乘

托普利兹 范德蒙德
矩阵除第一行和第一列外,其他每个元素都与其相邻
toeplitz ( x, 左上角的元素相同 . 用法: toeplitz(x,y) 或者( x ) ,
y) 这里 x 和 y 都为向量,生成以 x 为第一列, y 为第一
行的 toeplitz 矩阵

>> x=linspace(1,5,4)

>> y=1:2:5 A(i, j )  V (i ) ^ (n  j )
>> z=toeplitz(x,y)

z =1.0000 3.0000 5.0000


2.3333 1.0000 3.0000
3.6667 2.3333 1.0000
5.0000 3.6667 2.3333
行向量 1×n 列向量 m×1

2.1.2 向量的创建

1. 冒号法( :)
2. 函数法 linspace, logspace
1. 冒号法(数组) >> 1:2:5
ans = 1 3 5
>> 1:2:6
冒号 (:) 生成线性等分向量 ans = 1 3 5

x1 :h: x2 x1 起始值, h 步长, x2 终止



x1 : x2 步长 h=1 可省略
X2 不一定是尾
元素值,除非
元素个数 (x2 – x1)/h+1
能被步长整除
2. 函数法 :
① 线性等分向量 linspace(x1,x2,n)

x1 起始值 , x2 终始值 ,n 个元素

>> linspace(1,7,4) 例
步长 (x2 – x1)/(n-1)
ans = 1 3 5 7
例 >> a=1:2:9
a= 1 3 5 7 9
>> a=linspace(1,9,5)
a= 1 3 5 7 9
>> a=linspace(1,9,4)
a = 1.0000 3.6667 6.3333 9.0000
② 对数等分向量
自动控制、数字信号处理中常要对数刻度坐标

y=logspace ( x1 , x2
,n)
生成 n 维对数等分向量,使得 y(1)=10x1 , y(n)=10x2;

a2=logspace(0,5,6)
a2 = 1 10 100 1000 10000 100000
2.1.3
2.2.43 矩阵信息
1. 矩阵尺寸函数
2.2 矩阵的重组
1. 提取矩阵
2. 矩阵的部分修改
3. 矩阵行列的删除
4. 矩阵的合并
5. 矩阵的结构改变
6. 矩阵的抽取
矩阵元素标识 ----- 访问矩阵元素

元素单下标表示法
A(k)
A 矩阵存储第 k 位置元素

元素全下标表示法

A(i,j) A 矩阵第 i 行第 j 列元素


1. 提取矩阵 下标法进行元素访问

冒号提取矩阵的几行或几列 : k m

A(:,:) 二维矩阵 A 的所有元素


i
A(i:j,:) 第 i 行到 j 行的子矩阵
j
A(:,k:m) 第 k 列到第 m 列的子矩阵

A(i:j,k:n) 第 i 到第 j 行和第 k 到第 n 列的子

矩阵。
>> a=[2:6;4:8;7:11]
例 a =2 3 4 5 6
4 5 6 7 8
7 8 9 10 11
>> a(2,3)
ans = 6
>> a(2,:)
ans = 4 5 6 7 8
>> a(2:3,2:4)
ans = 5 6 7
8 9 10
冒号提取矩阵的一行或一列 :
A(m,:) 矩阵 A 第 m 行
n
A(:,n) 矩阵 A 第 n 列
A(:) 矩阵 A 所有元素
A(k:m) 矩阵 A 第 k 到第 m 个元素

m
plot(stress(:,1),stress(:,2))
例 aaa = 16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> aaa=a(:,2)
aaa =2
11
7
14

>> aaa=a(2,:)

aaa = 5 11 10 8
下标的赋值
维度要匹配
2. 矩阵的部分修改

A(m,n) =a 第 m 行第 n 列

A(m,:) =a or [ a,b,...] 第m行


修改 A 元素
A(:,n)=[a,b,... ] 第n列

A(m;n,k:j)=[a,b,... ] 第 m 到 n 行和 k 到 j 列
>> a(1:3,3:6)

矩阵的部分修改
ans =6 26 19 24
 a=magic(6) 7 21 23 25
2 22 27 20
a =35 1 6 26 19 24
3 32 7 21 23 25 >> a(1:3,3:6)=2
31 9 2 22 27 20 a =35 1 2 2 2 2
8 28 33 17 10 15 3 32 2 2 2 2
30 5 34 12 14 16 31 9 2 2 2 2
4 36 29 13 18 11 8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
例 a(1:3,3:6)=rand(3,4)
>>

a =35.0000 1.0000 0.4218 0.9595 0.8491 0.7577


3.0000 32.0000 0.9157 0.6557 0.9340 0.7431
31.0000 9.0000 0.7922 0.0357 0.6787 0.3922
8.0000 28.0000 33.0000 17.0000 10.0000 15.0000
30.0000 5.0000 34.0000 12.0000 14.0000 16.0000
4.0000 36.0000 29.0000 13.0000 18.0000 11.0000
>> a(4:6,3:6)=eye(3,4)
矩阵的部分修改 a =1 1 1 1 0 0
1 2 3 4 0 0
例 1 3 6 10 0 0
1 4 1 0 0 0
> a=pascal(4) 0 0 0 1 0 0
0 0 0 0 1 0
a =1 1 1 1
1 2 3 4
修改行列数超过矩
1 3 6 10 阵行列数时,除修
1 4 10 20 改元素以外,超出
由零元素填补。
3 .矩阵行列的删除 A(m,:)=[ ]
 空矩阵 [] :给变量 X 赋空矩阵: X=[] ,其维数为
0。

 调用格式:整行或整列删除
① A(m,:)=[ ] 第m行
删除 A 所有元素
② A(:,n)=[ ] 中 第n列
③ A(m:n,:)=[ ] 第m到n行
④ A(k:j)=[ ] 从 k 到 j 元素
 矩阵行列删除
>> a=rand(4,5)
a =0.6555 0.2769 0.6948 0.4387 0.1869
例 0.1712 0.0462 0.3171 0.3816 0.4898
0.7060 0.0971 0.9502 0.7655 0.4456
0.0318 0.8235 0.0344 0.7952 0.6463

>> a(2,:)=[]
a = 0.6555 0.2769 0.6948 0.4387 0.1869
0.7060 0.0971 0.9502 0.7655 0.4456
0.0318 0.8235 0.0344 0.7952 0.6463
>> a(:,2)=[]
a =0.6555 0.6948 0.4387 0.1869
0.7060 0.9502 0.7655 0.4456
0.0318 0.0344 0.7952 0.6463
4 、矩阵合并
(1) 矩阵构造符 [ ]
 水平方向 : 表达式 C=[A,B] (行数相同)

1 2 4 5 6 1 2 4 5 6
例 3 A4 + 7 8
B
9 = 3 4 7 8 9
5 6 10 11 12 5 6 10 11 12
3×2 3×3 3×5
1 2 4 5 6 1 2 4 5 6
3 4 + 7 8 9 ≠ 3 4 7 8 9
5 6 5 6
3×2 2×3
m 个独立方程

n 个未知量 x

系数矩阵 b
A(m×n) 向 量
数 列

X1 x2 xn

Ab=[A,b] 增广矩阵 B
 竖直方向 : 表达式 C=[A;B] (列数相同)

例 >> a=[1:4;7:10;6:9] >> c=[a;b]


a =1 2 3 4
7 8 9 10 c=
6 7 8 9 1 2 3 4
7 8 9 10
6 7 8 9
>> b=magic(4) 16 2 3 13
b =16 2 3 13 5 11 10 8
5 11 10 8 9 7 6 12
9 7 6 12 4 14 15 1
4 14 15 1
(2) 矩阵合并函数 :
函 数 描 述

cat 沿指定的维方向串接成高维数矩阵

horzcat 沿水平方向串接成高维数矩阵

vertcat 沿垂向方向串接成高维数矩阵

repmat 通过复制和叠置矩阵来创建新矩阵
Cat ( 1 , A , B ) 矩阵合并 例
垂直

Cat ( 2 , A , B )
水平

Horzcat ( A , B )水

vertcat ( A , B )
垂直
Repmat (A,
m,n )

5. 矩阵结构的改变 元素个数不变位置改变的矩阵转置与旋转

矩阵的左右翻转
翻转
矩阵的上下翻转

aij aji

Aij+Bij*j Aji-Bji*j
 矩阵转动和翻转
例> a=magic(4) >> fliplr(a)

a =16 2 3 13 ans =13 3 2 16


5 11 10 8 8 10 11 5
9 7 6 12 12 6 7 9
4 14 15 1 1 15 14 4

>> rot90(a) >> flipud(a) >> flipdim(a,1)

ans =13 8 12 1 ans = 4 14 15 1 ans =4 14 15 1


3 10 6 15 9 7 6 12 9 7 6 12
2 11 7 14 5 11 10 8 5 11 10 8
16 5 9 4 16 2 3 13 16 2 3 13
 矩阵转置

>> a=magic(3) >> transpose(a) >> a.' >> a'
a =8 1 6 ans = 8 3 4 ans = 8 3 4 ans = 8 3 4
3 5 7 1 5 9 1 5 9 1 5 9
4 9 2 6 7 2 6 7 2 6 7 2

>> a=[1+2i,-3i,0;2,3,2i;0,i+3,-6i]
a =.0000 + 2.0000i 0 - 3.0000i 0
2.0000 3.0000 0 + 2.0000i
0 3.0000 + 1.0000i 0 - 6.0000i

>> a.‘
ans = 1.0000 + 2.0000i 2.0000 0
0 - 3.0000i 3.0000 3.0000 + 1.0000i
0 0 + 2.0000i 0 - 6.0000i
>> ctranspose(a)
ans = 1.0000 - 2.0000i 2.0000 0
0 + 3.0000i 3.0000 3.0000 - 1.0000i
0 0 - 2.0000i 0 + 6.0000i
 改变矩阵的形状: reshape
矩阵元素按 列方向 重组
reshape(A,m,n)

重组后新矩阵元素个数必须与原矩阵元素个数相等!
6. 矩阵的抽取
上三角阵 U

(1) 三角矩阵

对 0
下三角阵


k=


L
 下三角函数 tril

D

L=tril(A) 抽取主对角线的下三角

k=0 主对角线 , 缺省

L=tril(A,k) 抽取 k>0 主对角线以上 三角部分

k<0 主对角线以下

上三角函数 triu : 抽取 A 上三角部分,用法同上


(2) 对角矩阵 A 函数diag

① 抽 A 第 k 条对角线成向量 v :
v=diag(A,k)

k=0 时,主 (k 可省略 )


抽取 k>0 时,上方第 k 条 对角线元素

k<0 时,下方第 k 条
>> am=rand(3,4)
am = 0.0318 0.0971 0.3171 0.4387

0.2769 0.8235 0.9502 0.3816
0.0462 0.6948 0.0344 0.7655
>> amu=triu(am,1)
aml=tril(am,-1) amu =0 0.0971 0.3171 0.4387
0 0 0.9502 0.3816
aml = 0 0 0 0
0 0 0 0.7655
0.2769 0 0 0 0.0462
>> amd=diag(am,1)
0.6948 0 0 amd =
0.0971
0.9502
0.7655
② 向量 v 作矩阵 A 第 k 条对角线 :
A =diag(v,k)

k=0 主 (k 可省略 ) ;
v 为矩阵 k>0 上方第 k 条; 对角线
X
k<0 下方第 k 条对角线。
>> a=linspace(1,4,3)

a =1.0000 2.5000 4.0000

>> aa=diag(a,1)
aa = 0 1.0000 0 0
0 0 2.5000 0
0 0 0 4.0000
0 0 0 0
③ blkdiag(a,b,c,d,...): 构造分块对角矩阵

以输入元素为对角线元素的矩阵


>> blkdiag(1,2,5,6)

ans =1 0 0 0
0 2 0 0
0 0 5 0
0 0 0 6
2. 3 稀疏矩阵 sparse(A)

1 .稀疏矩阵的创建
2 .查看稀疏矩阵
3 .稀疏矩阵的运算规则
矩阵分类:满矩阵 稀疏矩阵

稀疏矩阵:只存储矩阵少数的非零元素及其下标
1 .稀疏矩阵的创建
① 满矩阵 A 转换稀疏矩阵:S=sparse(A)

② 稀疏矩阵 A 转换满矩阵: F=full(S)


>> atl=diag(1:3,-1) >> atls=sparse(atl)

atl =0 0 0 0 atls = (2,1) 1
1 0 0 0 (3,2) 2
0 2 0 0 (4,3) 3 > af=full(atls)
0 0 3 0 稀
满 af =0 0 0 0
1 0 0 0
af 4x4 128 double 0 2 0 0
atl 4x4 128 double 0 0 3 0
满 是否建稀疏矩阵
atls 4x4 56 double sparse
用户自己判断
③ 直接创建稀疏矩阵: S = sparse(i,j,s,m,n)
-----i 和 j 分别是稀疏矩阵非零元素的行和列下标,
-----s 为相应的非零元素的值,
S = sparse(i,j,s)
-----m 和 n 分别是矩阵的行数和列数。
fs = 0 55 0 0 0 0 >>
0 0 0 0 66 0 s=sparse(1,2,55)
例 0 0 0 0 0 77 s = (1,2) 55
s=sparse([1,2,3],[2,5,6],[55,66,77])
s =(1,2) 55
(2,5) 66
(3,6) 77
>> whos
Name Size Bytes Class Attributes
fs 3x6 144 double
s 3x6 104 double sparse
④ 创建特殊稀疏矩阵函数

非零分布密度
density
>> aa
aa =2 0 0 0 0 >> sd=sprand(4,6,0.5)
例 0 5 0 0 0 sd =
0 0 6 0 0 (1,1) 0.0971
0 0 0 7 0 (4,1) 0.4387
0 0 0 0 8 (3,2) 0.0344
>> speye(3,5) >> spones(aa) (4,2) 0.3816
ans = ans = (1,1) 1 (1,3) 0.8235
(1,1) 1 (2,2) 1 (2,4) 0.3171
(2,2) 1 (3,3) 1 (2,5) 0.9502
(3,3) 1 (4,4) 1 (4,5) 0.7655
(5,5) 1 (1,6) 0.6948
>> spr=sprand(aa) (4,6) 0.7952
spr = (1,1) 0.0975 >> sd=sprand(4,6,0.1)
(2,2) 0.2785 sd =
(3,3) 0.5469 (1,3) 0.7094
(4,4) 0.9575 (2,4) 0.7547
(5,5) 0.9649
2 .查看稀疏矩阵

b=sparse(b)
b= > nzmax(b)
例 b= >> nzmax(b)
1 0 0 ans = 9
0 2 0 (1,1) 1 ans = 3
0 0 3 (2,2) 2
(3,3) 3
3 .稀疏矩阵的运算规则

各种命令和函数都可用于稀疏矩阵运算

(1) 单个矩阵运算:

① 稀疏矩阵运行结果是稀疏矩阵

② 否则输出结果是全元素矩阵
>> sr=sprand(3,3,0.6)
sr =
(2,1) 0.7431
例 (1,2) 0.7577
(3,3) 0.3922
>> sri=inv(sr) % 求逆
sri = (2,1) 1.3197
(1,2) 1.3457
(3,3) 2.5495
>> sd=diag(sri,1)
sd = (1,1) 1.3457
>> whos
Name Size Bytes Class Attributes

sd 2x1 48 double sparse


sr 3x3 80 double sparse
sri 3x3 80 double sparse
(2) 双个矩阵运算:

① 同样矩阵形式 , 运算结果不变;

② 不同矩阵形式,结果均为满矩阵 .
接上题

>> ss=sr+sri
ss =
(2,1) 2.0628
(1,2) 2.1034
(3,3) 2.9418
>> ssm=sr+magic(3)
ssm =
8.0000 1.7577 6.0000
3.7431 5.0000 7.0000
4.0000 9.0000 2.3922
>> whos
Name Size Bytes Class Attributes

sd 2x1 48 double sparse


sr 3x3 80 double sparse
sri 3x3 80 double sparse
ss 3x3 80 double sparse
ssm 3x3 72 double
>> r >> rr=rand(6,4)
r =(2,2) 0.1299 rr =0.0119 0.1656 0.4505 0.5383
例 (6,2) 0.9340 0.3371 0.6020 0.0838 0.9961
(3,4) 0.4694 0.1622 0.2630 0.2290 0.0782
(6,4) 0.5688 0.7943 0.6541 0.9133 0.4427
0.3112 0.6892 0.1524 0.1067
0.5285 0.7482 0.8258 0.9619
>> size(r)
>> rrr=rr+r
ans =
rrr =0.0119 0.1656 0.4505 0.5383
6 4
0.3371 0.7319 0.0838 0.9961
>> full(r)
0.1622 0.2630 0.2290 0.5476
ans =
0.7943 0.6541 0.9133 0.4427
0 0 0 0
0.3112 0.6892 0.1524 0.1067
0 0.1299 0 0
0.5285 1.6822 0.8258 1.5307
0 0 0 0.4694
0 0 0 0 r 6x4 68 double sparse
0 0 0 0 rr 6x4 192 double
0 0.9340 0 0.5688 rrr 6x4 192 double
2.4 矩阵操作函数(矩阵分析)
1. det 方阵的行列式

2. inv 方阵的逆
3. pinv 矩阵伪逆
4. norm 范数
5. cond 方阵的条件数
6. rank 矩阵的秩
7. eig 方阵特征值、特征向量
1. 方阵的行列式 Determinant

调用格 det(A)
式:

>> a=pascal(5)
例 a =1 1 1 1 1
1 2 3 4 5
1 3 6 10 15 ① det(A)0 ,非奇异矩
1 4 10 20 35 阵 , 唯一解
1 5 15 35 70 ② det(A)=0 ,奇异矩
>> det(a) 阵,无解或无穷解;
ans = 1
非奇异矩阵才有可逆矩阵

2. 方阵的逆 inverse
 方阵的逆 A-1 :
A*B=B*A=I (I 单位 ) ,则 B 和 A 互为逆矩阵
 调用函数:inv(A)

 线性方程组 Ax=b 解:
x=A-1*b=inv(A)*b b 是列向量
>> a=[1,-5,-1,-2;1,-2,1,3;3,8,-1,1;1,-
9,3,6]
x1-5x2-x3-2x4=-1 a =1 -5 -1 -2
例 1 -2 1 3
x1-2x2+x3+3x4=3 3 8 -1 1
1 -9 3 6
3x1+8x2-x3+x4=5 >> b=[-1,3,5,7]'
x1-9x2+3x3+6x4=7 >> det(a)

ans = 40
>> ia=inv(a)
ia =0.1500 -1.8000 0.6000 0.8500
-0.1000 -0.3000 0.1000 0.1000
-0.3500 -5.3000 1.1000 2.3500
0 2.5000 -0.5000 -1.0000
>> x=(ia*b)'
x = 3.4000 0.4000 6.4000 -2.0000
>> a=[1,-5,-1,-1;1,-2,1,3;3,8,-1,1;1,-9,3,7]
x1-5x2-x3-x4=-1 a =1 -5 -1 -1
例 x1-2x2+x3+3x4=3
1 -2 1 3
3 8 -1 1
1 -9 3 7
3x1+8x2-x3+x4=5 >> b=[-1,3,5,7]‘
>> det(a)
x1-9x2+3x3+7x4=7 ans= 0

>> inv(a)
Warning: Matrix is singular to working precision.
det(A)=0 或接近 0 ,奇 ans = Inf Inf Inf Inf
异矩阵,病态矩阵 Inf Inf Inf Inf
Inf Inf Inf Inf
Inf Inf Inf Inf
3. 矩阵的伪逆
pinv(A)

 伪逆存在条 非满秩的方阵(奇异矩阵)
件:
长方形矩阵
 作用:
是逆矩阵的广义形式。在求解严重病态矩
阵时可避免“伪解”的产生。
 伪逆矩阵: A·B·A=A B·A·B=B 则 B 为 A 伪逆矩阵

 调用函数: pinv(A) 伪逆函数


接上面例题 >> a=[1,-5,-1,-1;1,-2,1,3;3,8,-1,1;1,-9,3,7]
a =1 -5 -1 -1
1 -2 1 3
3 8 -1 1
1 -9 3 7 >> xp=pa*b
例 >> b=[-1,3,5,7]‘ xp =0.8800
>> pa=pinv(a) 0.1600
pa = 0.2417 0.0417 0.1783 0.0150 0.0667
-0.1000 -0.0000 0.0400 -0.0200 1.0133
-0.1667 -0.0000 -0.0667 0.0333
-0.0917 0.0417 0.0450 0.0817 奇异值分解法 svd

逆矩阵法和左除法可能得出错误的结果 这时需考虑其他的方法求
解。
3. 范数 norm ( A) 解的误差分析
实际问题的方程组 Ax =b , 系数矩阵 A 与向量 b 往往带有
误差(扰动), A 或 b 的微小变化对解 x 的影响。
例 : 求解线性方程组
1 1   2  x1 
A    , b    , x   
 x1  x 2  2  1 1.01   2  x2 

 x1  1.01 x 2  2
a=[1,1;1,1.01] 可见 x 对 b 的
b=[2;2]
x1  2, x 2  0, 扰动敏感
x=inv(a)*b
x= 2 0

 2  bb=[2;2.01]
若方程右端变为 b    >> x=inv(a)*bb
 2.01  x = 1.0000 1.0000 x1  1, x2  1
从图可以看出,原方程
组对应的两条直线(红
与黑)交于( 2 , 0 )
点,但由于两直线几近
平行,所以当第二个方
程有微小变化(从 2 到
2.01 )时,交点变
( 1 , 1 ),变化很
大。

对 Ax = b ,如果解 x 对 b 或 A 的扰动敏感,就称
方程组是病态的,也称系数矩阵 A 是病态的。
3. 范数 norm ( A)
范数:为了定量地估计 x 对 b 或 A 的扰动敏感的程度 , 需要度量
向量或矩阵“大小”的数量指标。
表示方法:向量范数或矩阵范数 x, b, A
T
范数 : 设 x  x x xn , 范数记作
x

常见的向量范数:
矩阵范数 :

norm(A) 或 norm(A,2)
范数 ① A 的 2— 范数:
命令 norm(A,1)
② A 的 1— 范数: A 向量或矩阵
函数
③ A 的∞—范数:norm(A,inf
)
4. 三种常用方阵矩阵 A 条件数 cond(A,
p)
定义式: A 的范数与 A 的逆矩阵的范数的乘积

① 判断病态程度,矩阵计算对误差的敏感性
条件数:
② 值越大越病态,条件数接近 10^16 ,矩阵奇
异。
① A 的 1— 范数下的条件数 cond(A,1) P=1,2 or inf
② A 的 2— 范数下的条件数,非方阵也行cond(A)cond(A,2)
③ A 的 ∞—范数下的条件数 cond(A,inf
)
 求解线性方程组,矩阵条件数越大,解的稳定性越差;
 矩阵求逆时,条件数越大,精度越差。
 矩阵运算前,用条件数对问题提前判断,方便求解方法选择。

5 阶希尔伯特矩阵 H 和 5 阶帕斯卡矩阵 P, 且求其行
列式的值 Hh 和 Hp 以及它们的条件数 Th 和 Tp ,判
断哪个矩阵性能更好 ? 
H=hilb(5); P=pascal(5);  
Hh=det(H)  Hh = 3.7493e-012 
Hp=det(P)  Hp = 1 
Th=cond(H)  Th = 4.7661e+005 
Tp=cond(P)  Tp = 8.5175e+003
h10c=cond(hilb ( 10 ) ) h10c =1.6025e+13
条件数越趋近于 1 ,矩阵的性能越好,所以帕斯卡
矩阵性能更好
>> a=[1,-5,-1,-1;1,-2,1,3;3,8,-1,1;1,-9,3,7]
a =1 -5 -1 -1
x1-5x2-x3-x4=-1 1 -2 1 3
例 3 8 -1 1
x1-2x2+x3+3x4=3 1 -9 3 7
>> b=[-1,3,5,7]‘
3x1+8x2-x3+x4=5 >> rank(a)
ans =3
x1-9x2+3x3+7x4=7 >> det(a) 条件数反映出矩阵求逆及线性方程
ans= 0 组解的精确程度。
ac=cond(a)
ac = 4.0775e+16
>> inv(a)
Warning: Matrix is singular to working precision.
ans = Inf Inf Inf Inf
Inf Inf Inf Inf
Inf Inf Inf Inf
Inf Inf Inf Inf
秩可以判断线性
方程组解的数目
非奇异矩阵一定是行满秩矩阵
6. 矩阵的秩 rank(A)
秩:矩阵初等行变换后非零子式最高阶数
调用格式: rank(A
) 例
>> aa=rand(3,5)
aa =0.1626 0.9597 0.2238 0.5060 0.9593
0.1190 0.3404 0.7513 0.6991 0.5472
0.4984 0.5853 0.2551 0.8909 0.1386
>> rank(aa)
ans = 3
7. 方阵的特征值与特征向量 eig(A)

方阵 A 的特征值 λ
A*ν=λ*ν
其对应特征向量 ν 关系:

E=eig(A) 求全部特征值,构成向量 E

[V,D]=eig(A 求特征向量构成矩阵 V 的列向


)
量,
求全部特征值,构成对角阵
例 >> a=pascal(3) >> [v,d]=eig(a) 特征向量构成 V 的列向量
a =1 1 1 v = -0.5438 -0.8165 0.1938
1 2 3 0.7812 -0.4082 0.4722
1 3 6 -0.3065 0.4082 0.8599
>>e= eig(a) d = 0.1270 0 0
e =0.1270 0 1.0000 0
1.0000 0 0 7.8730
7.8730
全部特征值,构成对角阵 D 。
求全部特征值
线性方程组应用非常广泛:工程学,计算机科学,物理学,数学,经济学,统计学,力
学,信号与信号处理,通信,航空等学科和领域如电路、理论力学、计算机图形学、信
号与系统、数字信号处理、系统动力学、自动控制原理等课程。 
2.5 线性方程组求解 增广矩阵 B

Ab=[A,b]
b]

m 个独立方程

n 个未知量 x

系数矩阵 b
A(m×n) 向量

常数

X1 x2 xn

考《线性代数实践及 MATLAB 入门》 第 2 版 第二篇 线性代数实践


1. Ax=b 三类线性方程

未知数 n= 方程数 m
唯一解 恰定方程
rank(A)=rank(A,b)=n 满秩

未知数 n> 方程数 m


无数解 欠定方程
rank(A)=rank(A,b)<n

未知数 n< 方程数 m


无 解 超定方程
rank(A)<rank(A,b)
有近似解 (m>n)
三类方程都可用 左除法 A\B
2. Ax=b 线性方程组解法

直接解法 逆乘、阶梯函数法、左除、矩阵分
解法,有限四则运算求精确解。

迭代法 先给定解初始值,采用迭代逐步逼
近,求解更精确的近似解。
2.5.1 直接解法
1. 恰定线性方程组求解 b
列 向量
常数
① 逆乘法: x=inv(A)*b 尽量不用

② 左除运算 x=A\b 计算时间 1/50 倍 精度高

符:
恰定方程求解以及矩阵函数分析
例 平板稳态温度计算 解 铁板均匀划分网格,各点温度为其上下左
右各点温度平均值 T ,列出方程组:
薄壁铁板热传导问题,该板周边温
度已知,分别为 10 、 20 、 30 和 Ta=(10+20+Tb+Tc)/4
40 度,求板中心温度 Tb=(20+40+Ta+Td)/4
20 20 Tc=(10+30+Ta+Td)/4
Td=(30+40+Tb+Tc)/4

10 a b 40 整理成为标准矩阵方程 A*T=b :
 1 0.25 0.25 0  Ta   7.5 
 0.25  Tb   15 
10 c d 40  1 0  0.25     
 0.25 0 1 0.25  Tc   10 
    
 0 0.25 0.25 1 Td
   17.5 
30 30
解 ( 1 )建立方程的矩阵和常数向量

>> A=[1,-0.25,-0.25,0;-0.25,1,0,-0.25;-0.25,0,1,-
0.25;0,-0.25,-0.25,1] % 方程系数矩阵
A =1.0000 -0.2500 -0.2500 0
-0.2500 1.0000 0 -0.2500
-0.2500 0 1.0000 -0.2500
0 -0.2500 -0.2500 1.0000
>> b=[7.5,15,10,17.5]' % 方程的常数列向量
b =7.5000
15.0000
10.0000
17.5000
>> B=[A,b] % 方程增广矩阵
B = 1.0000 -0.2500 -0.2500 0 7.5000
-0.2500 1.0000 0 -0.2500 15.0000
-0.2500 0 1.0000 -0.2500 10.0000
解 ( 2 )系数矩阵的基本函数分析
>> cond(A) % 条件数
ans = 3
>> rank(A) % 矩系数阵的秩
ans = 4
>> rank(B) % 增广矩阵的秩
ans = 4 >> [V,D]=eig(A) % 特征向量和特征值
V = 0.5000 -0.7071 0.0000 0.5000
>> ad=det(A) % 行列式 0.5000 0.0000 0.7071 -0.5000
0.5000 -0.0000 -0.7071 -0.5000
ad = 0.7500 0.5000 0.7071 0 0.5000
D = 0.5000 0 0 0
>> ai=inv(A) % 逆 0 1.0000 0 0
0 0 1.0000 0
ai = 1.1667 0.3333 0.3333 0.16670 0 0

0.3333 1.1667 0.1667 0.3333


0.3333 0.1667 1.1667 0.3333
0.1667 0.3333 0.3333 1.1667
>> ai=pinv(A) % 伪逆
ai =1.1667 0.3333 0.3333 0.1667
0.3333 1.1667 0.1667 0.3333
解 >> Tr=rref(B) % 阶梯形函数法
3 )恰定方程几种求解 Tr= 1.0000 0 0 0 20.0000
0 1.0000 0 0 27.5000
>> Tc=A\b % 左除法 0 0 1.0000 0 22.5000
Tc = 20.0000 0 0 0 1.0000 30.0000
27.5000
22.5000 >> [l,u]=lu(A) ) % 矩阵 LU 分解为下三角和上三
30.0000 角法
>> Ti=inv(A)*b % 逆乘法 l = 1.0000 0 0 0
Ti = 20.0000 -0.2500 1.0000 0 0
27.5000 -0.2500 -0.0667 1.0000 0
22.5000 0 -0.2667 -0.2857 1.0000
30.0000 u = 1.0000 -0.2500 -0.2500 0
>> Tp=pinv(A)*b % 伪乘法 0 0.9375 -0.0625 -0.2500
Tp = 20.0000 0 0 0.9333 -0.2667
27.5000 0 0 0 0.8571
22.5000 >> Tlu=u\(l\b) % 左除求解
30.0000 Tlu = 20.0000
27.5000
22.5000
30.0000
韩刚 等 MATLAB 软件在《理论力学》课程中的应用 机电技术 2011 年
4 月
典型静力学
理论力学常见的例题:自重 P=50N 的 T 字
例 =100N·m 形构件 ABCD ,通过固定铰支 A 固定在铅
垂面, AC=3l , BD=2 l ,在外载荷 F1 、
=50N
F2
30N = 和 M 的作用下平衡,如图所示。其中
M=100N·m , F1=30N , l=1m 。求外力
F2 的大小和固定端 A 的 FAx 、 FAy 的约
三元一次方程组 束力。

简化方程组
解 a=[1 0 -0.717; 0 1 0.717; 0 0 2.828]
b=[-30; 50;70]; FAx
>> AD=det(a)
AD = -2.8280 >> x=a\b FAy
x =-12.2525
>> AR=rank(a) 32.2525
F2=70
AR = 3 24.7525
>> rank([a,b])
ans = 3
>> AC=cond(a)
>> FAx=X(1),FAy=X(2),F2=X(3)
AC = 3.2362 FAx = -12.2525
FAy = 32.2525
>> F=inv(a)*b
F2 = 24.7525
F = -12.2525
32.2525
24.7525
③ 阶梯法 ( 转化成一个容易求解阶梯形同解方程 )

 初等变换 高斯消元 回代
阶梯形同解方程

(1) 初等变换
(2) (2)-(1)

(3) (3)-1.5*(1)
(3)-2*(2)
(4) (4)-0.5*(1)

( 阶梯形方程 )

(4) (3) (4)-2*(2)

( 回代法 x1=1,x2= 2,x3=-1,x4= 0)


(x1=1,x2= 2,x3=-1,x4= 0)
对角线各项系数为 1 的阶梯形方程
增广矩阵初等变换

上三角阶梯形矩阵

( 单位矩阵 D) ( 解 X)

对角线阶梯形矩阵
 增广矩阵 [A,b] 初等变换为阶梯形函数 rref
系数矩阵 A 增广矩阵 行方向的线性运 D 单位矩阵
常数列向量 b [A,b] 算 rref [D,x] x 即求结果

>> dd=det(a)
例 dd = -6
>> ar=rank(a)
ar = 4
>> abr=rank([a,b])
abr = 4
>> a=[2,-2,0,6;2,-1,2,4;3,-1,4,4;1,1,1,8]; >> > xz=(a\b)’ % 左除
>> b=[-2;-2;-3;2]; xz = 1 2 -1 1/18014398509481980
>> ar=rref([a,b])

ar =1 0 0 0 1
0 1 0 0 2
0 0 1 0 -1
0 0 0 1 0
D 解
2. 欠定方程求 ① 未知量数 n 多于方程数 m ,无穷解

② 阶梯形函数 rref 给出的是简化方程;

③ 左除法给出具有最多零元素的特解。

( 2 )阶梯形函数 rref 简化
xx=rref([a,b])
xx= 1 -1 0 -1 1/2
( 1 )判断方程的类型 0 0 1 -2 1/2
format rat 0 0 0 0 0
a=[1,-1,-1,1;1,-1,1,-3;1,-1,-2,3];
X1 x2 x3 x4 b
b=[0;1;-1/2];
det(a) X1 -x2 -x4 = 1/2
错误使用 det 0 0 x3 -2x4= 1/2
矩阵必须为方阵。
( 3 )左除求特解
rank(a)
xz=(a\b)’ % 左除
ans =2
警告 : 秩不足,秩 = 2 , tol = 3.871480e-
rank([a,b]) 15 。
ans =2 % 小于未知数个数,欠定 xz = 0 -1/4 0 -1/4
用有理数来配平小苏打与柠檬酸反应的化学方程式

例 (X1) NaHCO3+ (X2) H3C6H5O8 (X3) Na3C6O7+ (X4) H2O+ (X5) CO2

Na 1 0 3 0 0
H 1 8 0 2 0
小苏打 X1, 柠檬酸 X2, 碳酸钠 X3, 水 X4, 二氧化碳 X5
C 1 6 6 0 1
O 3 8 7 1 2

Na 1 0 3 0 0 0
H 1 8 0 2 0 0
X1 + X2 - X3 - X4 - X5 =
C 1 6 6 0 1 0
O 3 8 7 1 2 0

X1
1 0 3 0 0 0
1 8 0 2 0 X2
AX=b A= X= b= 0
1 6 6 0 1 X3 0
3 8 7 1 2 X4 0
X5
解 >> A=[1,0,-3,0,0;1,8,0,-2,0;1,6,-6,0,-1;3,8,-7,-1,-2];
>> b=[0;0;0;0];

>> format rat % 显示数据为有理数


>> u=rref([A,b]) % 阶梯形函数
u= 1 0 0 0 -8/5 0
0 1 0 0 -13/30 0
0 0 1 0 -8/15 0
0 0 0 1 -38/15 0
X1 x2 x3 x4 x5 自由变量
b
X1 0 0 0 = 8/5 X5
0 X2 0 0 = 13/30 X5
0 0 X3 0 = 8/15 X5
0 0 0 X4 = 38/15 X5
X1 =48 X2 =13 X3 = 16 X4 =76 X5 =30

48NaHCO3+13H3C6H5O8 16Na3C6O7+76H2O+30CO2
3. 超定方程求
(解1 )超定方程( m>n )
 约束条件过于严格,方程无精确解;

 实验数据处理和曲线拟合常见;

 无法完全满足约束条件,求最小误差的方法,

常用最小二乘法(最小误差的平方和),求最

接近的解。
( 2 )超定方程最小二乘问题

pinv(a
三维空间导出最小二乘解的公式
)
① 伪逆法: x=pinv(a)*b
最小二乘法:误差平方和最小的准则
② 左除法: x=a\b
除法给出最小二乘意义上的近似解
③ 非负约束最小二乘法: x=lsqnonneg(a,b)
例 >> x=a\b
ans =
3.040293040293041
1.241758241758242
>> pinv(a)*b
>> lsqnonneg(a,b)
a=[2,4;3,-5;1,2;2,1]; ans =
b=[11;3;6;7]; 3.040293040293041
D=det(a) 1.241758241758242
R=rank(a) >> b=a*x % 检验
Rr=rank([a,b]) 11.0476
Xp=inv(a)*b 2.9121
Xp=pinv(a)*b 5.5238
7.3223
x=a\b
刘同同,基于超定线性方程组模型的 HVDC 地电流计算方法研究,现代电 力,
例 2011 年, 28 卷 3 期

高压直流输电 (HVDC) 单极大地回路

回路电流方程

N 网孔网络阻抗模型 基尔霍夫电压定律

传统恰定方程

系数阻抗矩阵
超定方程

变电站 N 支路电阻两端电压

回路阻抗模型得方程组

5
5

传统恰定方程 超定方程
解 传统恰定方程求解
>> clear
>> a=[5,-2,0,0;-2,5,-2,0;0,-2,5,-2;0,0,-2,5];
>> b=[10;4;3;2];
>> i=a\b
>> i=inv(a)*b >> i1=i(1),i2=i(2),i3=i(3),i4=i(4)
i = 3.2082 i1 = 3.2082
3.0205 i2 = 3.0205
2.3431 i3 = 2.3431
1.3372 i4 = 1.3372

变电站入地电流
超定方程求解

>> clear
>> a=[5,-2,0,0;-2,5,-2,0;0,-2,5,-2;0,0,-2,5;0,0,2,-2];
>> b=[10;4;3;2;3];
>> x=a\b
>> i1=i(1),i2=i(2),i3=i(3),i4=i(4)
>> lsqnonneg(a,b)
i1 = 3.2522
>> i=pinv(a)*b
i2 = 3.1023
i = 3.2522
i3 = 2.4332
3.1023
i4 = 1.3329
2.4332
1.3329
超定线性方程组计算得到
的 I34 =1.100 0 , 比传统
计算得到的 I34 =1.005 更
接近实际值 1.5A , 精度提
高了 6.2 %,
矩阵左除法总结 为了方便用户记忆

A\B
MATLAB 提供恰定、欠定和超定线性方程 AX=B 求解统一格式为左除法法

MATLAB 将自动根据矩阵 A 的行数 m 和列数 n 以及秩判断方程类型,给出相应的解



(1)A 方阵 , rank(A)=rank(A,b)=n 左除法将算出唯一解,快和

A 非方阵
(2) A 不是, 除法将自动检测
 当 rank(A) < rank(A,b) 时,方程组无解 ,
除法给出的是最小二乘意义上的近似解;
 当 rank(A)=rank(A,b)<n 时,方程组有无穷多解,
除法将给出一个具有最多零元素的特解 .
A 奇异或接近奇异
( 3) 逆矩阵法和左除法可能
得出错误的结果,
矩阵除法解恰定、欠定和超定方程例题

2x1+x2-5x3+x4=13

X1-5x2+7x4=-9 4 个未知数
解 2x2+x3-x4=6 4 个方程
恰定超定方程
x1+6x2-x3-4x4=0

>> a=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; % 系数矩阵


b=[13,-9,6,0]'; % 列向量
>> r1=rank(a) % 系数矩阵秩
r1 = 4
>> rb1=rank([a,b]) % 增广矩阵秩
rb1 = 4
>> r1=det(a) % 行列式
r1 = 18.0000
>> x1=a\b % 左除求解
x1 = -66.5556
25.6667
-18.7778
26.5556
2x1+x2-5x3+x4=13

X1-5x2+7x4=-9
解 欠定方程例题 4 个未知数
2x2+x3-x4=6 3 个方程

xx1+6x -x -4x =0
1+6x22-x3
3-4x44=0 ( 2 )阶梯形函数 rref 简化
( 1 )左除法特解
>> aq=[2,1,-5,1;1,-5,0,7;0,2,1,-1]; >>xr= rref([aq,bq])
>> bq=[13,-9,6]';
>> rq=rank(aq) X1 x2 x3
rq = 3 x4
>> rq1=rank([aq,bq]) xr = 1.0000 0 0 2.7143 5.5238
rq1 = 3 0 1.0000 0 -0.8571 2.9048
>> rqd=det(aq) 0 0 1.0000 0.7143 0.1905
错误使用 det
矩阵必须为方阵。
>> xq=aq\bq
xq = 0 % 令 x1=0
4.6491
-1.2632 X1 =0
2.0351 X4=2.0351
X3=-1.2632
x2=4.6491
3 个未知数
2x1+x2-5x3+x4 =13
超定方程例题 4 个方程

X1-5x2 +7x4 =-9


>> ac=[2,1,-5;1,-5,0;0,2,1;1,6,-
解 2x2+x3 - x4 =6 1];
x1+6x2-x3 -4x4 =0 >> bc=b
>> rc=rank(ac)
rc = 3
>> rc1=rank([ac,bc])
rc1 = 4
>> xc=ac\bc
xc =
-4.3034
0.7534
-3.6873
2.5.2 矩阵分解求解线性方程组

矩阵分解 : 用某种算法将矩阵 A 分解成若干矩阵乘积

下三角矩阵 L=tril(A,k)
上三角阵 U

上三角矩阵 U=triu(A,k)
下三角阵
L 对
D 角阵
对 角 线 D=diag(A,k)
常见的矩阵分解函数表

正定矩阵

运算速度快,节省空间
det(A)0 ,非奇异矩阵
(1) 非奇异方阵 A——lu 分解 ( 高斯消去
法)
① 下三角阵 L 和上三角阵 U 乘积 满足 A=L*U

[L,U]=lu(A) Ax=b 解 :x= A\b=U\(L\b)

② 上三角阵 U 和下三角阵 L 及置换矩阵 P 的乘积

[L,U,P]=lu(A) Ax=b 解 :x=U\(L\P*b)

LU 分解可提高求解线性方程组运算速度。
用 LU 分解的线性方程组。

2x1+x2-5x3+x4=13 >> x=u\l\b



例 x=
X1-5x2+7x4=-9
-13.0000 错
2x2+x3-x4=6 71.0000
77.5000
x1+6x2-x3-4x4=0 12.8295

a=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; % 系数矩

b=[13,-9,6,0]'; % 列向量
D=det(a) % 行列式
[l,u]=lu(A) %A 分解成下和上三角 X=
X=u\(l\b) % 左除求解 -66.5556
或采用 LU 分解的第 2 种格式,命令如下: >> l*u 25.6667
ans = 2 1 -5 1
[L,U ,P]=lu(A) 1 -5 0 7
-18.7778
X=U\(L\P*b) 26.5556
0 2 1 -1
1 6 -1 -4

例 4x1  2x 2  x 3  2
 的一个特解。
3x
求奇异方程组  1  x 2  2x 3  10
 11x  3x  8
 1 2
D= 0
L = 0.3636 -0.5000 1.0000
a=[4 2 -1;3 -1 0.2727 1.0000 0
2;11 3 0]; 1.0000 0 0
U=
b=[2 10 8]'; 11.0000 3.0000 0
0 -1.8182 2.0000
D=det(a) 0 0 0.0000
[l,u]=lu(a) Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 2.018587e-017. 逆条件数
X=u\(l\b) > In D:\Matlab\pujun\lx0720.m at line 4
X=
[l,u ,p]=lu(a) 1.0e+016 *
X=u\(l\p*b) -0.4053
1.4862
1.3511
说明 结果中的警告是由于系数行列式为零产生的。可以通过 A*X 验
(2) 正定矩阵的 Cholesky 分

 正定矩阵:

① 正定矩阵 A 的特征值全为正 ;
② 正定矩阵肯定是对称的 (A 的转置 =A) 。

 乔利斯基 Cholesky 分解:

① 上三角阵 U 为 R ,则下三角阵 L 为其转置 R’

即 A=L*U=R'*R
② A 分解下三角 R’ 和上三角 R 的乘积;

正定矩阵 A 的上三角 R=chol(A) Ax=b 解 X=R\(R’\b)



例 1/2x1+1/3x2+1/4x3=0.95

用 chol 分解求解 1/3X1+1/4x2+1/5x3 = 0.67

1/4x1+1/5x2+1/6x3=0.52

>> a=[1/2,1/3,1/4;1/3,1/4,1/5;1/4,1/5,1/6] % 系数矩阵


>> b=[0.95,0.67,0.52]’; % 常数列向量
>> r=chol(a) % chol 分解求解上三角
r = 0.7071 0.4714 0.3536
0 0.1667 0.2000
0 0 0.0408
>> rr=r’ % 转置 r 求下三角
x=r\(r’\b) % 左除法求解
x =1.2000
0.6000
0.6000


用 Cholesky 分解求解例 1 中的线性方程组。

A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];
b=[13,-9,6,0]';
R=chol(A)
??? Error using ==> chol
Matrix must be positive definite
命令执行时,出现错误信息,说明 A 为非正定矩阵。
(3) 非奇异方阵 A 的 QR 分
解 A=Q*R

① A 分解成正交矩阵 (AA‘=E)Q 和上三角矩阵 R 乘



[Q,R]=qr(A) Ax=b 解 x=R\(Q\b)

② 正交矩阵 Q 、上三角矩阵 R 及置换矩阵 E, 满足


AE=QR
[Q,R,E]=qr(A) Ax=b 解 x=E(R\(Q\b))

例 2x1+x2-5x3+x4=13
用 QR 分解求解 X1-5x2+7x4=-9

2x2+x3-x4=6

接上面 Lu 分解例题 x1+6x2-x3-4x4=0 >> x=r\(q\b)


x=
-66.5556
A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; 25.6667
b=[13,-9,6,0]'; -18.7778
26.5556
[Q,R]=qr(A); %A 分解成正交矩阵 (AA‘=E)Q 和上三角矩阵
X=R\(Q\b)
或采用 QR 分解的第 2 种格式,命令如下:
[Q,R,E]=qr(A);
x=E*(R\(Q\b))


qr 分解求奇异方程组解
4x1  2x 2  x 3  2

>> A=[4 2 -1;3 -1 2;11 3 0];
B=[2 10 8]';
 3x1  x 2  2x 3  10
>> [q,r]=qr(A)  11x  3x  8
q = -0.3310 0.4730 -0.8165
 1 2
-0.2483 -0.8785 -0.4082
-0.9104 0.0676 0.4082
r = -12.0830 -3.1449 -0.1655
0 2.0272 -2.2299
0 0 0.0000
>> XX=r\(q\B)
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 4.594136e-017.
XX = 1.0e+015 *
1.3238
-4.8539
-4.4126
det(A)0 ,奇异矩阵
( 4 )奇异值分解法 svd (了解) 统计分析、信号处理、控制理论

T
 A 分解成正交阵 U 、 V 和对角阵 s 的转A  USV

[ U S V ] = svd (A )
 1 
奇异量 U,V U  u u L u n 奇异值 S  
 2 
S   
V  v v L vn 

 
  n 
1
奇异值分解求解 x  A b  VSU b T

X=v*inv (s)*u’*b
x1-5x2-x3-x4=-1 >> a=[1,-5,-1,-1;1,-2,1,3;3,8,-1,1;1,-9,3,7]
例 >> b=[-1,3,5,7]'
x1-2x2+x3+3x4=3 >> det(a) ( 1 )逆乘法
3x1+8x2-x3+x4=5 ans= -2.5356e-31
ac=cond(a)
x1-9x2+3x3+7x4=7 ac =6.6492e+16
>> xz=a\b % 左除法求解 >> inv(a) % 逆乘法求解
警告 : 矩阵接近奇异值, 警告 : 矩阵接近奇异值,或者缩放错误。结果可能
或者缩放错误。结果可能不准 不准确。 RCOND =2.641275e-35 。 (rcond(A) 估算
确。 RCOND =2.641275e- 1- 条件数的倒数,它使用 lu(A) 以及由 LINPACK 和
35 。 LAPACK 项目组开发的一个较老的算法 )
xz = 1.0e+32 * ans = 1.0e+32 *
-3.1550 -0.0000 3.9438 -0.7888 -1.5775
( 2 )左除法
0.0000 0.0000 -0.0000 0.0000 0.0000
-6.3101 -0.0000 7.8876 -1.5775 -3.1550
3.1550
[u,s,v]=svd(a) % 奇异值分解 0.0000 -3.9438 0.7888 1.5775
x=v*inv(s)*u'*b % 奇异值分解法 >> pinv(a)
ans = 0.2417 0.0417 0.1783 0.0150
x = 1.0e+15 * -0.1000 -0.0000 0.0400 -0.0200
1.3855 -0.1667 -0.0000 -0.0667 0.0333
0.0000 ( 3 )奇异值分解法-0.0917 0.0417 0.0450 0.0817
2.7709 >> x=pinv(a)*b
-1.3855 x =0.8800
0.1600
2.5.3 迭代解法
(了解)

适合求解大型系数矩阵的方程组
迭代解法 :
雅克比( Jacobi )迭代法、
高斯 - 赛德尔( Gauss-Serdel )迭代法、
超松弛迭代法
两步迭代法

30 30
1. 迭代法
( 1 )简单实

( 2 ) Jacobi 迭代法的原

变形
Ax b xBx f x ( k 1)  B x ( k )  f

Ax  b  ( D  L  U ) x  b

A=
U  Dx  ( L  U ) x  b
D
 x   D 1 ( L  U ) x  D 1b
L B f

Jacobi 迭代阵 x ( k 1)   D 1 ( L  U ) x ( k )  D 1b


Jacobi 迭代法的 MATLAB 函数文件 Jacobi.m 如下:

例 function [x,n]=jacobi(A,b,x0,eps)
if nargin==3
eps=1.0e-6;
elseif nargin<3 B f
error
return X(k+1)
= D -1
(L+U) X (k)
+ D -1
b
end
D=diag(diag(A)); % 求 A 的对角矩阵
L=-tril(A,-1); % 求 A 的下三角阵
U=-triu(A,1); % 求 A 的上三角阵
B=D\(L+U); % 求 Jacobi 阵
f=D\b;
x=B*x0+f; % 求 Jacobi 迭代表达式, x0 初始值
n=1; % 迭代次数
while norm(x-x0)>=eps % 迭代精度 Jacobi 函
x0=x; [X,n]=jacobi(A,b,x0, 迭代精度 )
x=B*x0+f;
n=n+1; n 迭代次数 初始列向量数
end


用 Jacobi 迭代法求解下列线性方程组。设迭代初
值为 0 ,迭代精度为 10-6 。
10x1-x2=9 >> jacobi(A,b,[-22,44,99]',1.0e-
9)
-X1+10x2-2x3=7 ans =
-2x2+10x3=6 0.9958
0.9579
0.7916

A=[10,-1,0;-1,10,-2;0,-2,10]; X =0.9958
0.9579
b=[9,7,6]'; 0.7916
[X,n]=jacobi(A,b,[0,0,0]',1.0e-6) n = 11
2. Gauss-Serdel 迭代

Jacobi 迭代公式: DX(k+1)


=(L+U)X (k)
+b

改进为: DX(k+1)=LX(k+1)+UX(k)+b

Gauss-Serdel 迭代公式:X(k+1)=(D-L)-1UX(k)+(D-L)-1b

Gauss-Serdel 函数:
[X,n]=gauseidel (A,b,X0’ ,迭代精度 )

相比 Jacobi , Gauss-Serdel 迭代分量用新代旧,精度高


例 Gauss-Serdel 迭代法的 MATLAB 函数文件 gauseidel.m 如下:
function [y,n]=gaus(A,b,x0,eps)
if nargin==3
eps=1.0e-6;
elseif nargin<3
error
return
end
D=diag(diag(A)); % 求 A 的对角矩阵
L=-tril(A,-1); % 求 A 的下三角阵
U=-triu(A,1); % 求 A 的上三角阵
G=(D-L)\U;
f=(D-L)\b;
y=G*x0+f;
n=1; % 迭代次数
while norm(y-x0)>=eps X(k+1)=(D-L)-1UX(k)+(D-L)-1b
x0=y;
y=G*x0+f;
n=n+1;
end

分别用 Jacobi 迭代和 Gauss-Seidel 迭代法求解下
列线性方程组,看是否收敛。
X1+2x2-2x3=9

X1+x2+x3=7

2X1+2x2+x3=6

a=[1,2,-2;1,1,1;2,2,1];
b=[9;7;6];
[X,n]=jacobi(a,b,[0;0;0])
[X,n]=gaus(a,b,[0;0;0])
2.6 matlab 运算
算术运算
数 符: 加、减、乘、除、乘方 运算
代数函数

常用数学函数 超越函数:


是“超出”代数函数范围的
对数函数
函数;
指数函数
三角函数 是自变量间关系不能用有限
次加、减、乘、除、乘方运
算表示的函数
2.6 matlab 运算
2.6.1 矩阵运算 数


算术运算符
2.6.2 数组运算 学 运
Ma
情 tlab 大 算

不 运 多
是 算
2.6.3 关系运算符 符

是 矩阵
内部超越函数

组 2.6.4 逻辑运算符
2.6.5 运算优先级
参考《 MATLAB 基础及其应用教程》—— 第二章 矩阵运算 数组运算
《 21 世纪全国应用型本科电子通信系列实用规划教材》
2.6.1 矩阵数学运算

一般高级语言:
 只定义了标量的运算
 没有引入矩阵作为基本运算变量,
 也不可将两个矩阵作为简单变量加减乘除运算,
 完成矩阵四则运算必须借助循环结构。

matlab 高级语言:
 矩阵是线性代数中基本数学概念,
 Matlab 特别将矩阵作为基本运算变量,
 matlab 实现了矩阵四则运算,用简单方法解决复杂的矩阵相关运
算。
2.6.1 矩阵运算 A  ( aij ) mn B  (bij ) mn

1. 矩阵加减:A +B 数 λ 和矩阵 A 加减 A + λ
A  B  (aij  bij ) mn 数和矩阵每元素相加
>> a=magic(3);
例 >> b=pascal(3);
>> ab=a+b
ab = 9 2 7
4 7 10
5 12 8
>> aa=a+3
对应元素加减
加减运算矩阵具有 aa = 11 4 9
相同的行列数 6 8 10
7 12 5
2. 矩阵数乘:数 λ 和矩阵 A 乘法λ *A

>> a=magic(3);
例 a=8 1 6
3 5 7
4 9 2
>> al=3*a
al =24 3 18
9 15 21
12 27 6

数与矩阵乘法:数和矩阵每元素相乘
逆法: x=inv(a)*b

3. 矩阵的乘法 : A*B <==> mtimes

 a11  a1t   b11  b1n 


   j 
设 A  i 行   B  


a  a  b  b 
 m1 mt  mt  t1 tn t n

 c11  c1n 

则 AB  C     
 前矩阵
A 的列数
 后矩阵
B 的行数
c  c 
 m1 mn  mn (i  1, 2,...m ; j  1, 2,...n)

每个乘积元素 cij  ai1b1 j  ai 2b2 j  ...  ait btj


矩阵运算严格遵守线性代数运算规则,矩阵不再是一个单纯数
的集合,失去了单纯数的性质而呈现矩阵整体运算的特点。

服装产量 A 生产时间 A

8 月 10 月 5月 9月
>>A=[20,4,2,7;10,18,5

,7;5,7,16,3]
A = 20 4 2 7
10 18 5 7
5 7 16 3
>> b=[8;10;5;9]
b=8 >> c=A*b
10 c =273
5 348
9 217
) 4. 方阵 A 的乘
方 A^n <==> mpower(A,n)
(1) n 是整数
>> magic(3)^0 % 魔方矩阵的 0 次
① n>0, A 自乘以 n 次 方
ans =1 0 0
② n<0, A 自乘以 n 次后求逆 0 1 0
0 0 1
③ n=0, 与 A 同维的单位矩阵

(2) n 不是正整数
A^n 计算涉及到 A 特征值分解, [V,D]=eig(A
)
若 A = V*D*V-1 求特征向量构成 V 的列向量,
求全部特征值,构成对角阵
则 A^n=V*(D.^n)/V D 。
>> a^1.2
ans =

1.1512 1.4347 1.7723 2.1707
1.4347 3.1261 5.3344 8.1249
>> a=pascal(4)
1.7723 5.3344 11.1281 19.5608
a =1 1 1 1
2.1707 8.1249 19.5608 38.1697
1 2 3 4
>> a^-4
1 3 6 10
ans =1.0e+005 *
1 4 10 20
0.4564 -1.0687 0.8786 -0.2489
-1.0687 2.5033 -2.0583 0.5830
0.8786 -2.0583 1.6925 -0.4794
-0.2489 0.5830 -0.4794 0.1358
5. 矩阵的除 mrdivide / , mldivide
\
法 A\B A 和
左除法 B 行数相等时可左

A*X=B <==> X=inv(A)* B(A 的逆左乘 ) <==> X=A\ B

右除法 BB/AA A A 和 B B 列数相等时可右除



XX=X’ XX*AA=BB <=> XX=BB*inv(AA)(A A 的逆右乘 BB)<=>
BB=B’
AA=A’
XX=BB/AA
 右除和左除特点
左除不计算矩阵的逆而直接进行除运算。
左除可避免被除矩阵奇异性所带来麻烦。
右除先计算矩阵逆再做矩阵的乘法,
例 8x1+x2+6x3=1 采用左除法和右除法解方程
3x1+5x2+7x3=2
4x1+9x2+2x3=3
>> a=magic(3)% 系数矩阵
a=
8 1 6 >>b=[1,2,3]’% 常数列向量
3 5 7 b=
4 9 2 1
2 >> xz=a\b % 左除
3 x=
0.0500
0.3000
0.0500

>> xy=b’/a’ % 右除
xy =
0.0500 0.3000 0.0500
1892 年,梅茨勒 引进了矩阵的超越函数概念并将其写成矩阵的幂级数的形
式。

6. 方阵 A 的超越函数 ( 了
解)
指数函数 expm(A)

自然对数函数 logm(A)

开方函数 sqrtm
(A)

超越函数是把矩阵作为一个整体进行运算
7. 矩阵运算规则
① 只有阶数相同的矩阵才能进行加减运算。
② Matlab 矩阵的乘、除、乘方以及超越函数是针对矩阵整
体进行,遵守线性代数的相应运算规则。
③ 两个矩阵中前一矩阵的列数和后一矩阵的行数相同时,
才能矩阵乘法运算。
④ 只有方阵可进行矩阵乘方运算。
⑤ 只有方阵可进行指数 expm 、对数 logm 和开方 sqrtm 运
算。
⑥ 数与矩阵加减、矩阵除法在数学是没有意义的,在
MATLAB 中为简便起见,定义了这两类运算。
⑦ A\B 左除要求 A 和 B 行数相等,并可求出 a*x=b 的解。


b

2.6.2 数组运算 Matlab 大多情况运算不是矩阵而是数组

1. 数 ①数组不是数学概念,是一般高级语言的概念,是计算机
编程语言上对一组数集合的通称,是一种数据结构;

② Matalb 数组用法不同于一般高级语言,数组也是基本运
算量,有独立运算符和 Matlab 软件所定义运算规则;
③ 运算法则是针对数组每个元素,是数组之间元素一对一
运算,无须循环结构。

, 表
一维相当于向量 , 阵 相同 ;
2. 形式 和 矩 区 别
二维相当于矩阵 组结 构 储无
数 、 存
建 立 算 法
示、 和运
算 符
是 运
区别
3. 数组运算(点运
算)
数组运算法则: 同阶数的两数组对应元素进行运算

数组运算符 : + , - ,点乘 .* ,点除 ./ , .\ 和 数组乘


方 .^
点与算术运算符之间不能有空格!

例 >> A=[1 2 3; 4 5 6]; B=[3 2 1; 6 5 4];


例:
>> C=A.*B; D=A./B; E=A.\B; F=A.^B;

参与运算的数组必须阶数相同(行列数相同)
数组加法实例

B  (bij ) 43
A  (aij ) 43

a=[150,250,50;250,500,100;300,700,120;450,850,80]
b=[180,350,60;300,550,120;350,850,150;500,850,100]
;
>> ab=a+b
ab=a+b 数组运算是数组之
ab = 330 600 110 间元素进行相同运
550 1050 220 算,即批量运算
650 1550 270
950 1700 180

数组数乘:数 λ 和数组 A 乘法 λ *A

数组之间元素进行
相同运算,批量运
算,即数组运算是

>> A=[85,85,65,98;75,95,70,95;80,70,76,92];
>> B=[90,70,80,92;80,90,82,92;85,75,90,90];
>> C=0.9*A+0.1*B
数组点乘法例题
空气阻力系数 Cd=2.0019*107 ,气体密度 ρ=10-6kg/m3
迎风面积 A5 时,飞行器速度 V=100 变化到 200mph
(英里 / 每小时),步长为 20 ,计算飞行器受到阻力
Fz 。 V=V*0.4470 速度换算成 m/s
Fz  Cd *  *V 2* * A / 2
table =
clear 44.7000 1.0700
Cd=2.0019e7; % 空气阻力系数 53.6400 1.5408
den=0.000001; % 密度 62.5800 2.0972
A=5; % 迎风面积 71.5200 2.7392
V=(100:20:200)*0.4470;% 速度线性等分数组 80.4600 3.4668
Fz=Cd/2*(den*V.^2*A);% 阻力 89.4000 4.2800
table=[V',Fz']
一组数进行相同运
算,即批量运算,
这种数组运算在数
plot(V,Fz) 值运算中常见
点乘法例题
四类商品在四个地方销售价和销售量分别如表所示

销售价 ( 元 / 个 ) 销售量 ( 个 )

地方 甲 乙 丙 丁 甲 乙 丙 丁

西 250 A(200
aij ) 44 300 600 125 B (bij )210
100 4 4 220
北 220 250 400 650 140 170 300 260
东 260 300 440 700 188 210 380 200
求各类商品在四个地方分别销售额
南 300 350 500 750 210 175 350 200
>>a=[250,200,300,600;220,250,400,650;260,300,440,700;3
00,350,500,750] % 销售价格
a = 250 200 300 600
220 250 400 650
260 300 440 700
300 350 500 750
b=[125,100,210,220;140,170,300,260;188,210,380,200;21
0,175,350,200] % 销售量
b =125 100 210 220
140 170 300 260
188 210 380 200
210 175 350 200

对 ab=a.*b % 数组乘法
ab =31250 20000 63000 132000
30800 42500 120000 169000
48880 63000 167200 140000
63000 61250 175000 150000
错 >> abj=a*b % 矩阵乘法
abj =241650 227000 436500 287000
274200 262250 500700 323400
304220 291900 556800 363200
338000 325750 620500 407000

数组和矩阵数据结构上
无区别,区别于运算符
和运算规则。
4. 数组和矩阵四则
运算的归纳

矩阵和数组加减法运
算以及和数乘 \ 数加
相同,不用区分
a./b=b.\a 续表

aij aji

Aij+Bij*j Aji-Bji*j
数组和矩阵乘方运算实例

>> a=magic(3)
a=
>> a^2
8 1 6
ans =
3 5 7
91 67 67
4 9 2
67 91 67
>> 2^a
67 67 91
ans = 1.0e+04 *
>> a.^2
1.0942 1.0906 1.0921
ans =
1.0912 1.0933 1.0924
64 1 36
1.0915 1.0930 1.0923
9 25 49
>> 2.^a
16 81 4
ans = 256 2 64
8 32 128
16 512 4
5. 数组和矩阵超越
函数 (重点掌握数组超越函数)

① 指数和对数函数
数 名称 含义 名称 含义 名称 含义

exp E 为底的指数 log10 10 为底的对数 pow2 2 的幂

log 自然对数 log2 2 为底的对数 sqrt 平方根

矩 名称 含义 名称 含义

expm 矩阵指数 logm 矩阵自然对数
sqrtm 矩阵平方根
Matlab 的常用内部数学函数
② 数组的三角函数和双
曲函数
名称 含义 名称 含义 名称 含义
sin 正弦 csc 余割 atanh 反双曲正切
cos 余弦 asec 反正割 acoth 反双曲余切
tan 正切 acsc 反余割 sech 双曲正割
cot 余切 sinh 双曲正弦 csch 双曲余割
asin 反正弦 cosh 双曲余弦 asech 反双曲正割
acos 反余弦 tanh 双曲正切 acsch 反双曲余割
atan 反正切 coth 双曲余切 atan2 四象限反正切
acot 反余切 asinh 反双曲正弦    
sec 正割 acosh 反双曲余弦    
③ 矩阵函数通用形式:数组函数基础

F=funm(A,’fun’) F=funm(A,@fun)

>> a
a=
1 1 1
1 2 3
1 3 6
>> funm(a,@sin)
ans =
0.6360 0.3182 -0.0927
0.3182 0.4405 0.2354
-0.0927 0.2354 0.8914

绝大多数函数运算是采用通用形式
>> aaa=funm(am,'sin')
aaa = -0.3850 1.0191 0.0162
0.6179 0.2168 -0.1844
0.4173 -0.5856 0.8185
>> aaaa=funm(am,@sin)
aaaa = -0.3850 1.0191 0.0162
0.6179 0.2168 -0.1844
0.4173 -0.5856 0.8185
>> as=sin(am)
as =0.9894 0.8415 -0.2794
0.1411 -0.9589 0.6570
-0.7568 0.4121 0.9093
6. 数组运算和矩阵运算区别

即点运算,是针对矩阵数组中每个
数组运算 元素,同阶数的两数组对应元素进
行运算。

Matlab 数组运算符 : 点乘 .* ,点除 ./ , .\ 和 数组乘方 .^ exp,log,sqr

运算 是针对矩阵整体进行运算,严格遵
矩阵运算 守线性代数的运算规则

矩阵运算符: * , \ , / , ^ , expm,logm,sqrtm

矩阵和数组加减法运
算以及数乘运算相
同,不用区分
2.6.3 关系运算符
1. 六种关系运算符: 两个量的比较

注意 == 与 = 的
区别

 用以比较数、字符串、矩阵之间的大小或不等关系;
 关系运算结果为 0 假或 1 真。
2. 两种关系运算:

① 同长度矩阵比较:对应元素比较

② 标量和矩阵比较:标量与矩阵每元素比较

结果:返回相同长度的矩阵
例>> mm=magic(4) >> pm=pascal(4)
mm =16 2 3 13 pm = 1 1 1 1
5 11 10 8 1 2 3 4
9 7 6 12 1 3 6 10
4 14 15 1 1 4 10 20
>> mm<5 >> pm~=mm
ans = 0 1 1 0 ans = 1 1 1 1
0 0 0 0 1 1 1 1
0 0 0 0 1 1 0 1
1 0 0 1 1 1 1 1

>> A=[1 3 5; 2 0
6];
>> B=[3 1 0; 2 4
6];
>> A>=B
ans =0 1 1
>> whos 1 0 1
Name Size Bytes Class
Attributes
A 2x3 48 double
B 2x3 48 double
ans 2x3 6 logical
2.6.4 逻辑运算符
4 种逻辑运算符的用法和功能
>> a=[1,2,3;-2,4,8;0,5,1]; xor(a,b) a&b

>> b=[2,6,9;0,6,3;7,-1,2];
>> cc=a&b % 与
>> c=(a<1)|(a>3) % 或
c=0 0 0 ans =1 1 1
1 1 1 0 1 1
1 1 0 0 1 1

>> c=a>=2&a<=5 >> xor(a,b)


c=0 1 1 ans = 0 0 0
0 1 0 1 0 0
0 1 0 1 0 0
>> b=blkdiag(2,3,4,5)
~A not(A)
b =2 0 0 0
例>> a=pascal(3) 0 3 0 0
a= 0 0 4 0
1 1 1 0 0 0 5
1 2 3 >> not(b) % 非
1 3 6 ans =0 1 1 1
>> ~a % 非 1 0 1 1
ans =0 0 0 1 1 0 1
0 0 0 1 1 1 0
0 0 0
>> whos
Name Size Bytes Class

ans 4x4 16 logical

b 4x4 128 double


分类 函数 含义
含 0 数 all(A) 必须所有列元素都不为 0 ,返回 1
组判断 any(A) 只有一个列元素是 0 ,返回 1
生成逻 false(size(A) 按照指定大小,创建全 0 逻辑数
辑数据 ) 组
常 true(size(A)) 按照指定大小,创建全 1 逻辑数
用 组
逻 logical(A) 创建逻辑数组 ,1 是非零元素 , 其
辑 余0
函 数据对 isempty (A) 是否空阵
数 象判定 isfinite(A) 是否有限数 >> a=6/0;>>
b=isfinite(a) , b=0
isinf(A) 是否无求值 b=isinf(a), b=1
isnan(A) 是否非数
2.6.5 运算优先级

优先级决定表达式求值顺序 ;

相同优先级的运算符从左到右依次运算 ;

不同优先级的运算符采用进行优先高的运算。
运算符的优先等级表

括号的优先级别最高,用括号来改变默认的优先等级
a=1>[-1,-2/3,3]'-3|[-1,-2/3,3]'.^2>0

You might also like