devpia logo

개발자고충상담

c언어 가우스 소거법이 너무 어렵네요...... 뭐가 틀린지 알려주실 고수님있으신가요ㅠㅠ

대갈아프다... / 2020-04-18 오후 8:40:54 / 조회수(2029)

#include <iostream>      // for cout

#include <iomanip>       // for setw()

#include <math.h>        // for fabs()

 

using namespace std;

 

#define DIMENSION       10

#define EPSILON        1.0e-30

 

#define SUCCESS          0

#define DIVISION_BY_ZERO 1

 

void print_matrix( double mtrx[DIMENSION][DIMENSION+1], int p )

{

cout.setf(ios::fixed,ios::floatfield);    cout.precision(5);

  for( int i=0; i<DIMENSION; i++ )  {

      for( int j=0; j<DIMENSION+1; j++ ) {

         cout<<setw(10)<<mtrx[i][j];

}

cout<<endl;

}

   cout<<"The pivot row is "<<p+1<<"th row"<<endl;

cout<<"The pivot element is "<<mtrx[p][p]<<endl;

}

 

 

int forward_elimination( double aug_mtrx[DIMENSION][DIMENSION+1] )

{

for( int p=0; p<DIMENSION-1; p++ ) {

for( int i=p+1; i<DIMENSION; i++ ) {

            print_matrix( aug_mtrx, p );

double pivot_element = aug_mtrx[p][p];

            if( fabs(pivot_element) < EPSILON ) return DIVISION_BY_ZERO;

double factor = aug_mtrx[i][i-1]/pivot_element;

for( int j=i-1; j<DIMENSION+1; ) {

aug_mtrx[i][j] -=aug_mtrx[p][j]*factor;

}

}

 

}

 

    return SUCCESS;

}

 

int backward_substitution( double x[DIMENSION] ,double aug_mtrx[DIMENSION][DIMENSION+1])

{   x[DIMENSION-1] = aug_mtrx[DIMENSION][DIMENSION+1]/aug_mtrx[DIMENSION][DIMENSION];

double a=0;

for(int i=DIMENSION-1; i>0; i--)

{

for(int j=DIMENSION-1;j>i;j--)

{

a +=x[i]*aug_mtrx[i-1][j];

    }

x[i-1]=(aug_mtrx[i][DIMENSION]-a)/aug_mtrx[i][i];

}

 return SUCCESS;

}

 

 

int gauss_elimination( double x[DIMENSION], double aug_mtrx[DIMENSION][DIMENSION+1] )

{

int status;

status = forward_elimination( aug_mtrx );

if( status == DIVISION_BY_ZERO ) {

  cout<<"Arithmatic Error : Division by zero in 'forward_elimination'"<<endl;

  return status;

    }

status = backward_substitution( x, aug_mtrx );

if( status == DIVISION_BY_ZERO ) {

   cout<<"Arithmatic Error : Division by zero in 'backward_substitution'"<<endl;

   return status;

    }

    

    return SUCCESS;

}

 

 

int main()

{

double solution[DIMENSION];

    double matrix_a[DIMENSION][DIMENSION] = { 

   {2, 1, 3, 2, 1, 3, 4, 2, 1, 1},

   {1, 3, 2, 5, 3, 2, 3, 2, 2, 3},

   {3, 2, 1, 4, 2, 1, 3, 1, 3, 1},

   {2, 2, 4, 2, 1, 3, 2, 1, 1, 2},

   {4, 3, 2, 1, 2, 1, 3, 1, 2, 3},

   {3, 2, 2, 1, 2, 3, 2, 4, 2, 3},

   {3, 1, 3, 1, 3, 2, 4, 2, 4, 3},

   {3, 2, 3, 1, 4, 2, 2, 1, 3, 2},

   {1, 2, 3, 4, 3, 2, 1, 2, 3, 4},

   {2, 3, 4, 4, 3, 2, 1, 1, 2, 3}

};

double vector_b[DIMENSION] = {20, 26, 21, 20, 22, 24, 26, 23, 25, 25};

double augmented_matrix[DIMENSION][DIMENSION+1];

for( int i=0; i<DIMENSION; i++ )  {

for( int j=0; j<DIMENSION; j++ )

augmented_matrix[i][j] = matrix_a[i][j];

augmented_matrix[i][DIMENSION] = vector_b[i];

}

 

    int status = gauss_elimination( solution, augmented_matrix );

    if( status == SUCCESS )

        cout<<"The solution are "<< solution <<endl;

 

 

return 0;

}

배너

댓글보기

칡흙 / 2020-04-18 23:27

