首页
登录 | 注册

C语言矩阵相乘

看了大神的博客:点击打开链接

矩阵相乘这里介绍2种方法,
首先明白一点:2个矩阵相乘对于a矩阵 na*ma  b矩阵 nb*mb (代表n行m列)
只有 ma==nb时,才能进行运算,不然就不能运算  运算出来的矩阵c na*mb
具体怎么运算举例说明
a  2*3       b   3*2       c  2*2
1 2 3           9 8 1*9+2*7+3*14,1*8+2*11+3*20 
4 5 6            7 11 4*9+5*7+6*14, 4*8+5*11+6*20 
  14 20
会发现什么规律呢?就是a矩阵的每一行的数与b矩阵的每一列的数对应相乘求和
求和几次是结束呢?那肯定是a,b矩阵相等的部分,下面看代码

<span style="font-size:18px;"><span style="font-size:18px;">int i,j,k,temp;
	for(i=0;i<na;++i)
	{
		for(j=0;j<mb;++j)//c矩阵的列数
		{
			temp=0;
			for(k=0;k<ma;++k)
				 temp+=a[i][k]+b[k][j];
			c[i][j]=temp;
			printf("%d",temp); 
			if(j==mb-1)
				printf("\n");
			else
				printf(" "); 
		} 
	} </span></span>

a  2*3      b   3*2      c  2*2
1 2 3 9 8 1*9+2*7+3*14,1*8+2*11+3*20 
4 5 6             7 11 4*9+5*7+6*14, 4*8+5*11+6*20 
  14 20
下面的代码计算顺序
举例说明一下
temp[mb]   temp[0]+=1*9 , temp[1]+=1*8
temp[0]+=2*7, temp[1]+=2*11
temp[0]+=3*14, temp[1]+=3*20

<span style="font-size:18px;"><span style="font-size:18px;">int i,j,temp[mb],k,g;
	for(i=0;i<na;++i)//a行 
	{
		for(k=0;k<mb;++i)//b列 
			temp[k]=0;
		for(j=0;j<ma;++j)//a列 
		{
			for(g=0;g<mb;++g) //b列 
				temp[g]+=a[i][j]*b[j][g]; 
		} 
		for(k=0;k<mb-1;++k)
		{
			printf("%d ",temp[k]); 
		} 
		printf("%d\n",temp[mb-1]); 
	} </span></span>




2020 jeepxie.net webmaster#jeepxie.net
10 q. 0.009 s.
京ICP备10005923号