행렬의 곱 오류
단순랩퍼
질문 제목 : 행렬검산오류가우스 조르단으로 역행렬을 만들어내는 프로그램입니다. 그런데 검산하는부분을 작성중에 이상하게 에러가 나네요. 값도 전혀 엉뚱한게 출력되구요. 이유를 모르겠어서 올립니다.질문 내용 : #include stdio.h
#include stdlib.h
#include math.h
#define true 1
#define max 50 //계산할 행열에 최대 크기 설정
void gauss(double a[][max], int n, file *fp); //가우스 소거법 하는 함수
void insert(double a_init[][max], int n, file *fp); //행열을 입력받는 함수
main()
{
char file_name[20];
int i, j, n,k;
double a_init[max-1][max];
double a[max-1][max]; //가우스 소거할 행열
double b[max-1][max];
: 돋움double c[max-1][max];
double d[max-1][max];
double e[max-1][max];
double f[max-1][max];
file *fp;
printf(\n 불러들일 텍스트를 입력하세요.);
printf(\n file name = );
scanf(%s, file_name);
if((fp=fopen(file_name, r)) == null)
return;
fscanf(fp, %d, &n);//행의 크기를 입력
printf(\n 확장행렬의 차원 : n = %3d\n, n);
printf(\n 입력된 확장행렬 : \n);
insert(a_init, n, fp); //확장 행렬 입력 함수
fclose(fp);
printf(\n 저장할 텍스트를 입력하세요.);
printf(\n file name = );
scanf(%s, file_name);
if((fp=fopen(file_name, w)) == null)
return;
for(i = 1; i = n; i++) //입력 행열에서 계산하는 행열로 치환
{
for(j = 1; j = n*2; j++)//사이즈가 가변하므로 j는 1부터
{
if(j n && i == j-n)//i행렬 단위항(1) 자리 계산
a[i][j] = 1;
else if(j n && i != j-n)//i행렬 0 항 자리 계산
a[i][j] = 0;
else
a[i][j] = a_init[i-1][j-1];
//fprintf(fp, %12.5lf, a[i][j]);//입력받은 값 출력
}
}
gauss(a, n, fp); //계산할 행열 gauss함수 호출
printf(\n final : \n);
printf( ------------------------------------------------------------\n);
printf( i \t\t x(i)\n);
printf( ------------------------------------------------------------\n);
fprintf(fp, %d\n, n);
for(i = 1; i = n; i++) {//최종 출력
printf( %5d , i);
for(j = 1; j = n; j++){
fprintf(fp, %10.5lf, a[i][j+n]);//파일 출력,j+n : j+원행렬 사이즈=역행렬
printf(%10.5lf, a[i][j+n]);//화면 출력
}
fprintf(fp, \n, i);
printf(\n, i);
}
for(i=1;i=n;i++) {
printf( %5d ,i);
for(j=1;j=n;j++){
fprintf(fp, %10.5lf, a[i][j+n]);
d[i][j]=a[i][j+n];
e[i][j]=a_init[i][j];
f[i][j]=0;
for(k=0;kn;k++){
f[i][j]=d[i][k]*e[k][j];
}
printf(%10.5f, f[i][j]);
}
fprintf(fp, \n,i);
printf(\n,i);
}
printf( ------------------------------------------------------------\n);
fclose(fp);
}
void gauss(double a[][max], int n, file *fp)
{
int i, k, m, v, w;
double temp, va, ka[max/2][max];
for(i = 1; i = n; i++){//1
for(k = i+1; k = n; k++){//2
if(a[k][i] != 0 && a[i][i] == 0){//a행렬의 [i][i]요소가 0이고 동일한 열의 아래 행의 요소가 0이 아닐때
for(m = 1; m = (n*2); m++){//바꾸기2
ka[i][m] = a[k][m];//바꿀 행 임시 저장[1,2] = [2,2]
a[k][m] = a[i][m];//i행을 바꿀 행로 이동[2,2] = [1,2]
a[i][m] = ka[i][m];//i행에 임시 저장한 행 저장[1,2] = [1,2]
}
printf(pivoting \n);//바꾼 결과 출력
for(v = 1; v = n; v++)
{
for(w = 1; w = (n*2); w++)
printf(%8.4lf, a[v][w]);
printf(\n);
}
}
}}
va = a[i][i];//[i][i]요소 저장
printf(%d행 결과 \n, i-1);//초기~마지막 이전까지 출력
for(v = 1; v = n; v++)
{
for(w = 1; w = (n*2); w++)
printf(%8.4lf, a[v][w]);
printf(\n);
}
for(m = 1; m = (n*2); m++)
a[i][m] = a[i][m]/ va;//[i][i]요소의 행을 va([i][i])로 나누기
for(k = 1; k = n; k++){
if(i != k){
temp = a[k][i];//소거할 요소 임시 저장
for(m = 1; m = (n*2); m++)
a[k][m] = a[k][m] - temp*a[i][m];//다른 행들에 소거할 요소를 곱한 값을 뺌(소거)
}
}
}
printf(%d행 결과 \n, n);//최종결과 출력
for(v = 1; v = n; v++)
{
for(w = 1; w = (n*2); w++)
printf(%8.4lf, a[v][w]);
printf(\n);
}
}
void insert(double a_init[][max], int n, file *fp) //값을 입력받는 함수
{
int i, j;
for(i = 0; i n; i++) {
for(j = 0; j = n-1; j++) {
fscanf(fp, %lf, &a_init[i][j]);
printf( %8.4lf, a_init[i][j]); //입력받은 값 출력
}
printf(\n);
}
}
빨간색 부분이 검산부분입니다. 검산은 부해진 역행렬과 입력받은 원본 행렬을 곱해서 아이덴티티 메트릭스가 나오는지 보는 부분입니다. 아무리해도 안되내요. 어디가 잘못된건가요?
첨부파일은 사용한 행렬을 읽어들인텍스트 파일입니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2700510 | c언어를 어케하면 잘할수 있을까요.. | 연연두 | 2025-07-05 |
2700484 | 두 개가 차이가 뭔지 알려주세요...(소수 찾는 프로그램) (2) | 날위해 | 2025-07-05 |
2700426 | 인터넷 창 띄우는 질문이요 (1) | 정훈 | 2025-07-04 |
2700400 | 원넓이를 계산이요 ㅜㅜ | 천칭자리 | 2025-07-04 |
2700368 | if에 관해서 질문이요... | Orange | 2025-07-04 |
2700339 | 이거 결과값이 왜이런건지.. (4) | 그댸와나 | 2025-07-04 |
2700313 | 파일 읽어서 저장하는데 빈파일일 경우 문재가 발생하네요.. (2) | 크나 | 2025-07-03 |
2700287 | 구조체 동적할당 연습을 하는데 오류가 뜹니다...(해결) (3) | 아련나래 | 2025-07-03 |
2700264 | 문자와 숫자 동시에 입력??? | 글고운 | 2025-07-03 |
2700236 | txt파일로만 쓰고 읽게 하려면 어떻게 해야 하나요..?? (8) | 미국녀 | 2025-07-03 |
2700211 | 전위 연산자 (2) | 어른처럼 | 2025-07-02 |
2700183 | C에서 파일이름을 받고, 그 파일의 사이즈를 출력해줘야하는데 내용이 출력이 안되네요 ;ㅅ; | 피스케스 | 2025-07-02 |
2700150 | 꼭좀 도와주세요ㅠㅠㅠ | 호습다 | 2025-07-02 |
2700095 | 연산문제...질문... | 오빤테앵겨 | 2025-07-01 |
2700070 | while문 , 3의배수 출력하는 프로그램좀 짜주세욤. | 횃불 | 2025-07-01 |
2700041 | 초보인데요 ㅎ 배열안에 배열을 집어넣을수 있나요?? | 헛장사 | 2025-07-01 |
2700012 | 배열// (1) | 전갈자리 | 2025-07-01 |
2699895 | 무한루프에 빠집니다.!! 해결좀부탁드려요 (10) | 선아 | 2025-06-30 |
2699842 | 질문을 너무 많이 하네여.....죄송.... (2) | 해님꽃 | 2025-06-29 |
2699816 | 오류 질문입니다.. (1) | 해비치 | 2025-06-29 |