2012-08-05 1 views
0

기본 행렬을 사용하여 행렬을 위 삼각형 (또는 삼각형 행렬)으로 변환 한 다음 대각 원소를 곱하여 주어진 비 고유 행렬의 행렬식을 찾으려고합니다. 저는 C 프로그래밍의 초보자이며 비 특이 행렬의 행렬식을 계산하기위한 다음 코드를 작성했습니다. 코드는C에서 기본 변환을 사용하여 비특이적 행렬 (n * n)의 행렬식을 계산하는 방법.

#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) 번째 요소로 제로 (즉, 최초의 대각선 요소)를 가지고있는 것을 제외하고는 비 특이 행렬 잘 작동이 .I이 이해할 수있는이 이런 일 때문에 내

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

이 코드는 그것이 내 목적을 달성하기 위해 내 프로그램을 편집 할 수 있습니다 비 단수 matrix.How 동안 실행되도록 프로그램을 변경하는 몇 가지 방법이 있어야 determinant.So을 계산에 필요한 code.But ? 당신의 도움을 주셔서 감사합니다.

+2

[당신이 시도 무엇?] (http://whathaveyoutried.com) –

+0

[블라스 (http://en.wikipedia.org에서 촬영 :이 코드를 유용을 찾을 수 있습니다/wiki/Basic_Linear_Algebra_Subprograms) –

+3

숫자 조리법보기 : http://nr.com –

답변

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

here

관련 문제