矩阵乘法计算

编写一个函数实现矩阵A(2行3列)与矩阵B相乘(3行2列),乘积放在C数组中,在主函数中输入相乘的两数组,并输出结果(TC,2.0条件下)

Status MultSMatrix(TSMatrix M,TSMatrix N,TSMatrix *Q)
{ /* 求稀疏矩阵的乘积Q=M×N */
int i,j;
ElemType *Nc,*Tc;
TSMatrix T; /* 临时矩阵 */
if(M.nu!=N.mu)
return ERROR;
T.nu=M.mu; /* 临时矩阵T是Q的转秩矩阵 */
T.mu=N.nu;
T.tu=0;
Nc=(ElemType*)malloc((N.mu+1)*sizeof(ElemType)); /* Nc为矩阵N一列的临时数组(非压缩,[0]不用) */
Tc=(ElemType*)malloc((M.nu+1)*sizeof(ElemType)); /* Tc为矩阵T一行的临时数组(非压缩,[0]不用) */
if(!Nc||!Tc) /* 创建临时数组不成功 */
exit(ERROR);
for(i=1;i<=N.nu;i++) /* 对于N的每一列 */
{
for(j=1;j<=N.mu;j++)
Nc[j]=0; /* 矩阵Nc的初值为0 */
for(j=1;j<=M.mu;j++)
Tc[j]=0; /* 临时数组Tc的初值为0,[0]不用 */
for(j=1;j<=N.tu;j++) /* 对于N的每一个非零元素 */
if(N.data[j].j==i) /* 属于第i列 */
Nc[N.data[j].i]=N.data[j].e; /* 根据其所在行将其元素值赋给相应的Nc */
for(j=1;j<=M.tu;j++) /* 对于M的每一个值 */
Tc[M.data[j].i]+=M.data[j].e*Nc[M.data[j].j]; /* Tc中存N的第i列与M相乘的结果 */
for(j=1;j<=M.mu;j++)
if(Tc[j]!=0)
{
T.data[++T.tu].e=Tc[j];
T.data[T.tu].i=i;
T.data[T.tu].j=j;
}
}
if(T.tu>MAX_SIZE) /* 非零元素个数太多 */
return ERROR;
TransposeSMatrix(T,Q); /* 将T的转秩赋给Q */
DestroySMatrix(&T); /* 销毁临时矩阵T */
free(Tc); /* 释放动态数组Tc和Nc */
free(Nc);
return OK;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-04