一. 线性代数(Linear Algebra)
解线性方程(Linear
equation)就是找出是否存在一个唯一的矩阵x,使得a,b满足关系:
ax=b 或 xa=b
MALAB中x=a\b 是方程 ax=b 的解, x=b/a是方程式xa=b的解。
通常线性方程多写成ax=b,“\”较多用,两者的关系为:
(b/a)’=(a’\b’)
系数矩阵a可能是m行n列的,有三种情况:
*方阵系统: (Square matrix)
m=n 可求出精确解(a必须是非奇异(nonsingular),即满秩(full rank))
*超定系统:(Overdetermind system)m>n
可求出最小二乘解
*欠定系统:(Underdetermind system) m
MATLAB对不同形式的参数矩阵,采用不同的运算法则来处理,它会自动检测参数矩阵,以区别下面几种形式:
*三角矩阵(Triangular Matrix)
*对称正定矩阵(symmetrical positive determined matrix)
*非奇异方阵(Nonsingular matrix)
*超定系统(Overdetermind system)
*欠定系统(Underdetermind system)
1. 方阵系统:(Square array)
最常见的是系数矩阵为方阵a,常数项b为列矢量, 其解x可写成x=a\b,
x和b大小相同。
例1: 求方阵系统的根。
a=[11 6 7;
5 13 9; 17 1 8]
b=[16 13 4]’
x=a\b
a =
11 6 7
5 13 9
17 1 8
b =
16
13
4
x =
3.9763
5.4455
-8.6303
例2:假如a,b为两个大小相同的矩阵,求方阵系统的根。
a=[4 5 9;
18 19 5; 1 4 13]
b=[1 5 12;
3 15 19; 7 6 10]
x=a\b
C=a*x
a =
4 5 9
18 19 5
1 4 13
b =
1 5 12
3 15 19
7 6 10
x =
-3.6750 -0.7333 2.9708
3.7250 1.4667 -2.1292
-0.3250 0.0667 1.1958
C =
1.0000 5.0000 12.0000
3.0000 15.0000 19.0000
7.0000 6.0000 10.0000
若方阵a的各个行矢量线性相关(linear
correlation),则称方阵a为奇异矩阵。这时线性方程将有无穷多组解。若方阵是奇异矩阵,则反斜线运算因子将发出警告信息。
2.超定系统(Overdetermind system)
实验数据较多,寻求他们的曲线拟合。
如在t内测得一组数据y:
t y
0.0 0.82
0.3 0.72
0.8 0.63
1.1 0.60
1.6 0.55
2.2 0.50
这些数据显然有衰减指数趋势: y(t)~c1+c2e-t
此方程意为y矢量可以由两个矢量逐步逼近而得,一个是单行的常数矢量,一个是由指数e-t项构成,两个参数c1和c2可用最小二乘法求得,它们表示实验数据与方程y(t)~c1+c2e-t之间距离的最小平方和。
例1:求上述数据的最小二乘解。将数据带入方程式y(t)~c1+c2e-t中,可得到含有两个未知数的6个等式,可写成6行2
列的矩阵e.
t=[0 0.3 0.8 1.1 1.6 2.2]’;
y=[0.82 0.72 0.63 0.60 0.55 0.50]’;
e=[ones(size(t)) exp(-t)] %求6个y(t)方程的系数矩阵
c=e\y % 求方程的解
e =
1.0000 1.0000
1.0000 0.7408
1.0000 0.4493
1.0000 0.3329
1.0000 0.2019
1.0000 0.1108
c =
0.4744
0.3434
带入方程得:y(t)~0.4744+0.3434e-t
用此方程可绘制曲线:
t=[0 0.3 0.8 1.1 1.6 2.2]’;
y=[0.82 0.72 0.63 0.60 0.55 0.50]’;
t1=[0:0.1:2.5]’; y1=[ones(size(t1)),exp(-t1)]*c
plot(t1,y1,’b’,t,y,’ro’)
如果一个矩阵的行矢量是线性相关的,则它的最小二乘解并不唯一,因此,a\b运算将给出警告,并产生含有最少元素的基解。
3 .欠定系统: (Underdetermind system)
欠定系统为线性相关系统,其解都不唯一,MATLAB会计算一组构成通解的基解,而方程的特解则用QR分解法决定。
两种解法:最少元素解a\b,最小范数解pinv(a)*b.
例: 用两种方法求解欠定系统。
对a和矢量b分别用a\b和pinv(a)*b求解:
a=[1 1 1;
1 1 -1]
b=[10 6]’
p=a\b
q=pinv(a)*b
a =
1 1 1
1 1 -1
b =
10
6
p =
8.0000
0
2.0000
q =
4.0000
4.0000
2.0000