• ベストアンサー

マトリクスの行列式の値

以下のプログラムで「マトリクスの行列式の値」を示す部分はどこにあたりますか?? よろしくお願いします。 #include<stdio.h> #include<stdlib.h> #include<math.h> int main(void){ int i,j,k,p,N; double r,*b,*a,*ai,*ak,*ap; double amax; /*第k列の第k行から第N-1行までの最大値*/ printf("N="); scanf("%d",&N); a= (double*)malloc(N*N*sizeof(double)); if(a==NULL){ printf("Can't allocate memory"); exit(1); } ai=a; ak=a; for(i=0;i<N;i++){ for(j=0;j<N;j++){ printf("a[%d][%d]=",i,j); scanf("%lf",&ai[j]); } ai+=N; } b=(double*)malloc(N*sizeof(double)); if(b==NULL){ printf("Can't allocate memory"); exit(1); } for(i=0;i<N;i++){ printf("b[%d]",i); scanf("%lf",&b[i]); } for(k=0;k<N-1;k++){ /*前進消去法*/ ai=ak+N; ap=a; p=k; amax=ak[k]; for(i=k+1;i<N;i++){ /*k行からN-1行の中で最大のものをだす*/ if(fabs(amax)<fabs(ai[k])){ p=i; /*最大となる値とその値の行を記憶*/ amax=ai[k]; } ai+=N; } ap+=p*N; for(j=0;j<N;j++){ /*第k行と第p行を入れ替える*/ amax=ak[j]; ak[j]=ap[j]; ap[j]=amax; } amax=b[k]; b[k]=b[p]; b[p]=amax; ai=ak+N; for(i=1+k;i<N;i++){ r=ai[k]/ak[k]; for(j=k+1;j<N;j++){ ai[j]-=ak[j]*r; } b[i]-=r*b[k]; ai+=N; } ak+=N; } /*このときのakは第N-1行を指すポインタとなっている*/ for(k=N-1;0<=k;k--){ for(j=N-1;k<=j;j--){ /*後退代入*/ if(j!=k){ b[k]-=ak[j]*b[j]; } } b[k]=b[k]/ak[k]; /*今回は特に変数xなどをつくらなくても答は出せる*/ ak-=N; } free(a); for(i=0;i<N;i++){ printf("x[%d]=%.2f\n",i,b[i]); } free(b); return 0; }

みんなが選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8469/18132)
回答No.1

「マトリクスの行列式の値」を示す部分はありません。