본문내용
j; k < row_num + 1; k++)// i행과 j행을 바꾸어 준다.
{
temp = matrix[j][k];
matrix[j][k] = matrix[i][k];
matrix[i][k] = temp;
}
break;
}
}
}
// 대각성분의 원소중 0이 있으면 실행 중단.
if(matrix[j][j]==0)
{
printf("\n-----------------------------\n");
printf(" 비정방행렬입니다. "); // 정방행렬이 아니면 출력.
printf("\n-----------------------------\n\n");
}
}
//입력받은 행렬 값 출력하기
printf("<------------- Input matrix -------------->");
printf("\n\n");
for(i = 0; i < row_num ; i++)
{
for(j = 0; j < col_num; j++)
{
printf("%.2lf",matrix[i][j]);
printf("\t\t");
}
printf("\n");
}
printf("\n\n");
//단위행렬 생성하기
for(i = 0; i < row_num ; i++)
{
for(j = 0 ; j < col_num - 1; j++)
{
if( i == j )
inverse_mat[i][j] = 1;
else
inverse_mat[i][j] = 0;
}
}
//Gauss Jordan 실행하기
for(k = 0; k < row_num ; k++)
{
temp = matrix[k][k];
for(j = 0; j < col_num ; j++)
{
matrix[k][j] /= temp;
inverse_mat[k][j] /= temp;
}
for(i = k+1; i < row_num ;i++)
{
temp2 = matrix[i][k];
for(j = 0; j < col_num; j++)
{
matrix[i][j] = (matrix[i][j] - (temp2 * matrix[k][j]));
inverse_mat[i][j] = (inverse_mat[i][j] - (temp2 * inverse_mat[k][j]));
}
}
}
temp3 = col_num -2;
for(i = row_num -1 ; i >=0 ; i--)
{
for(j = i-1 ; j >=0 ; j--)
{
temp2 = matrix[j][i];
for(k = 0 ; k <= row_num ; k++)
{
matrix[j][k] -= temp2*matrix[i][k];
inverse_mat[j][k] -= temp2*inverse_mat[i][k];
}
}
temp3--;
}
//Gauss Jordan 실행 후 행렬 출력하기
printf("<-------- 가우스 조단 소거법 -------->");
printf("\n\n");
for(i = 0; i < row_num ; i++)
{
for(j = 0 ; j < col_num; j++)
{
printf("%.2lf",matrix[i][j]);
printf("\t\t");
}
printf("\n");
}
printf("\n\n");
//역행렬 출력하기
printf("<------------- 역행렬 -------------->");
printf("\n\n");
for(i = 0; i < row_num; i++)
{
for(j = 0 ; j < col_num -1 ; j++)
{
printf("%.2lf",inverse_mat[i][j]);
printf("\t\t");
}
printf("\n\n");
}
return 0;
}
6.테스트 결과
경우 1. 미지수가 3개이고 해가 1개인 연립 방정식
*가우스 조단 소거법이 실행되어 χ1 = 1, χ2 = 1, χ3 = 1 이라는 해가 출력됨.
경우 2. 해가 존재하지 않는 연립 방정식
*이 방정식은 마지막 열의 모든 계수가 0 이 되어 해가 없다. 따라서 해를 구하지 못하고 그림과 같이 출력된다.
경우 3. 행렬 안에 0이 있는 연립 방정식
*위의 코드에는 요소에 0 이 있는지 탐색하는 부분이 있으므로 그 부분에 의해 요소가 0이 아닌 방정식으로 바뀌고 위와 같이 χ1 = -1, χ2 = -1, χ3 = -4인 해가 나온다.
경우 4. 해가 무수히 많은 경우
*이 행렬은 1열과 3열이 같아서 결국 3열의 계수가 모두 0이 되는 해가 무수히 많은 방정식이다. 따라서 gauss jordan 소거법으로 해를 구하지 못하고 아래와 같이 출력된다.
{
temp = matrix[j][k];
matrix[j][k] = matrix[i][k];
matrix[i][k] = temp;
}
break;
}
}
}
// 대각성분의 원소중 0이 있으면 실행 중단.
if(matrix[j][j]==0)
{
printf("\n-----------------------------\n");
printf(" 비정방행렬입니다. "); // 정방행렬이 아니면 출력.
printf("\n-----------------------------\n\n");
}
}
//입력받은 행렬 값 출력하기
printf("<------------- Input matrix -------------->");
printf("\n\n");
for(i = 0; i < row_num ; i++)
{
for(j = 0; j < col_num; j++)
{
printf("%.2lf",matrix[i][j]);
printf("\t\t");
}
printf("\n");
}
printf("\n\n");
//단위행렬 생성하기
for(i = 0; i < row_num ; i++)
{
for(j = 0 ; j < col_num - 1; j++)
{
if( i == j )
inverse_mat[i][j] = 1;
else
inverse_mat[i][j] = 0;
}
}
//Gauss Jordan 실행하기
for(k = 0; k < row_num ; k++)
{
temp = matrix[k][k];
for(j = 0; j < col_num ; j++)
{
matrix[k][j] /= temp;
inverse_mat[k][j] /= temp;
}
for(i = k+1; i < row_num ;i++)
{
temp2 = matrix[i][k];
for(j = 0; j < col_num; j++)
{
matrix[i][j] = (matrix[i][j] - (temp2 * matrix[k][j]));
inverse_mat[i][j] = (inverse_mat[i][j] - (temp2 * inverse_mat[k][j]));
}
}
}
temp3 = col_num -2;
for(i = row_num -1 ; i >=0 ; i--)
{
for(j = i-1 ; j >=0 ; j--)
{
temp2 = matrix[j][i];
for(k = 0 ; k <= row_num ; k++)
{
matrix[j][k] -= temp2*matrix[i][k];
inverse_mat[j][k] -= temp2*inverse_mat[i][k];
}
}
temp3--;
}
//Gauss Jordan 실행 후 행렬 출력하기
printf("<-------- 가우스 조단 소거법 -------->");
printf("\n\n");
for(i = 0; i < row_num ; i++)
{
for(j = 0 ; j < col_num; j++)
{
printf("%.2lf",matrix[i][j]);
printf("\t\t");
}
printf("\n");
}
printf("\n\n");
//역행렬 출력하기
printf("<------------- 역행렬 -------------->");
printf("\n\n");
for(i = 0; i < row_num; i++)
{
for(j = 0 ; j < col_num -1 ; j++)
{
printf("%.2lf",inverse_mat[i][j]);
printf("\t\t");
}
printf("\n\n");
}
return 0;
}
6.테스트 결과
경우 1. 미지수가 3개이고 해가 1개인 연립 방정식
*가우스 조단 소거법이 실행되어 χ1 = 1, χ2 = 1, χ3 = 1 이라는 해가 출력됨.
경우 2. 해가 존재하지 않는 연립 방정식
*이 방정식은 마지막 열의 모든 계수가 0 이 되어 해가 없다. 따라서 해를 구하지 못하고 그림과 같이 출력된다.
경우 3. 행렬 안에 0이 있는 연립 방정식
*위의 코드에는 요소에 0 이 있는지 탐색하는 부분이 있으므로 그 부분에 의해 요소가 0이 아닌 방정식으로 바뀌고 위와 같이 χ1 = -1, χ2 = -1, χ3 = -4인 해가 나온다.
경우 4. 해가 무수히 많은 경우
*이 행렬은 1열과 3열이 같아서 결국 3열의 계수가 모두 0이 되는 해가 무수히 많은 방정식이다. 따라서 gauss jordan 소거법으로 해를 구하지 못하고 아래와 같이 출력된다.
추천자료
수학자(가우스, 피타고라스, 아르키메데스)
이산수학 8장 연습문제 및 프로그래밍
[수학 방정식][수학][방정식][가우스][도형][선형연립방정식][수학방정식의 수치해법]수학 방...
[이산수학]고등학교 이산수학의 성격, 고등학교 이산수학의 목표, 고등학교 이산수학의 인식,...
[고등학교][이산수학]고등학교 이산수학의 특성, 고등학교 이산수학의 지도영역, 고등학교 이...
고등학교 이산수학의 특징과 배경, 고등학교 이산수학의 내용체계와 영역별내용, 고등학교 이...
수학과(수학교육)의 목표, 수학과(수학교육)의 교재, 수학과(수학교육)의 내용, 수학과(수학...
[수학자][피타고라스][가우스][라이프니츠][힐베르트][실베스터]수학자 피타고라스, 수학자 ...
이산수학_역행렬