プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。
この馬鹿に手を貸してください。
3行3列までは余裕で作れるのですが、4行4列から解法が変わるため
わかりません。本を探したのですが本に載ってるプログラムが複雑すぎて、
理解ができません。
LU分解などを用いてるようなのですが、
わかりやすく作れる方法、考え方、などありましたらアドバイスください。
初歩的な質問かもわかりませんが、どうかよろしくおねがいします。
もしよかったら、ソースコードを・・・。
すみません。よろしくおねがいします。

A 回答 (1件)

こんなところでどうでしょう。


次元の1小さな行列を作って再帰的に計算しています。

 typedefstruct{
  double *val;
  int dim;
 } Matrix;
 #define MXVALUE(m,r,c) ((m)->val[(r)*(m)->dim+(c)])

 Matrix *newMatrix(int dim) {
  Matrix *matrix;
  matrix = (Matrix*)malloc(sizeof(Matrix));
  matrix->dim = dim;
  matrix->val = (double*)malloc(sizeof(double)*dim*dim));
 }

 int getDeterminant(Matrix *mx) {
  int value;
  int i, r, c;
  Matrix *sub;
  if (mx->dim == 1) {
  value = MXVALUE(mx,0,0);
  }
  else {
  value = 0;
  for (i=0 ; i<mx->dim ; i++) {
  sub = newMatrix(mx->dim-1);
  if (sub) {
  for (r=0 ; r<i ; r++) {
  for (c=1 ; c<mx->dim ; c++) {
  MXVALUE(sub,r,c-1) = MXVALUE(mx,r,c);
  }
  }
  for (r=i+1 ; r<mx->dim ; r++) {
  for (c=1 ; c<mx->dim ; c++) {
  MXVALUE(sub,r-1,c-1) = MXVALUE(mx,r,c);
  }
  }
  if (i%2 == 0) {
  value += (MXVALUE(mx,c,0) * getDeterminant(sub));
  }
  else {
  value -= (MXVALUE(mx,c,0) * getDeterminant(sub));
  }
  }
  else {
  /*メモリーエラー*/
  }
  }
  }
  return value;
 }
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!