안녕하세요 만해입니다.
지금 엄청난 뻘짓으로 행렬의 값을 구하는 소스만들었는데요
이게 뭔일인지 자꾸 뻗어 버리네요
엄청난 재귀 호출이 있어서 그런가?
typedef vector < vector < double > > DMatrix_2D;
double Matrix_Det ( DMatrix_2D matrix )
{
// 입력 되는 행렬은 N * N 행렬
unsigned int Matrix_Count = matrix.size();
unsigned int Sub_Matrix_Count = Matrix_Count -1;
// DMatrix_2D temp_matrix(Matrix_Count,Matrix_Count);
if ( Matrix_Count == 3)
return - matrix[0][0]*((matrix[1][1]*matrix[2][2])-(matrix[1][2]*matrix[2][1]))
+ matrix[0][1]*((matrix[1][0]*matrix[2][2])-(matrix[1][2]*matrix[2][0]))
- matrix[0][2]*((matrix[1][0]*matrix[2][1])-(matrix[1][1]*matrix[2][0]));
// 3*3 행렬의 행렬값은 ad-bc
else
{
vector < DMatrix_2D > Sub_Matrix(Matrix_Count);
for ( size_t i = 0 ; i < Sub_Matrix.size() ; i++ )
{
Sub_Matrix[i].resize(Sub_Matrix_Count);
for ( size_t j = 0 ; j < Sub_Matrix_Count ; j ++ )
Sub_Matrix[i][j].resize(Sub_Matrix_Count);
}
for ( size_t i = 0 ;i < Matrix_Count ; i++ )
{
for ( size_t j = 1 ; j < Matrix_Count ;j++ )
{
for ( size_t k = 0,Mr=0 ; k < Matrix_Count ;k++)
{
Sub_Matrix[i][j-1][Mr] = matrix[j][k];
if (k!=i) Mr++;
}
}
}
double det_matrix=0.0;
for ( size_t i = 0 ; i < Sub_Matrix.size() ;i++ )
{
det_matrix = det_matrix + (-1^i)*1.0*Matrix_Det(Sub_Matrix[i]);
}
return det_matrix;
}
}
이 개념은 이렇습니다.
N*N행렬이 들어 오면 N이 3이 될때까지 계속 잘라 내면서 재귀 호출 시킵니다.
그래서 3이 되면 계산된 값이 역으로 전파 되면서 값이 계산되는 형식을 취했는데요
이상하게 밑에 잇는 값을 합하는 부분
double det_matrix=0.0;
for ( size_t i = 0 ; i < Sub_Matrix.size() ;i++ )
{
det_matrix = det_matrix + (-1^i)*1.0*Matrix_Det(Sub_Matrix[i]); <- 여기서 호출하는 부분에서
} // 자꾸 에러가 나네요
return det_matrix;
우찌 된건지 쩝~
고수님들의 도움 바랍니다.
C++Builder 6 에서 구현 컴파일 해봤습니다.
|