[c言語] 行列の和と積の計算をしてみよう!

C言語

前回は行列の入力、出力、逆行列の勉強しました。

今回は題名の通り、行列の和と積の計算をします。

和の計算は簡単ですが、積の計算は少し難しいと思います。

行列の和の計算

では早速サンプルコードを見てみましょう。

#include <stdio.h>

int main(void){

  int A[2][3],B[2][3];
  int i,j;

  printf("2×3行列Aの値を入力します\n");
  for(i=0; i<2; i++){
    for(j=0; j<3; j++){
      scanf("%d",&A[i][j]);
    }
  }

  printf("2×3行列Bの値を入力します\n");
  for(i=0; i<2; i++){
    for(j=0; j<3; j++){
      scanf("%d",&B[i][j]);
    }
  }

  printf("行列の和を出力します\n");
  for(i=0; i<2; i++){
    for(j=0; j<3; j++){
      printf("%d ",A[i][j]+B[i][j]);
    }
    printf("\n");
  } 

  return 0;
       
}

/* 実行結果

2×3行列Aの値を入力します
2 3 4
6 7 8
2×3行列Bの値を入力します
2 1 6
3 5 7
行列の和を出力します
4 4 10 
9 12 15 

*/

計算の流れを見てみましょう。

みてわかると思いますが、位置が同じ同士を足していくのが、行列の和の計算になりますので、必ず行列のサイズを同じにしてください。今回は2×3の行列なので、全ての行列を2×3行列にして計算をしてください。

行列の積の計算

#include <stdio.h>

int main(void){

  int A[2][3],B[3][2],C[2][2]={0};
  int i,j,k;

  printf("2×3行列Aの値を入力します\n");
  for(i=0; i<2; i++){
    for(j=0; j<3; j++){
      scanf("%d",&A[i][j]);
    }
  } 

  printf("3×2行列Bの値を入力します\n");
  for(i=0; i<3; i++){
    for(j=0; j<2; j++){
      scanf("%d",&B[i][j]);
    }
  }

  printf("行列の積の計算をします\n");
  for(i=0; i<3; i++){
    for(j=0; j<2; j++){
      for(k=0; k<3; k++){
	      C[i][j]+=A[i][k]*B[k][j];
      }
    }
  }

  printf("行列Cを出力します\n");
  for(i=0; i<2; i++){
     for(j=0; j<2; j++){
       printf("%d ",C[i][j]);
     }
     printf("\n");
  }

  return 0;

}

/* 実行結果

2×3行列Aの値を入力します
1 2 3
4 5 6
3×2行列Bの値を入力します
1 2
3 4
5 6
行列の積の計算をします
行列Cを出力します
22 28 
49 64

*/

今までは2重ループのfor文でしたが、積の計算は3重ループとなります。複雑ですね。

サンプルコードを見ても難しいと思うので、処理の流れを写真を見ながら、考えていきましょう。

まず、左方の行列の列と右方の行列の行のサイズを同じにしないと計算できないので注意が必要です。

分かりにくかったと思うので実際に求めてみました。どうでしょうか。これでだいぶ流れの方は掴めたかなと思うのであとは自分で考えてプログラムを作ってみるといいかもしれません。根気強くいきましょう。今日は以上で終了となります。ありがとうございました。

コメント

タイトルとURLをコピーしました