アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のプログラムで「マトリクスの行列式の値」を示す部分はどこにあたりますか??
よろしくお願いします。


#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;
}

A 回答 (1件)

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

    • good
    • 0

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