• 締切済み

C言語で10行10列の行列式の値を返す。

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

みんなの回答

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

こんなところでどうでしょう。 次元の1小さな行列を作って再帰的に計算しています。  typedef struct {   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;  }

関連するQ&A

専門家に質問してみよう