c++ 를 이용한 n원 연립1차 방정식의 풀이 - by Gauss elimination(가우스 소거법)
- 최초 등록일
- 2008.09.24
- 최종 저작일
- 2008.09
- 6페이지/ 한컴오피스
- 가격 4,900원
소개글
n원 연립방정식이므로 연립방정식의 갯수는 상관없습니다.
컴퓨터가 저장할 수 있는 메모리만 있다면 ㅎㅎ
단, 미지수가 n개면 n개의 연립방정식이 필요한건 당연하겠지요.
텍스트 문서에 숫자만 넣어서 프로그램 실행 폴더에 넣고 실행만 하면 됩니다.
그럼 몇개의 방정식인지 표시가 되고(row) 해가 구해집니다.
목차
1. Gauss Elimination의 이론
2. 프로그램 실행 결과
3. CODE
본문내용
1. Gauss Elimination의 이론
Gauss ⇒ 전진소거(forward elimination) ⇒ 후진대입(back substitution)
다음과 같이 일반적인 n개의 방정식을 풀고자 한다.
두 개의 방정식의 해를 구하는 경우에서처럼, n개의 방정식을 풀기 위한 기법은 미지수의 소거와 후진대입을 통해 해를 구하는 두 가지 단계로 구성된다.
Forward elimination
Back substitution
(1) 미지수의 전진 소거
첫 번째 단계는 연립방정식을 상부삼각(upper triangular)시스템으로 만드는 것이다. 처음에는 두 번째부터 n 번째 방정식으로부터 첫 번째 미지수 을 소거한다. 이를 위해 식(1)에 을 곱하면
이 방정식을 식(2)에서 빼면
여기서 기호는 요소들이 원래의 값에서 변화되었다는 것을 나타낸다.
나머지 방정식에 대해서도 위 절차를 반복한다. 예를 들어 식(1)에 곱한후, 그 결과를 세 번째 방정식으로부터 뺀다. 나머지 방정식에도 위와 같은 절차를 반복하여 다음과 같이 수정된 시스템을 얻는다.
식 (1)을 피벗방정식(pivot equation)이라고 하고 을 피벗계수(pivot coefficient) 또는 피벗요소(pivot element)라고 한다. 첫 번째 열에 을 곱하는 것은 으로 먼저 나누고 그 결과에 을 곱하는 것과 같다.
피벗요소가 0인 경우에는 정규화 과정에서 0으로 나누는 경우가 발생하게 되므로 문제를 일으키게 된다. 피벗요소가 0은 아니지만 0에서 매우 가까운 경우에도 문제가 발생될 수 있는데, 이는 피벗요소의 크기가 다른 요소들에 비해 매우 작다면 반올림오차가 생겨날 수 있기 때문이다. 따라서 각 행들이 정규화되기 전에 피벗요소 밑의 열에서 가장 큰 계수를 찾은 후, 가장 큰 요소가 피벗요소가 되도록 행의 위치를 교환하여야 한다. 이를 부분 피벗화(partial pivoting)이라고 한다.
이러한 과정의 반복을 통하여 상부삼각 시스템으로 변환된다. double prime()은 요소들의 값이 두 번 수정되었음을 나타낸다.
참고 자료
없음