スポンサード リンク

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサード リンク
-- : -- : -- | スポンサー広告 | page top↑
スポンサード リンク

サラスの方法を利用した3×3-行列の行列式の計算(C言語)

「行列式 c 言語 3 3」という検索ワードでこのブログに迷い込んだ方がいらっしゃるようなので、サラスの方法(*1)を利用して3×3-行列Aの行列式det(A)を計算するプログラムをC言語で書いてみました。

行列式を計算する関数:det

int det(int a[3][3]) {
  return a[0][0]*a[1][1]*a[2][2]
       + a[0][1]*a[1][2]*a[2][0]
       + a[0][2]*a[1][0]*a[2][1]
       - a[0][2]*a[1][1]*a[2][0]
       - a[1][2]*a[2][1]*a[0][0]
       - a[2][2]*a[0][1]*a[1][0];
}

テスト用のmain関数

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
  int a[3][3], i, j;

  if(argc == 1) {
    a[0][0] = 1; a[0][1] = 2; a[0][2] = 3;
    a[1][0] = 4; a[1][1] = 5; a[1][2] = 6;
    a[2][0] = 7; a[2][1] = 8; a[2][2] = 9;
  } else if(argc == 10) {
    for(i=0; i<3; i++)
      for(j=0; j<3; j++)
	a[i][j] = atoi(argv[3*i+j+1]);
  } else {
    printf("Usage:\n");
    printf("./a.out\n");
    printf("   or\n");
    printf("./a.out a11 a12 a13 a21 a22 a23 a31 a32 a33");
  }

  printf("a =\n");
  for(i=0; i<3; i++) {
    for(j=0; j<3; j++) {
      printf("%3d", a[i][j]);
    }
    printf("\n");
  }
  printf("\n");

  printf("det(a) = %d\n", det(a));

  return 0;
}
$ ./det
a =
  1  2  3
  4  5  6
  7  8  9

det(a) = 0
$ ./det 1 6 -2 5 -3 4 -1 -2 4
a =
  1  6 -2
  5 -3  4
 -1 -2  4

det(a) = -122

テスト用のmain関数(簡易版)

「こんなプログラム分からんわい!」という方のために、必要最小限の機能だけを持たせたmain関数も用意しました。

#include <stdio.h>

int main(int argc, char *argv[]) {
  int a[3][3];

  a[0][0] = 1; a[0][1] = 2; a[0][2] = 3;
  a[1][0] = 4; a[1][1] = 5; a[1][2] = 6;
  a[2][0] = 7; a[2][1] = 8; a[2][2] = 9;

  printf("det(a) = %d\n", det(a));

  return 0;
}

English Version


*1: もちろん、余因子展開によって行列式を求めることもできますが、3×3-行列においてはサラスの方法で簡単に計算することができるため、ここではサラスの方法を採用しました。


スポンサード リンク

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

23 : 05 : 23 | プログラミング-C/C++ | トラックバック(0) | コメント(0) | page top↑
<<大学のノート公開 | ホーム | インストール直後のUbuntuはHello, world!のコンパイルができない!>>
コメント

コメントの投稿














管理者にだけ表示を許可する

トラックバック
トラックバックURL
http://networkprogramming.blog18.fc2.com/tb.php/63-e59f986c
この記事にトラックバックする(FC2ブログユーザー)
| ホーム |

プロフィール

TBVector

Author:TBVector

プロフィール

メールフォーム

記事検索

Google

最近の記事

人気の記事

過去の記事

カテゴリー

タグランキング

リンク

最近のコメント

最近のトラックバック

アクセスカウンタ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。