行列の積について
3行3列の行列AとB、およびその和と積を表示するものです
#include <stdio.h>
int main (void)
{
int i,j,k;
double a[3][3] = {{2.4, 5.5, -8.5},{0.8, 3.7, 1.1},{3.5, -9.1, 2.6}};
double b[3][3] = {{-5.1, 9.8, 2.3},{-4.1, 0.2, -0.3},{3.3, 6.1, -1.3}};
double c[3][3] = {0};
printf(" 行列A\n");
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++)
printf("%5.1f", a[i][j]);
printf("\n");
}
printf("\n 行列B\n");
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++)
printf("%5.1f", b[i][j]);
printf("\n");
}
printf("\n 行列A+B\n");
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++)
c[i][j] = a[i][j] + b[i][j];
}
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++)
printf("%5.1f", c[i][j]);
printf("\n");
}
for (i=0; i<3 ; i++){
for (j=0; j<3; j++)
for (k=0; k<3; k++)
c[i][j] =c[i][j]+ a[i][k]* b[k][j];
}
printf("\n 行列AB\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++)
printf("%7.2f", c[i][j]);
printf("\n");
}
return 0;
}
これだと積だけが異なった値が出てしまいます。
試しに、積の部分だけで組んでみると正しい答えが出ました。
for文のブロックの組み方がまずいのかなと思っていますが、これ以外だと、行列のレイアウトが崩れてしまいます
どのように直したらいいのか、ご教示お願いします