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>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值