试题四(15分)
阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。
【说明】
某工程计算中要完成多个矩阵相乘(链乘)的计算任务。
两个矩阵相乘要求第一个矩阵的列数等于第二个矩阵的行数,计算量主要由进行乘法运算的次数决定。采用标准的矩阵相乘算法,计算Am*n*Bn*p,需要m*n*p次乘法运算。
矩阵相乘满足结合律,多个矩阵相乘,不同的计算顺序会产生不同的计算量。以矩阵A110*100,A2100*5,A35*50三个矩阵相乘为例,若按(A1*A2)*A3计算,则需要进行10*100*5+10*5*50=7500次乘法运算;若按A1*(A2*A3)计算,则需要进行100*5*50+10*100*50=75000次乘法运算。可见不同的计算顺序对计算量有很大的影响。
矩阵链乘问题可描述为:给定n个矩阵<A1,A2,….An>,矩阵Ai的维数为pi-1*Pi,其中i = 1,2,….n。确定一种乘法顺序,使得这n个矩阵相乘时进行乘法的运算次数最少。
由于可能的计算顺序数量非常庞大,对较大的n,用蛮力法确定计算顺序是不实际的。经过对问题进行分析,发现矩阵链乘问题具有最优子结构,即若A1*A2*…*An的一个最优计算顺序从第k个矩阵处断开,即分为A1*A2*….Ak和Ak+1*Ak+2*…*An两个子问题,则该最优解应该包含A1*A2*…*Ak的一个最优计算顺序和Ak+1*Ak+2*…An的一个最优计算顺序。据此构造递归式,
其中,cost[i][j]表示Ai+1*Ai+2*...Aj+1的最优计算的计算代价。最终需要求解cost[0][n-1]。
【C代码】
算法实现采用自底向上的计算过程。首先计算两个矩阵相乘的计算量,然后依次计算3个矩阵、4个矩阵、…、n个矩阵相乘的最小计算量及最优计算顺序。下面是算法的C语言实现。
(1)主要变量说明
n:矩阵数
seq[]:矩阵维数序列
cost[][]:二维数组,长度为n*n,其中元素cost[i][j]表示Ai+1*Ai+2*…Aj+1的最优计算的计算代价
trace[][]:二维数组,长度为n*n,其中元素trace[i][j]表示Ai+1*Ai+2*Aj+1的最优计算对应的划分位置,即k
(2)函数cmm
define N 100
intcost[N][N];
inttrace[N][N];
int cmm(int n,int seq[]){
int tempCost;
int tempTrace;
int i,j,k,p;
int temp;
for(i=0;i<n;i++){ cost[i][i] =0;}
for(p=1;p<n;p++){
for(i=0; (1) ;i++){
(2);
tempCost = -1;
for(k = i;k<j;k++){
temp = (3) ;
if(tempCost==-1||tempCost>temp){
tempCost = temp;
(4) ;
}
}
cost[i][j] = tempCost;
trace[i][j] = tempTrace;
}
}
return cost[0][n-1];
}
【问题1】(8分)
根据以上说明和C代码,填充C代码中的空(1)~(4)。
【问题2】(4分)
根据以上说明和C代码,该问题采用了 (5) 算法设计策略,时间复杂度 (6) 。(用O符号表示)
【问题3】(3分)
考虑实例n=6,各个矩阵的维数:A1为5*10,A2为10*3,A3为3*12,A4为12*5,A5为5*50,A6为50*6,即维数序列为5,10,3,12,5,50,6。则根据上述C代码得到的一个最优计算顺序为 (7) (用加括号方式表示计算顺序),所需要的乘法运算次数为 (8) 。
令V=Mn(C)是复数域上全体n阶矩阵所组成的n2维向量空间,令A是任意一个n阶复矩阵。如下地定义V的一个线性变换αA:V→V:对于任意X∈V=Mn(C),αA(X)=AX-AX。
(i)证明,r是非负整数,由此推出,如果A是幂零矩阵,那么αA是V的幂零变换;
(ii)如果A=D+N是A的若尔当分解,其中D是A的可对角化部分,N是幂零部分,那么αD和αN分别是线性变换αA的若尔当分解。
A.1/3
B.1
C.3
D.9
(65)
A.1/3
B.1
C.3
D.9
设V是一个欧氏空间,α∈V是一个非零向量。对于ξ∈V,规定
证明:τ是V的一个正交变换,且τ2=t,t是单位变换。
线性变换τ叫作由向量α所决定的一个镜面反射。当V是一个n维欧氏空间时,证明存在V的一个标准正交基,使得τ关于这个基的矩阵有形状:
在三维欧氏空间里说明线性变换τ的几何意义。
检验以下集合对于所指的线性运算是否构成实数域上的线性空间:
1)次数等于n(n≥1)的实系数多项式的全体,对于多项式的加法和数量乘法;
2)设A是一个nxn实矩阵,A的实系数多项式f(A)的全体,对于矩阵的加法和数量乘法;
3)全体n级实对称(反称,上三角形)矩阵,对于矩阵的加法和数量乘法;
4)平面上不平行于某一向量的全部向量所成的集合,对于向量的加法和数量乘法;
5)全体实数的二元数列,对于下面定义的运算:
6)平面上全体向量,对于通常的加法和如下定义的数量乘法:
7)集合与加法同6),数量乘法定义为
8)全体正实数R+,加法与数量乘法定义为
设矩阵 A非奇异,且有一个特征值为λ对应的特征向量为Vo证明:
(1)的一个特征值,对应的特征向量为V(λ≠0);
(2)aλ为aA的一个特征值(a为常数);
(3)λ+a为A+al的一个特征值(I为单位阵)。
阅读以下说明和流程图,将应填入(n)处的字句写在对应栏内。
【说明】
在一个矩阵中,如果其零元素的个数远远多于其非零元素的个数时,称这样的矩阵为稀疏矩阵。稀疏矩阵通常采用三元组数组表示。每个非零元素用一个三元组来表示,即非零元素的行号、列号和它的值。然后按某种顺序将全部非零元素的三元组存于一个数组中。例如,对于以下二维数组:
int x[3][4]={{1,0,0,0},{0,5,0,0),{0,0,7,2}};
可用以下数组a来表示:
int a[][3]={{3,4,4},{0,0,1},{1,1,5),{2,2,7},{2,3,2}};
其中三元数组a的第1行元素的值分别存储稀疏矩阵×的行数、列数和非零元素的个数。
下面的流程图描述了稀疏矩阵转换的过程。
【流程图】
设V是对于非退化对称双线性函数f(α,β)的n维准欧氏空间,V的一组基ε1,...,εn如果满足
则称为V的一组正交基。如果V上的线性变换满足
则称为V的一个准正交变换。试证:
1)准正交变换是可逆的,且逆变换也是准正交变换;
2)准正交变换的乘积仍是准正交变换;
3)准正交变换的特征向量α,若满足f(α,α)≠0,则其特征值等于1或-1;
4)准正交变换在正交基下的矩阵T满足