こんにちは、
今学校の課題で行列乗算演算のプログラムを書いています。
2 3
1 2 3 Invalid calculation!! (2*3 2*1の計算)
4 5 6 4 2 (2*3 3*2の計算の答え)
2 1 10 5
1
0
2 3
1 2 3
4 5 6
3 2
1 0
0 1
1 0
左の数字を入力して右の答えを出力しなきゃいけないんですが、そこのコードを上手くかけません。
下に書いてあるプログラムは2*3×3*2のプログラムです。この式も論理的に合っているかわからないのでアドバイスいただけませんでしょうか。
よろしくお願いします。
#include<stdio.h>
int main(){
{
int A[2][3],B[3][2],C[2][2];
int tmp[2][2]; //answer
int i,j,k;
/* caliculate */
for(i=0; i<2; i++){
for(j=0; j<2; j++){
tmp[j] = 0;
for(k=0; k<3; k++)tmp[j] += A[k]*B[k][j];
}
}
/* result copy to C*/
for(i=0; i<2; i++)
for(j=0; j<2; j++)
C[j] = tmp[j];
}
return 0;
}
行列乗算演算
Re: 行列乗算演算
今回の学校の課題は
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)
と出ました。
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)
と出ました。
#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.
4 2
10 5
と出ました。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
Re: 行列乗算演算
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
そうです!こんな感じです!
ありがとうございます!だけど、
23
123
456......の式をプログラムに直接入れるのではなくて、プログラムを書いたあとプログラムの実行時に自分で入力しなくてはいけないです...
どう書けばいいのでしょうか..
ありがとうございます
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
そうです!こんな感じです!
ありがとうございます!だけど、
23
123
456......の式をプログラムに直接入れるのではなくて、プログラムを書いたあとプログラムの実行時に自分で入力しなくてはいけないです...
どう書けばいいのでしょうか..
ありがとうございます
Re: 行列乗算演算
所定回数ループを回して、その中でscanf()プログラムの実行時に自分で入力しなくてはいけないです...
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。