이해

2017-10-20 7 views
-5

나는 행렬의 행렬식을 계산 인터넷에서 프로그램을 발견했다 :이해

/* 
* C++ Program to Find the Determinant of a Given Matrix 
*/ 
#include<iostream> 
#include<math.h> 
#include<conio.h> 
using namespace std; 
double d = 0; 
double det(int n, double mat[10][10]) 
{ 
    int c, subi, i, j, subj; 
    double submat[10][10]; 
    if (n == 2) 
    { 
     return((mat[0][0] * mat[1][1]) - (mat[1][0] * mat[0][1])); 
    } 
    else 
    { 
     for(c = 0; c < n; c++) 
     { 
      subi = 0; 
      for(i = 1; i < n; i++) 
      { 
       subj = 0; 
       for(j = 0; j < n; j++) 
       {  
        if (j == c) 
        { 
         continue; 
        } 
        submat[subi][subj] = mat[i][j]; 
        subj++; 
       } 
       subi++; 
      } 
     d = d + (pow(-1 ,c) * mat[0][c] * det(n - 1 ,submat)); 
     } 
    } 
    return d; 
} 
int main() 
{ 
    int n; 
    cout<<"enter the order of matrix" ; 
    cin>>n; 
    double mat[10][10]; 
    int i, j; 
    cout<<"enter the elements"<<endl; 
    for(i=0;i<n;i++) 
    { 
     for(j=0;j<n;j++) 
     { 
      cin>>mat[i][j]; 
     } 
    } 
    cout<<"\ndeterminant"<<det(n,mat); 
    getch(); 
} 

소스 : 나는 그것을하지만 난 돈에서 배우고 싶었다 http://www.sanfoundry.com/cpp-program-find-determinant-given-matrix/

그것을 이해하지 못한다. 가우스 제거와 관련된 링크입니까? 그렇지 않으면이 알고리즘을 사용하는 프로세스를 알고 있습니까?

이 재귀 (n-1) x (n-1) subminors의 n 개의 결정을 계산하여 n x n 행렬의 행렬식을 계산 Lapace 확장을 사용하는 알고리즘 나

+0

선형 대수 수학 문제입니다. 답은 선형 대수학 교과서 또는 [여기] (https://en.wikipedia.org/wiki/Determinant)에 있습니다. –

+0

자신의 코드를 더 잘 작성하고 싶다면 솔직하게 말해서 쓸모가 없습니다. (10x10) – user463035818

+0

@ tobi303이 아닌 하나의 특정 크기의 행렬에서만 작동하므로 1x1에서 10x10까지의 행렬에서 작동합니다. –

답변

0

에게 도움을 줄 수있을 수있는 일에 미리 감사드립니다. 2 x 2 행렬의 행렬식은 분명해야합니다.

LU 분해와 같은 더 나은 방법이 있습니다.

+1

빠른 답장을 보내 주셔서 감사합니다. – Muclos

0

프로그램은 재귀 함수를 사용하여 부 행렬을 만들고 부 행렬이 2x2 일 때 행렬식을 계산합니다.

프로그램에 서브 행렬의 행렬식이있는 경우 행렬식에 대해 Wikipedia page에서 볼 수 있듯이 합을 빼고 빼십시오.

결국 재귀 함수는 전체 행렬의 행렬식을 반환합니다.

+1

빠른 답장을 보내 주셔서 대단히 감사합니다. – Muclos