-
1 文档
-
2 视频
-
3 PPT
4.1 线性代数中的应用
线性方程组的一般形式为
(4-1)
m个方程n个未知数。方程组的矩阵形式为
其中A是方程组系数矩阵,x是未知数列向量,B是方程右边常数的列向量。根据m与n值的不同,分三种情况。
1. 恰定方程组
当线性方程组m=n,且矩阵A可逆,则称该方程为恰定方程组,此类方程组的求解前面已知介绍过,应用左除求得特解。如例1-1,下面验证计算结果。
>>A=[2 1 -5 1;1 -3 0 -6;0 2 -1 2;1 4 -7 6];B=[8;9;-5;0];
>> inv(A)*B %结果等于A\B
ans =
3.0000
-4.0000
-1.0000
1.0000
对于线性齐次方程
,如果矩阵A的秩等于n,则只有零解;如果矩阵A的秩小于n,则有非零解,且所有解构成一向量空间,可利用函数null给出齐次方程组的解空间的一个正交规范基。
[例4-1]求线性方程组的解。

>>A=[1,1,-2,-1;3,-2,-1,2;0,5,7,3;2,-3,-5,-1];
>> det(A)
ans =
0
>> null(A)'
ans =
0.4714 -0.2357 0.4714 -0.7071
说明该齐次线性方程组的解空间是一维向量空间,且向量(0.4714,-0.235,0.4714,-0.7071)T是解空间的一个正交规范基。
[例4-2] 求线性方程组的解。

>>A=[1,1,2,-1;3,-2,-3,2;0,5,7,3;2,-3,-5,-1];
>> det(A)
ans =
-40.0000
>> null(A)
ans =
空矩阵: 4×0
解空间的基是一个空集,说明该线性方程组只有零解。
2. 超定方程组
当线性方程组m>n,称该方程组为超定方程组,Matlab求解超定方程组的运算是采用Householder变换直接求解方程组的最小二乘解。最小二乘法是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。
[例4-3] 求超定方程组的解。

解:此超定方程有四个方程,三个未知数。
>> A=[2 3 4;-2 5 -1;6 -4 3;2 5 -7];B=[3;-3;-7;4];
>>A\B
ans =
-0.2532
0.3950
-0.1954
>> pinv(A)*B; %pinv函数求伪逆矩阵,验证A\B
3. 欠定方程组
m<n,称该方程组为欠定方程组(不定方程组)。
[例4-4] 求欠定方程组
的解。
解:此不定方程组有三个方程,四个未知数。解是不确定的。用矩阵法得到的解有两个特征:在解中至多有秩(矩阵A的秩)个非零元素;该解是方程组所有解中2-阶范数最小的一个解。
>> A=[2 4 2 1;-1 2 0 2; 3 5 2 1 ];B=[1 ;4;6];
>>A\B
ans =
2.0000
3.0000
-7.5000
0
[例4-5] 一组测量数据如下表所示,拟用延迟指数函数

来拟合这组数据,并用图形形式给出拟合结果。
| t | 0 | 0.3 | 0.8 | 1.1 | 1.6 | 2.3 |
| y | 0.82 | 0.72 | 0.63 | 0.6 | 0.55 | 0.5 |
解:六组数据,可以建立起六个方程,但只含有c1、c2两个未知数,组成不定方程组,程序编写如下:
t=[0,0.3,0.8,1.1,1.6,2.3]';
a=[ones(size(t)),exp(-t)]; %得到方程的系数矩阵
y=[0.82,0.72,0.63,0.6,0.55,0.5]'; %方程右边常数的列向量
c=a\y %求c1,c2
T=[0:0.1:2.5]';Y=[ones(size(T)) exp(-T)]*c; %应用刚求得的c1,c2,计算拟合曲线
plot(T,Y,'-',t,y,'o'); %作图,显示原数据点与拟合曲线
title('最小二乘法曲线拟合');xlabel('\itt');ylabel('\ity');
legend('拟合曲线','实际值');

图4-1曲线拟合
程序执行后得到方程解,c1等于0.4760,c2等于0.3413,即

