对给定的
m
m
m-维向量组
α
1
=
(
a
11
a
21
⋮
a
m
1
)
,
α
2
=
(
a
12
a
22
⋮
a
m
2
)
,
⋯
,
α
n
=
(
a
1
n
a
2
n
⋮
a
m
n
)
\boldsymbol{\alpha}_1=\begin{pmatrix}a_{11}\\a_{21}\\\vdots\\a_{m1}\end{pmatrix},\boldsymbol{\alpha}_2=\begin{pmatrix}a_{12}\\a_{22}\\\vdots\\a_{m2}\end{pmatrix},\cdots,\boldsymbol{\alpha}_n=\begin{pmatrix}a_{1n}\\a_{2n}\\\vdots\\a_{mn}\end{pmatrix}
α1=
a11a21⋮am1
,α2=
a12a22⋮am2
,⋯,αn=
a1na2n⋮amn
为计算它的一个最大无关组,计算与矩阵
A
=
(
α
1
,
α
2
,
⋯
,
α
n
)
\boldsymbol{A}=(\boldsymbol{\alpha}_1,\boldsymbol{\alpha}_2,\cdots,\boldsymbol{\alpha}_n)
A=(α1,α2,⋯,αn)等价的最简行阶梯阵。设其非零行数,即
A
\boldsymbol{A}
A的秩为
r
r
r。则前
r
r
r列对应由
r
r
r个向量构成最大无关组,后
n
−
r
n-r
n−r列则为其他向量被最大无关组线性表示的系数。可以利用博文《消元法与矩阵初等变换》定义的rowLadder函数和simplestLadder函数,定义如下计算向量组的最大无关组的函数。
import numpy as np #导入numpy
def maxIndepGrp(A):
m,n=A.shape #读取向量位数m和个数n
r,order=rowLadder(A,m,n) #计算行阶梯阵
simplestLadder(A,r) #计算最简行阶梯阵
return r,order,A[:r,r:]
程序很简单,第3行读取矩阵的行数m和列数n,也就是向量的维数和个数。第4行调用rowLadder函数(见博文《消元法与矩阵初等变换》)将A变换为行阶梯阵,返回秩r和对列顺序的可能改变order。第5行调用simplestLadder函数(见博文《消元法与矩阵初等变换》)将A变换为最简阶梯阵。第6行返回3个值:A的秩r,也是最大无关组所含向量个数;向量顺序数组order;最简阶梯阵的后r行n-r列构成的块A[:r,r:],其中每一列数据对应一个不在最大无关组中的向量被最大无关组线性表示的系数。 例1 用Python计算向量组
α
1
=
(
2
1
4
3
)
,
α
2
=
(
−
1
1
−
6
6
)
,
α
3
=
(
−
1
−
2
2
−
9
)
,
α
4
=
(
1
1
−
2
7
)
,
α
5
=
(
2
4
4
9
)
\boldsymbol{\alpha}_1=\begin{pmatrix}2\\1\\4\\3\end{pmatrix},\boldsymbol{\alpha}_2=\begin{pmatrix}-1\\1\\-6\\6\end{pmatrix},\boldsymbol{\alpha}_3=\begin{pmatrix}-1\\-2\\2\\-9\end{pmatrix},\boldsymbol{\alpha}_4=\begin{pmatrix}1\\1\\-2\\7\end{pmatrix},\boldsymbol{\alpha}_5=\begin{pmatrix}2\\4\\4\\9\end{pmatrix}
α1=
2143
,α2=
−11−66
,α3=
−1−22−9
,α4=
11−27
,α5=
2449
的一个最大无关组,并将不属于最大无关组的向量用最大无关组线性表示。
import numpy as np #导入numpy
from utility import maxIndepGrp #导入maxIndepGrp
a1=np.array([2,1,4,3],dtype='float').reshape(4,1) #向量组设置
a2=np.array([-1,1,-6,6],dtype='float').reshape(4,1)
a3=np.array([-1,-2,2,-9],dtype='float').reshape(4,1)
a4=np.array([1,1,-2,7],dtype='float').reshape(4,1)
a5=np.array([2,4,4,9],dtype='float').reshape(4,1)
A=np.hstack((a1,a2,a3,a4,a5)) #组成矩阵
_,n=A.shape #向量个数
r,order,expr=maxIndepGrp(A) #计算秩,向量顺序,线性表达式系数
print('最大无关组:',end='')
for i in range(r): #最大无关组
print('a%d'%(order[i]+1),end=' ')
print()
for i in range(n-r): #其他向量线性表示式
print('a%d=(%.0f)a%d'%(order[r+i]+1,expr[0,i],order[0]+1),end='')
for j in range(1,r):
print('+(%.0f)a%d'%(expr[j,i],order[j]+1),end='')
print()
程序的第2~6行设置向量组a1,a2,a3,a4,a 5。第7行组合成矩阵A。第8行读取A的列数,也就是向量个数n。第9行调用上述程序定义的maxIndepGrp函数,计算A的列数r,即最大无关组所含向量个数;跟踪变换过程中向量间相对位置变化的数组order和不属于最大无关组各向量由最大无关组线性表示的系数expr。第11~12行的for语句利用order的前r个元素确定最大无关组。第14~18行的for语句利用2-维数组expr输出每个不属于最大无关组的向量被最大无关组线性表示式。运行程序,输出
最大无关组:a1 a2 a4
a3=(-1)a1+(-1)a2+(-0)a4
a5=(4)a1+(3)a2+(-3)a4
写博不易,敬请支持: 如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持! 代码诚可贵,原理价更高。若为AI学,读正版书好。