// 참고해보세요. - 잘 되는. 예제 소스'로. 결과 확인 가능 합니다. C++ code - 214 lines - codepad http://codepad.org/geQMeEK6 가우스 소거법 - 위키백과, 우리 모두의 백과사전 http://ko.wikipedia.org/wiki/%EA%B0%80%EC%9A%B0%EC%8A%A4_%EC%86%8C%EA%B1%B0%EB%B2%95 가우스 소거법 C언어 - Google 검색 http://www.google.com/search?ei=SgibXuvQHoOsoATP9pTYAg&q=%EA%B0%80%EC%9A%B0%EC%8A%A4+%EC%86%8C%EA%B1%B0%EB%B2%95+C%EC%96%B8%EC%96%B4&oq=%EA%B0%80%EC%9A%B0%EC%8A%A4+%EC%86%8C%EA%B1%B0%EB%B2%95+C%EC%96%B8%EC%96%B4&gs_lcp=CgZwc3ktYWIQAzoECAAQRzoCCAA6BAgAEENQ0eIFWJjxBWDn8gVoAXACeACAAX-IAYIHkgEDMC44mAEAoAEBqgEHZ3dzLXdpeg&sclient=psy-ab&ved=0ahUKEwjrnYvakfLoAhUDFogKHU87BSsQ4dUDCAw&uact=5 가우스 소거법 C언어 : 네이버 통합검색 http://search.naver.com/search.naver?ie=UTF-8&sm=whl_hty&query=%EA%B0%80%EC%9A%B0%EC%8A%A4+%EC%86%8C%EA%B1%B0%EB%B2%95+C%EC%96%B8%EC%96%B4 가우스 소거법 : 네이버 통합검색 http://search.naver.com/search.naver?ie=UTF-8&sm=whl_hty&query=%EA%B0%80%EC%9A%B0%EC%8A%A4+%EC%86%8C%EA%B1%B0%EB%B2%95 가우스 소거법 http://terms.naver.com/entry.nhn?docId=3338400&cid=47324&categoryId=47324 행 연산 : 네이버 통합검색 http://search.naver.com/search.naver?ie=UTF-8&sm=whl_hty&query=%ED%96%89+%EC%97%B0%EC%82%B0 gaussian elimination - Wolfram|Alpha http://www.wolframalpha.com/input/?i=gaussian%20elimination Search - CodeProject http://www.codeproject.com/search.aspx?q=Gaussian&x=0&y=0&sbo=kw 행 연산 - Google 검색 http://www.google.com/search?q=%ED%96%89%20%EC%97%B0%EC%82%B0 행 연산 : 네이버 통합검색 http://search.naver.com/search.naver?ie=UTF-8&sm=whl_hty&query=%ED%96%89+%EC%97%B0%EC%82%B0 기본 행 연산 http://terms.naver.com/entry.nhn?docId=3404995&cid=47324&categoryId=47324 행 사다리꼴 행렬 http://terms.naver.com/entry.nhn?docId=3405414&ref=y&cid=47324&categoryId=47324 행렬 곱셈 : 네이버 통합검색 http://search.naver.com/search.naver?sm=top_hty&fbm=0&ie=utf8&query=%ED%96%89%EB%A0%AC+%EA%B3%B1%EC%85%88 행렬의 곱셈 http://terms.naver.com/entry.nhn?docId=3569496&cid=58944&categoryId=58970 c언어 가우스 소거법 검색결과, 책 검색 : 네이버 책 http://book.naver.com/search/search.nhn?sm=sta_hty.book&sug=&where=nexearch&query=c%EC%96%B8%EC%96%B4+%EA%B0%80%EC%9A%B0%EC%8A%A4+%EC%86%8C%EA%B1%B0%EB%B2%95

SkyNET / 2020-04-19 00:05

소스 한번 볼께요

대갈아프다... / 2020-04-19 01:26

감사합니다 혹시 어디가 틀린지...... 초보자 못찾겠습니다ㅜㅜ 부탁드립니다.....

대갈아프다... / 2020-04-19 01:28

실행 시키면 피벗 하면서 피벗행 표시하고 행렬이 나타내지는 줄알았는데 반복조차 안되네요.....

JUNE_MS / 2020-04-19 23:49

제목이 재밌어요 ㅜㅜ

오징어땅콩 / 2020-04-20 13:03

고충이 심하시네요. 질문게시판에 글적는 기분 부터 배우시면 쉽게 해결 됩니다.

분당에집갖고싶어 / 2020-04-20 13:37

질문은 질게로...

대갈아프다... / 2020-04-20 23:21

삭제 요청했습니다 죄송합니다.....

한몽희 / 2020-05-25 18:49

int forward_elimination( double aug_mtrx[DIMENSION][DIMENSION+1] ) 여기에서 for문의 루프에서 빠진 것이 있네요. int forward_elimination( double aug_mtrx[DIMENSION][DIMENSION+1] ) { 여기에서 for 문 for (int j = i - 1; j < DIMENSION + 1) { 여기에서 빠진 것이 있습니다. for (int j = i - 1; j < DIMENSION + 1; j++) { 이렇게 바꾸면 진행을 하네요.

한몽희 / 2020-05-25 18:55

보니 여기도 수정을 하여야 하는 것 같네요 for (int p = 0; p < DIMENSION-1 ; p++) { for (int i = p + 1; i < DIMENSION; i++) { 를 for (int p = 0; p < DIMENSION ; p++) { for (int i = p + 1; i < DIMENSION+1; i++) { 이렇게 바꿔야 하나보네요