|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
为什么我这个计算出来的矩阵乘积结果不对啊
#include<stdio.h>
int main()
{
int m,p,n=0,i,j;
int a[2][3]={1,2,3,4,5,6},b[3][2]={1,2,3,4,5,6};
int c[2][2];
for(i=0;i<2;i++)
{
for(n=0;n<2;n++)
{
for(j=0;j<3;j++)
{
c[i][n]+=(a[i][j]*b[j][i]);
}
}
}
for(i=0;i<2;i++)
{
printf("|");
for(j=0;j<3;j++)
{
printf("%2d",a[i][j]);
}
printf("|\n");
}
printf("*\n");
for(i=0;i<3;i++)
{
printf("|");
for(j=0;j<2;j++)
{
printf("%2d",b[i][j]);
}
printf("|\n");
}
printf("=\n");
for(i=0;i<2;i++)
{
printf("|");
for(j=0;j<2;j++)
{
printf("%2d",c[i][j]);
}
printf("|\n");
}
return 0;
}
c[i][n]+=(a[i][j]*b[j][i]);
矩阵乘法的运算你弄错了,不是简单的讲ij反过来就可以了
正确的代码如下 #include<stdio.h>
int main()
{
int m,p,n=0,i,j;
int a[2][3]={1,2,3,4,5,6},b[3][2]={1,2,3,4,5,6};
int c[2][2] = {0};
int lie = 0;
int hang = 0;
for(i=0;i<2;i++)
{
for(n=0;n<2;n++)
{
for(j=0;j<3;j++)
{
c[i][n]+=(a[i][j]*b[hang][lie]);
++hang;
}
++lie;
hang = 0;
}
lie = 0;
}
for(i=0;i<2;i++)
{
printf("|");
for(j=0;j<3;j++)
{
printf("%2d",a[i][j]);
}
printf("|\n");
}
printf("*\n");
for(i=0;i<3;i++)
{
printf("|");
for(j=0;j<2;j++)
{
printf("%2d",b[i][j]);
}
printf("|\n");
}
printf("=\n");
for(i=0;i<2;i++)
{
printf("|");
for(j=0;j<2;j++)
{
printf(" %d",c[i][j]);
}
printf("|\n");
}
return 0;
}
|
|