#2
by あたっしゅ » 3年前
今回の学校の課題は
2 3 // 行列 X[2][3]
1 2 3
4 5 6
2 1 // 行列 Y[2][1]
1
0
2 3 // 行列 A[2][3]
1 2 3
4 5 6
3 2 // 行列 B[3][2]
1 0
0 1
1 0
行列 X * 行列 Y // (2*3 2*1の計算)
Invalid calculation!!
行列 A * 行列 B // (2*3 3*2の計算の答え)
4 2
10 5
ということで、よろしいのでしょうか ?
「2*3×3*2」で検索したところ、
http://zhi-ma.hatenablog.com/entry/2013/10/07/155149
2行3列の行列と3行2列の行列の積を求めるプログラム - プログラミング+α学習ブログ(ja)
と出ました。
コード:
#include <stdio.h>
/*--- 2行3列の行列maと3行2列の行列mbの積にmcに格納する ---*/
void mul(const int ma[2][3], const int mb[3][2], int mc[2][2])
{
int i, j, k;
for (i = 0; i < 2; i++)
for (j = 0; j < 2; j++) {
mc[i][j] = 0;
for (k = 0; k < 3; k++)
mc[i][j] += ma[i][k] * mb[k][j];
}
}
int main(void)
{
int i, j;
int A[2][3] = { {1, 2, 3}, {4, 5, 6} };
int B[3][2] = { {1, 0}, {0, 1}, {1, 0} };
int z[2][2];
mul(A, B, z);
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++)
printf("%3d", z[i][j]);
putchar('\n');
}
return (0);
}
// end.
https://www.onlinegdb.com/ で処理した結果、
4 2
10 5
と出ました。
今回の学校の課題は
2 3 // 行列 X[2][3]
1 2 3
4 5 6
2 1 // 行列 Y[2][1]
1
0
2 3 // 行列 A[2][3]
1 2 3
4 5 6
3 2 // 行列 B[3][2]
1 0
0 1
1 0
行列 X * 行列 Y // (2*3 2*1の計算)
Invalid calculation!!
行列 A * 行列 B // (2*3 3*2の計算の答え)
4 2
10 5
ということで、よろしいのでしょうか ?
「2*3×3*2」で検索したところ、
http://zhi-ma.hatenablog.com/entry/2013/10/07/155149
2行3列の行列と3行2列の行列の積を求めるプログラム - プログラミング+α学習ブログ(ja)
と出ました。
[code]
#include <stdio.h>
/*--- 2行3列の行列maと3行2列の行列mbの積にmcに格納する ---*/
void mul(const int ma[2][3], const int mb[3][2], int mc[2][2])
{
int i, j, k;
for (i = 0; i < 2; i++)
for (j = 0; j < 2; j++) {
mc[i][j] = 0;
for (k = 0; k < 3; k++)
mc[i][j] += ma[i][k] * mb[k][j];
}
}
int main(void)
{
int i, j;
int A[2][3] = { {1, 2, 3}, {4, 5, 6} };
int B[3][2] = { {1, 0}, {0, 1}, {1, 0} };
int z[2][2];
mul(A, B, z);
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++)
printf("%3d", z[i][j]);
putchar('\n');
}
return (0);
}
// end.
[/code]
https://www.onlinegdb.com/ で処理した結果、
4 2
10 5
と出ました。