피벗
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
피벗은 행렬 알고리즘에서 특정 성분을 선택하고 재정렬하거나 행 또는 열을 교환하는 기법을 의미한다. 피벗팅은 0이 아닌 피벗 엔트리를 선택하여 알고리즘의 성공적인 진행을 돕고, 반올림 오류를 줄이는 데 기여한다. 가우스 소거법 등에서 0인 피벗 요소를 피하기 위해, 또는 수치적 안정성을 높이기 위해 절대값이 큰 피벗 요소를 선택하기 위해 사용된다. 피벗팅에는 부분 피벗, 완전 피벗, 룩 피벗, 스케일링 피벗 등 다양한 종류가 있으며, 각 방식은 수치적 안정성 및 계산 비용 측면에서 특징을 갖는다. 피벗 위치는 기약 행 사다리꼴에서 행의 선두 1에 해당하는 위치를 의미한다.
더 읽어볼만한 페이지
- 수치선형대수학 - 가우스 소거법
가우스 소거법은 연립 일차 방정식의 해를 구하기 위해 행렬을 사다리꼴로 변환하는 알고리즘이며, 기본 행 연산을 통해 전진 소거와 후퇴 대입 단계를 거쳐 해를 계산하고, 행렬식 계산 등 다양한 분야에 응용된다. - 수치선형대수학 - LINPACK
LINPACK은 부동소수점 연산 성능을 평가하는 벤치마크 프로그램이자 FORTRAN 라이브러리로, 슈퍼컴퓨터 성능 측정 기준으로 사용되는 HPLinpack 벤치마크의 기반이 되었으며, TOP500 목록에서 고성능 컴퓨터 순위를 결정하는 데 기여한다. - 수치해석학 - 수학적 최적화
수학적 최적화는 주어진 집합에서 실수 또는 정수 변수를 갖는 함수의 최댓값이나 최솟값을 찾는 문제로, 변수 종류, 제약 조건, 목적 함수 개수에 따라 다양한 분야로 나뉘며 여러 학문 분야에서 활용된다. - 수치해석학 - 선형대수학
선형대수학은 벡터, 벡터 공간, 행렬 등의 개념으로 선형 방정식과 선형 변환을 연구하는 수학 분야로, 선형성을 활용해 행렬로 표현 및 계산하며, 연립일차방정식 해법, 고유값/고유벡터를 통한 행렬 분석, 벡터 공간의 기저와 차원 등을 다루고 물리학, 공학, 컴퓨터 과학 등 다양한 분야에 응용된다.
피벗 | |
---|---|
정의 | |
피벗 원소 | 행렬에서 알고리즘에 의해 선택되는 0이 아닌 원소 |
활용 | |
가우스 소거법 | 피벗 원소를 사용하여 행렬의 다른 원소를 0으로 만듦 |
선형 계획법 | 심플렉스 알고리즘에서 해를 개선하기 위해 사용 |
부분 피벗 | 수치적 안정성을 위해 피벗 원소를 선택하는 전략 |
가우스 소거법에서의 역할 | |
목표 | 행렬을 기약 행 사다리꼴로 변환 |
피벗 단계 | 피벗 열에서 0이 아닌 원소를 선택 피벗 행과 다른 행을 교환하여 피벗 원소가 피벗 위치에 오도록 함 피벗 행의 상수배를 다른 행에 더하여 피벗 열의 다른 원소를 0으로 만듦 |
부분 피벗의 필요성 | |
수치적 안정성 | 작은 피벗 원소는 계산 오류를 증폭시킬 수 있음 |
전략 | 각 열에서 절대값이 가장 큰 원소를 피벗으로 선택 |
선형 계획법에서의 역할 | |
심플렉스 알고리즘 | 피벗 연산을 통해 기저 변수를 교체하고 목적 함수 값을 개선 |
선택 기준 | 피벗 열: 목적 함수 값을 가장 크게 증가시키는 변수에 해당 피벗 행: 제약 조건을 만족하면서 피벗 열의 변수가 최대로 증가할 수 있는 행에 해당 |
참고 사항 | |
퀵 정렬 | 퀵 정렬 알고리즘에서의 피벗과는 다른 개념임 |
2. 피벗팅의 필요성 및 기본 원리
행렬 알고리즘에서 피벗 연산은 수치적 안정성을 확보하고, 알고리즘을 올바르게 수행하기 위해 필수적이다. 피벗팅은 크게 부분 피벗, 완전 피벗, 룩 피벗, 스케일링 피벗으로 나눌 수 있다.[3]
- 부분 피벗 (Partial Pivoting): 현재 열에서 절댓값이 가장 큰 요소를 피벗으로 선택한다. 반올림 오차를 줄이는 데 효과적이다.
- 완전 피벗 (Complete Pivoting): 행렬 전체에서 절댓값이 가장 큰 요소를 피벗으로 선택한다. 행과 열을 모두 교환하며, 수치적 안정성이 매우 높지만 계산 비용이 크다.[1]
- 룩 피벗 (Rook Pivoting): 선택된 피벗이 해당 행과 열에서 가장 큰 값이 되도록 행과 열을 교환한다. 부분 피벗보다 안정적이며, 완전 피벗보다 계산 비용이 적다.[2]
- 스케일링 피벗 (Scaled Pivoting): 행 내의 다른 요소들에 비해 상대적으로 가장 큰 요소를 피벗으로 선택한다. 이는 행렬 요소들의 크기 차이가 클 때 유용하다.
다음은 스케일링 피벗팅이 필요한 예시이다.
위 행렬에서 30은 5.291보다 크지만, 첫 번째 행의 다른 요소들에 비해 상대적으로 작다. 따라서 두 행을 교환하여 더 큰 값을 피벗으로 사용하는 것이 바람직하다.
2. 1. 피벗팅이 필요한 경우
행렬 알고리즘에서 피벗 성분은 일반적으로 0이 아니어야 하며, 종종 1이 사용되지만 1이 아닌 값도 가능하다. 이러한 성분을 찾는 것을 피벗팅이라고 한다. 피벗팅은 선택된 성분이 나눗셈 등의 연산에 의해 고정된 위치에 있게 하고(재정렬), 알고리즘이 성공적으로 진행될 수 있도록 행 또는 열을 교환(스와핑)함으로써 반올림 오류를 줄일 수도 있다.[3] 이것은 종종 에셜론행렬을 확인하는 데 사용된다.피벗은 행렬의 행 또는 열을 스와핑하거나 재정렬하는 것으로 생각할 수 있으며, 순열 행렬에 의한 행렬곱셈으로 나타낼 수 있다. 그러나 이러한 알고리즘은 행렬 성분을 거의 이동하지 않으므로 시간이 지체될 수 있다.
전반적으로 피벗팅은 알고리즘의 시간복잡도에 더 많은 연산을 추가하게 된다. 이러한 추가 작업은 알고리즘이 작동하기 위해 때로는 필요하다. 그럼에도 불구하고 이러한 추가 작업은 최종 결과에 수치 안정성을 높이기 때문에 가치가 있다.
가우스 소거법에서는 알고리즘이 작동하려면 피벗 요소가 0이 아니어야 한다. 피벗 요소가 0인 경우 행 또는 열을 교환해야 한다.
또한 가우스 소거법에서는 일반적으로 절댓값이 큰 피벗 요소를 선택하는 것이 바람직하다. 이렇게 하면 수치적 안정성이 향상된다.
2. 2. 기본 원리
행렬 알고리즘에서 피벗 엔트리(성분)는 일반적으로 적어도 0이 아니어야 하며, 종종 1이 사용되지만 1이 아닌 값도 가능하다. 이러한 성분을 찾는 것을 피벗팅(pivoting)이라고 한다. 피벗팅은 선택된 성분이 나눗셈 등의 연산에 의해 피벗이 고정된 위치에 있게 하고(재정렬), 알고리즘이 성공적으로 진행될 수 있도록 행 또는 열을 교환(스와핑)함으로써 반올림 오류를 줄일 수도 있다.[3] 이것은 종종 에셜론행렬을 확인하는 데 사용된다.피벗은 행렬의 행 또는 열을 스와핑하거나 재정렬하는 것으로 생각할 수 있으며 따라서 순열 행렬에 의한 행렬곱셈으로 나타낼 수 있다. 그러나 이러한 알고리즘은 행렬 성분을 거의 이동하지 않으므로 시간이 지체될 수 있다.
전반적으로 피벗팅은 알고리즘의 시간복잡도에 더 많은 연산을 추가하게 된다. 이러한 추가 작업은 알고리즘이 작동하기 위해 때로는 필요하다. 시간상에도 불구하고 이러한 추가 작업은 최종 결과에 수치 안정성을 높이기 때문에 가치가 있다.
가우스 소거법의 경우, 알고리즘은 피벗 요소가 0이 아니어야 한다. 피벗 요소가 0인 경우 행 또는 열을 교환해야 한다. 아래 시스템은 소거를 수행하기 위해 2행과 3행을 교환해야 한다.
피벗팅의 결과로 생성된 시스템은 다음과 같으며, 소거 알고리즘과 후방 대입을 통해 시스템의 해를 출력할 수 있다.
또한 가우스 소거법에서는 일반적으로 큰 절댓값을 가진 피벗 요소를 선택하는 것이 바람직하다. 이렇게 하면 수치적 안정성이 향상된다. 다음 시스템은 가우스 소거법과 후방 대입을 수행할 때 반올림 오차의 영향을 크게 받는다.
이 시스템은 정확한 해 ''x''1 = 10.00 및 ''x''2 = 1.000을 갖지만, 4자리 산술을 사용하여 소거 알고리즘과 후방 대입을 수행하면 ''a''11의 작은 값으로 인해 작은 반올림 오차가 전파된다. 피벗팅을 사용하지 않는 알고리즘은 ''x''1 ≈ 9873.3 및 ''x''2 ≈ 4의 근사값을 생성한다. 이 경우 ''a''21이 피벗 위치에 오도록 두 행을 교환하는 것이 바람직하다.
행렬 알고리즘에서 피벗 성분은 일반적으로 0이 아니어야 하며, 1이 사용되는 경우가 많지만 1이 아닌 값도 가능하다. 이러한 성분을 찾는 것을 피벗팅(pivoting)이라고 한다. 피벗팅은 선택된 성분을 나눗셈 등의 연산에 사용하여 피벗을 고정된 위치에 놓고(재정렬), 알고리즘이 성공적으로 진행될 수 있도록 행이나 열을 교환(스와핑)하여 반올림 오류를 줄일 수 있다.[3] 피벗팅은 에셜론행렬을 확인하는 데에도 종종 사용된다.
이 시스템을 고려하면, 4자리 산술을 사용하는 소거 알고리즘과 후방 대입은 정확한 값 ''x''1 = 10.00 및 ''x''2 = 1.000을 생성한다.
3. 피벗팅의 종류
피벗은 행렬의 행 또는 열을 스와핑하거나 재정렬하는 것으로 볼 수 있으며, 순열 행렬을 이용한 행렬곱셈으로 나타낼 수 있다. 그러나 행렬 성분을 거의 이동하지 않는 알고리즘에서는 이 과정이 시간을 지체시킬 수 있다.
전반적으로 피벗팅은 알고리즘의 시간복잡도에 더 많은 연산을 추가한다. 이러한 추가 작업은 알고리즘이 작동하기 위해 때때로 필요하며, 최종 결과의 수치 안정성을 높이기 때문에 시간상으로도 가치가 있다.
부분 피벗팅 전략의 변형으로 스케일링 피벗팅이 있다. 이 방식에서는 행 내 항목들에 비해 상대적으로 가장 큰 항목을 피벗 요소로 선택한다. 이 전략은 항목의 크기가 크게 다를 때 반올림 오류가 전파되는 것을 막는 데 유용하다. 스케일링 피벗팅은 아래와 같이 행의 항목 크기가 크게 변동하는 시스템에서 사용해야 한다.
:
위의 예시에서는 현재 피벗 요소 30이 5.291보다 크지만, 해당 행의 다른 항목에 비해 상대적으로 작기 때문에 두 행을 교환하는 것이 바람직하다. 이 경우 행을 교환하지 않으면 반올림 오류가 전파될 수 있다.
3. 1. 부분 피벗팅 (Partial Pivoting)
부분 피벗 방식은 알고리즘이 현재 피벗 요소로 고려 중인 행렬의 열에서 절댓값이 가장 큰 항목을 선택하는 방식이다. 보다 구체적으로, 행렬을 행 사다리꼴 형태로 줄일 때, 부분 피벗 방식은 피벗 요소가 동일 열의 아래쪽 요소에 비해 절댓값이 가장 크도록 열의 행 감소 전에 행을 교환한다. 부분 피벗 방식은 일반적으로 반올림 오차를 적절히 줄이기에 충분하다.[3]
그러나 특정 시스템 및 알고리즘의 경우 허용 가능한 정확도를 위해 완전 피벗 (또는 최대 피벗)이 필요할 수 있다. 완전 피벗 방식은 행렬에서 절댓값이 가장 큰 요소를 피벗으로 사용하기 위해 행과 열을 모두 교환한다. 완전 피벗 방식은 일반적으로 수치적 안정성을 보장하는 데 필요하지 않으며, 최대 요소를 검색하는 추가 비용으로 인해 제공하는 수치적 안정성의 개선은 가장 작은 행렬을 제외하고는 일반적으로 효율성이 감소하여 상쇄된다. 따라서 거의 사용되지 않는다.[1]
룩 피벗이라고 알려진 또 다른 전략은 행과 열을 모두 교환하지만, 선택된 피벗이 전체 나머지 부분 행렬에서 가능한 가장 큰 항목이 아닌, 해당 행에서 가장 큰 항목이자 해당 열에서 가장 큰 항목임을 보장한다.[2] 직렬 컴퓨터에서 구현할 때 이 전략은 부분 피벗 방식보다 약 3배의 예상 비용이 들며, 따라서 완전 피벗 방식보다 저렴하다. 룩 피벗 방식은 이론적으로나 실제로 부분 피벗 방식보다 더 안정적인 것으로 입증되었다.
3. 2. 완전 피벗팅 (Complete Pivoting)
행렬 알고리즘에서 피벗 성분은 일반적으로 적어도 0이 아니어야 하며, 종종 1이 사용되지만 1이 아닌 값도 가능하다. 이러한 성분을 찾는 것을 피벗팅(pivoting)이라고 한다. 피벗팅은 선택된 성분이 나눗셈 등의 연산에 의해 피벗이 고정된 위치에 있게 하고(재정렬), 알고리즘이 성공적으로 진행될 수 있도록 행 또는 열을 교환(스와핑)함으로써 반올림 오류를 줄일 수도 있다.[3] 이것은 종종 에셜론행렬을 확인하는 데 사용된다.
피벗은 행렬의 행 또는 열을 스와핑하거나 재정렬하는 것으로 생각할 수 있으며, 따라서 순열 행렬에 의한 행렬곱셈으로 나타낼 수 있다. 그러나 이러한 알고리즘은 행렬 성분을 거의 이동하지 않으므로 시간이 지체될 수 있다.
전반적으로 피벗팅은 알고리즘의 시간복잡도에 더 많은 연산을 추가하게 된다. 이러한 추가 작업은 알고리즘이 작동하기 위해 때로는 필요하다. 시간상에도 불구하고 이러한 추가 작업은 최종 결과에 수치 안정성을 높이기 때문에 가치가 있다.
'''완전 피벗'''(또는 최대 피벗)은 허용 가능한 정확도를 위해 필요할 수 있다. 완전 피벗 방식은 행렬에서 절댓값이 가장 큰 요소를 피벗으로 사용하기 위해 행과 열을 모두 교환한다. 완전 피벗 방식은 일반적으로 수치적 안정성을 보장하는 데 필요하지 않으며, 최대 요소를 검색하는 추가 비용으로 인해 제공하는 수치적 안정성의 개선은 가장 작은 행렬을 제외하고는 일반적으로 효율성이 감소하여 상쇄된다. 따라서 거의 사용되지 않는다.[1]
3. 3. 룩 피벗팅 (Rook Pivoting)
부분 피벗 방식은 알고리즘이 현재 피벗 요소로 고려 중인 행렬의 열에서 절댓값이 가장 큰 항목을 선택하는 방식이다. 보다 구체적으로, 행렬을 행 사다리꼴 형태로 줄일 때, 부분 피벗 방식은 피벗 요소가 동일 열의 아래쪽 요소에 비해 절댓값이 가장 크도록 열의 행 감소 전에 행을 교환한다. 부분 피벗 방식은 일반적으로 반올림 오차를 적절히 줄이기에 충분하다.
그러나 특정 시스템 및 알고리즘의 경우 허용 가능한 정확도를 위해 완전 피벗 (또는 최대 피벗)이 필요할 수 있다. 완전 피벗 방식은 행렬에서 절댓값이 가장 큰 요소를 피벗으로 사용하기 위해 행과 열을 모두 교환한다. 완전 피벗 방식은 일반적으로 수치적 안정성을 보장하는 데 필요하지 않으며, 최대 요소를 검색하는 추가 비용으로 인해 제공하는 수치적 안정성의 개선은 가장 작은 행렬을 제외하고는 일반적으로 효율성이 감소하여 상쇄된다. 따라서 거의 사용되지 않는다.[1]
룩 피벗은 행과 열을 모두 교환하지만 선택된 피벗이 전체 나머지 부분 행렬에서 가능한 가장 큰 항목이 아닌, 해당 행에서 가장 큰 항목이자 해당 열에서 가장 큰 항목임을 보장하는 전략이다.[2] 직렬 컴퓨터에서 구현할 때 이 전략은 부분 피벗 방식보다 약 3배의 예상 비용이 들며, 따라서 완전 피벗 방식보다 저렴하다. 룩 피벗 방식은 이론적으로나 실제로 부분 피벗 방식보다 더 안정적인 것으로 입증되었다.
3. 4. 스케일링 피벗팅 (Scaled Pivoting)
행렬 알고리즘에서 피벗 성분은 일반적으로 0이 아니어야 하며, 종종 1이 사용되지만 1이 아닌 값도 가능하다. 이러한 성분을 찾는 것을 피벗팅(pivoting)이라고 한다. 피벗팅은 선택된 성분이 나눗셈 등의 연산에 의해 피벗이 고정된 위치에 있게 하고(재정렬), 알고리즘이 성공적으로 진행될 수 있도록 행 또는 열을 교환(스와핑)함으로써 반올림 오류를 줄일 수도 있다.[3] 이것은 종종 에셜론행렬을 확인하는 데 사용된다.
전반적으로 피벗팅은 알고리즘의 시간복잡도에 더 많은 연산을 추가하게 된다. 이러한 추가 작업은 알고리즘이 작동하기 위해 때로는 필요하다. 이러한 추가 작업은 최종 결과에 수치 안정성을 높이기 때문에 시간상으로도 가치가 있다.
부분 피벗팅 전략의 변형으로 스케일링 피벗팅이 있다. 이 방식에서는 알고리즘이 행 내 항목에 비해 상대적으로 가장 큰 항목을 피벗 요소로 선택한다. 이 전략은 항목의 크기가 크게 다를 때 반올림 오류가 전파되는 것을 막는 데 유용하다. 스케일링 피벗팅은 행의 항목 크기가 크게 변동하는 아래와 같은 시스템에서 사용해야 한다.
:
위의 예시에서는 현재 피벗 요소 30이 5.291보다 크지만, 해당 행의 다른 항목에 비해 상대적으로 작기 때문에 두 행을 교환하는 것이 바람직하다. 이 경우 행을 교환하지 않으면 이전 예시와 마찬가지로 반올림 오류가 전파될 것이다.
4. 피벗 위치 (Pivot Position)
행렬 A에서 피벗 위치는 A의 기약행 사다리꼴에서 행의 선두 1에 해당하는 행렬 내 위치이다. A의 기약행 사다리꼴은 유일하므로, 피벗 위치는 고유하게 결정되며, 행 감소 과정에서 행 교환을 수행했는지 여부와 관계없이 결정된다. 또한, 행 사다리꼴에서 행의 피벗은 위의 행의 피벗 오른쪽에 나타나야 한다.[1]
5. 예제
가우스 소거법에서 피벗 요소는 0이 아니어야 한다. 만약 피벗 요소가 0이면 행이나 열을 교환해야 한다. 아래 예시는 소거를 위해 2행과 3행을 교환해야 하는 경우이다.
:
피벗팅을 통해 다음과 같은 시스템을 얻을 수 있다. 이를 통해 소거 알고리즘과 후방 대입을 사용하여 해를 구할 수 있다.
:
가우스 소거법에서는 일반적으로 절댓값이 큰 피벗 요소를 선택하는 것이 좋다. 이는 수치적 안정성을 높여준다. 다음 시스템은 반올림 오차에 큰 영향을 받는다.
:
이 시스템의 정확한 해는 ''x''1 = 10.00, ''x''2 = 1.000이다. 하지만 4자리 산술을 사용하여 소거 알고리즘과 후방 대입을 수행하면 작은 반올림 오차가 전파된다. 피벗팅을 사용하지 않으면 ''x''1 ≈ 9873.3, ''x''2 ≈ 4와 같은 근사값을 얻게 된다. 따라서 두 행을 교환하여 ''a''21이 피벗 위치에 오도록 하는 것이 좋다.
:
이 시스템에 4자리 산술을 적용하면 정확한 해 ''x''1 = 10.00, ''x''2 = 1.000을 얻을 수 있다.
6. 시간 복잡도
행렬 알고리즘에서 피벗 엔트리(성분)는 일반적으로 적어도 0이 아니어야 하며, 종종 1이 사용되지만 1이 아닌 값도 가능하다. 이 경우 이러한 성분을 찾는 것을 피벗팅(pivoting)이라고 한다. 피벗팅은 선택된 성분이 나눗셈 등의 연산에 의해 피벗이 고정된 위치에 있게 하고(재정렬), 알고리즘이 성공적으로 진행될 수 있도록 행 또는 열을 교환(스와핑)함으로써 반올림 오류를 줄일 수도 있다.[3] 이것은 종종 에셜론행렬을 확인하는 데 사용된다.
피벗은 행렬의 행 또는 열을 스와핑하거나 재정렬하는 것으로 생각할 수 있으며, 따라서 순열 행렬에 의한 행렬곱셈으로 나타낼 수 있다. 그러나 이러한 알고리즘은 행렬 성분을 거의 이동하지 않으므로 시간이 지체될 수 있다.
전반적으로 피벗팅은 알고리즘의 시간복잡도에 더 많은 연산을 추가하게 된다. 이러한 추가 작업은 알고리즘이 작동하기 위해 때로는 필요하다. 시간상에도 불구하고 이러한 추가 작업은 최종 결과에 수치 안정성을 높이기 때문에 가치가 있다.
참조
[1]
논문
The Complete Pivoting Conjecture for Gaussian Elimination is False.
http://www-math.mit.[...]
1992
[2]
간행물
The Rook's Pivoting Strategy
2000-11
[3]
서적
An Introduction to Numerical Methods A MATLAB Approach
학산미디어
2013
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com