- 締切済み
C言語で10行10列の行列式の値を返す。
こんにちは。 この馬鹿に手を貸してください。 3行3列までは余裕で作れるのですが、4行4列から解法が変わるため わかりません。本を探したのですが本に載ってるプログラムが複雑すぎて、 理解ができません。 LU分解などを用いてるようなのですが、 わかりやすく作れる方法、考え方、などありましたらアドバイスください。 初歩的な質問かもわかりませんが、どうかよろしくおねがいします。 もしよかったら、ソースコードを・・・。 すみません。よろしくおねがいします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- ranx
- ベストアンサー率24% (357/1463)
こんなところでどうでしょう。 次元の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; }