0

基本変換を使用して行列を上三角行列(または下三角行列)に変換してから、対角要素を乗算して、指定された非特異行列の行列式を見つけたいと思います。私はcプログラミングの初心者であり、非特異行列の行列式を計算するために次のコードを記述しました。コードは

   #include<stdio.h>
   #include<math.h>     
        void main()
        {
                int i,j,k,r;
                float mat[20][20],temp,diag=1;
                printf("enter the order of the square matrix\n\n");
                scanf("%d",&r);
                for(i=0;i<r;i++)
                {
                    for(j=0;j<r;j++)
                    {
                        printf("enter the (%d , %d)th entry",i+1,j+1);
                        scanf("%f",&mat[i][j]);
                    }
                }
                printf("The matrix we have entered is\n\n ");
                for(i=0;i<r;i++)
                {
                    for(j=0;j<r;j++)
                    {
                        printf("\t%f",mat[i][j]);

                    }
                 printf("\n");
                }
                for(i=0;i<r-1;i++)
                {
                    for(j=i+1;j<r;j++)
                    {
                        temp=mat[j][i]/mat[i][i];
                        for(k=0;k<r;k++)
                        {
                            mat[j][k]=mat[j][k]-temp*mat[i][k];
                        }
                    }
                }
              for(i=0;i<r;i++)
                {

                    diag=diag*mat[i][i];

                }
                printf("\n\nThe value of the determinant is %f",diag);
        }

これは、(1,1)番目の要素(つまり、最初の対角要素)としてゼロを持つ行列を除くすべての非特異行列に対して正常に機能します。これは、私の原因で発生していることが理解できます。

  temp=mat[j][i]/mat[i][i];

コードしかし、このコードは行列式を計算するために必要です。したがって、プログラムを変更して、非特異行列で実行されるようにする必要があります。目的を達成するためにプログラムを編集するにはどうすればよいですか?ご協力いただきありがとうございます。

4

1 に答える 1

0

上三角行列を求めてから行列式を求めたほうがいいと思います。このコードは役に立つかもしれません:

#include<stdio.h>

int main(){
    float  matrix[10][10], ratio, det;
    int i, j, k, n;
    printf("Enter order of matrix: ");
    scanf("%d", &n);
    printf("Enter the matrix: \n");
    for(i = 0; i < n; i++){
        for(j = 0; j < n; j++){
            scanf("%f", &matrix[i][j]);
        }
    }
    /* Conversion of matrix to upper triangular */
    for(i = 0; i < n; i++){
        for(j = 0; j < n; j++){
            if(j>i){
                ratio = matrix[j][i]/matrix[i][i];
                for(k = 0; k < n; k++){
                    matrix[j][k] -= ratio * matrix[i][k];
                }
            }
        }
    }
    det = 1; //storage for determinant
    for(i = 0; i < n; i++)
        det *= matrix[i][i];
    printf("The determinant of matrix is: %.2f\n\n", det);
    return 0;
}

ここから撮影

于 2013-11-17T17:47:36.817 に答える