。图形形式结果见图4-1所示。
矩阵分解是将矩阵拆解为数个矩阵的乘积,常见的有三种:三角分解法,QR分解法,奇异值分解法。
1. 三角(LU)分解
三角分解法是将方阵分解成一个上三角形矩阵U和一个交换下三角形矩阵L,这样的分解法又称为LU分解法。它的用途主要在简化一个大矩阵的行列式值的计算过程、求逆矩阵和求解联立方程组。解并非唯一。Matlab中用于LU分解的lu函数常用的格式如下:
[L,U]=lu(A)
[L,U,P]=lu(A)
说明:应用第二种格式时,l*u=p*a。例如:
>> a=[1 2 3;4 5 6;4 2 6];
>> [l,u]=lu(a)
l =
0.2500 -0.2500 1.0000
1.0000 0 0
1.0000 1.0000 0
u =
4.0000 5.0000 6.0000
0 -3.0000 0
0 0 1.5000
>> l*u; %验证
>> [l,u,p]=lu(a)
l =
1.0000 0 0
1.0000 1.0000 0
0.2500 -0.2500 1.0000
u =
4.0000 5.0000 6.0000
0 -3.0000 0
0 0 1.5000
p =
0 1 0
0 0 1
1 0 0
>> l*u; p*a; %验证l*u=p*a
线性方程组求解,可以利用克莱姆法则求解,但随着阶次增高,计算量极大。一般采用高斯消元法,LU仅仅是高斯消元法的矩阵表示。下面简单介绍矩阵分解如何减小计算量。

应用LU分解来求解线性方程,消元过程是通过对系数矩阵的行操作实现的,而并没有进行矩阵相乘,运算速度更快。
2. 正交(QR)分解函数
QR算法是重要性最高、应用最广泛、最成功的工程计算工具之一。QR算法的基础是:反复使用QR分解,将矩阵A分解为一个正交矩阵与另一个矩阵的乘积称为矩阵A的正交分解。Matlab中用于QR分解的qr函数常用的格式如下:
[Q,R] =qr(A)
说明:Q表示正交(酉)矩阵,R是上三角矩阵,A = Q*R。
[Q,R,E] =qr(A)
说明:Q表示归一化矩阵,R是上三角矩阵,E是置换矩阵,A*E = Q*R。
例如:
>> [q,r,e]=qr(a)
q =
-0.6667 0.3333 -0.6667
-0.6667 -0.6667 0.3333
-0.3333 0.6667 0.6667
r =
-3.0000 -2.0000 -2.6667
0 2.0000 0.3333
0 0 1.3333
e =
0 1 0
1 0 0
0 0 1
3. 奇异值分解(SVD)
S=svd(A)
[U,S,V] = svd(A)
说明:计算矩阵奇异值分解的三个矩阵,满足
。
例如:
>> a=[1 0 1;0 -1 1]
a =
1 0 1
0 -1 1
>> [u,s,v]=svd(a) %可以验证得到a=u*s*v'。
u =
-0.7071 -0.7071
-0.7071 0.7071
s =
1.7321 0 0
0 1.0000 0
v =
-0.4082 -0.7071 -0.5774
0.4082 -0.7071 0.5774
-0.8165 0.0000 0.5774
>> S=svd(a) %求a分解所得的全部奇异值
S =
1.7321
1.0000
Matlab中还提供有用于Cholesky分解的chol函数、用于Jordan分解的jordan函数。
设A为n阶阵,如果数λ和n维非零列向量X,使关系式AX=λX成立,那么这样的数λ称为方阵A的特征值,非零列向量X称为A对应于特征值λ的特征向量。|A-λE|=0 称为方阵A的特征方程,其左端是λ的n次多项式,称为方阵A的特征多项式。Matlab中用于求解矩阵的特征值与特征向量函数eig格式如下:
lambda = eig(A)
[v,d]=eig(a)
例如:
>> a=[0 1;1 1];
>> [v,d] = eig(a) %可以验证a*v(:,1)等于d(1,1)*v(:,1)
v =
-0.8507 0.5257
0.5257 0.8507
d =
-0.6180 0
0 1.6180

