선형 방정식을 푸는 방법을 선택하는 방법


31

내가 아는 한, 선형 방정식 시스템을 해결하는 4 가지 방법이 있습니다 (더 많은 것이 있으면 수정하십시오).

  1. 시스템 행렬이 전체 정사각형 행렬이면 Cramer 's Rule을 사용할 수 있습니다.
  2. 시스템 매트릭스의 역 또는 의사 역을 계산합니다.
  3. 매트릭스 분해 방법을 사용하십시오 (Gaussian 또는 Gauss-Jordan 제거는 LU 분해로 간주 됨).
  4. 켤레 구배 방법과 같은 반복 방법을 사용하십시오.

실제로 Cramer의 규칙을 사용하거나 특히 고차원 행렬에 대해 역 또는 의사 역을 계산하여 방정식을 풀기를 원하지 않으므로 첫 번째 질문은 각각 분해 방법과 반복 방법을 사용할 때입니다. 시스템 매트릭스의 크기와 속성에 달려 있다고 생각합니다.

두 번째 질문은 수치 안정성과 효율성 측면에서 특정 시스템 매트릭스에 가장 적합한 분해 방법 또는 반복 방법이 무엇인지 아는 것입니다.

예를 들어, 켤레 구배 방법은 행렬이 대칭이고 양의 한정된 방정식을 풀기 위해 사용되지만 A T A x = A T b 로 변환하여 선형 방정식에도 적용 할 수 있습니다 . 또한 양의 한정 행렬의 경우 Cholesky 분해 방법을 사용하여 해를 구할 수 있습니다. 그러나 CG 방법을 선택할시기와 Cholesky 분해를 선택할시기를 모르겠습니다. 제 생각에는 큰 행렬에 CG 방법을 사용하는 것이 좋습니다.Ax=bATAx=ATb

직사각형 행렬의 경우 QR 분해 또는 SVD를 사용할 수 있지만 다시 하나를 선택하는 방법을 모르겠습니다.

다른 행렬의 경우 이제 허미 시안 / 대칭 행렬, 희소 행렬, 밴드 행렬 등과 같은 적절한 솔버를 선택하는 방법을 설명하지 않습니다.


1
@chaohuang 님 안녕하세요. SciComp에 오신 것을 환영합니다! 이 토론을보고 싶을 것입니다 : scicomp.stackexchange.com/questions/81/…
Paul

안녕 @Paul, 귀하의 의견에 감사드립니다, 그 스레드는 희소 행렬이나 행렬에 대해서만입니까?
chaohuang

6
귀하의 질문은 광범위한 범위를 가지고 있으며 우리가 스택 교환에 대해 가지고있는 Q & A 형식에 비해 너무 광범위 할 수 있습니다 ... 관심있는 특정 매트릭스 시스템 클래스가 있습니까?
Paul

3
@chaohuang이 주제에 관한 많은 책이 있습니다. 이 질문은 의사에게 "일반적인"치료법을 선택하는 방법과 비슷합니다. 특정 부류의 문제에 국한되지 않은 질문을하고 싶은 경우, 정확한 것을 요구할 수 있도록 현장에 충분히 익숙해 지도록 작업에 참여해야합니다. 그렇지 않으면 관련된 특정 문제를 설명하십시오.
제드 브라운

2
자주 묻는 질문 ( FAQ) : 질문에 대한 답변이 담긴 책 전체를 상상할 수 있다면 너무 많은 질문을합니다. 이 질문과 관련된 전체 저널과 수백 권의 책이 있습니다.
David Ketcheson

답변:


45

귀하의 질문은 드라이브 (슬롯, 필립스, Torx 등)에 따라 선택할 드라이버를 묻는 것과 약간 같습니다. 너무 많은 것 외에도 선택은 하나의 나사를 조일 것인지 또는 조립할 것인지에 따라 다릅니다. 도서관 선반 전체 세트. 그럼에도 불구하고 귀하의 질문에 부분적으로 답변하면 선형 시스템 를 풀기위한 방법을 선택할 때 명심해야 할 몇 가지 문제가 있습니다 . 또한 나는 자신을 뒤집을 수없는 행렬로 제한 할 것이다. 과도하거나 불명확 한 시스템의 경우는 다른 문제이며 실제로는 별도의 질문이어야합니다.Ax=b

올바르게 언급했듯이 옵션 1과 2는 옳습니다. 역행렬 계산 및 적용은 다른 알고리즘 중 하나를 적용하는 것보다 훨씬 비싸고 종종 수치 적으로 안정적이지 않기 때문에 매우 나쁜 생각입니다. 직접 방법과 반복 방법 중에서 선택할 수 있습니다. 가장 먼저 고려해야 할 것은 행렬 가 아니라 수치 해로 부터 ~ x :Ax~

  1. x~x~x~x<103x
  2. 얼마나 빨리 필요합니까? 여기에만 관련 메트릭에 시계 시간입니다 귀하의 기계 - 당신이 그 중 하나가없는 경우 최선의 선택을하지 않을 수 거대한 클러스터에서 완벽하게 확장하는 방법,하지만 당신은 그 빛나는 새로운 테슬라 카드 중 하나를 수행합니다.

무료 점심 식사와 같은 것은 없기 때문에 일반적으로 둘 사이의 균형을 결정해야합니다. 그런 다음 매트릭스 (및 하드웨어)를 살펴보고 적절한 방법 (또는 구현 방법을 찾을 수있는 방법)을 결정합니다. (여기에 "최고"를 쓰지 않는 방법에 주목하십시오 ...) 가장 관련성이 높은 속성은 다음과 같습니다.A

  • 구조 : IS 대칭? 밀도가 높거나 희박합니까? 줄무늬?A
  • 고유은 : 그들은 (즉, 모든 긍정적 인 긍정적 확실한)? 그들은 클러스터되어 있습니까? 그들 중 일부는 매우 작거나 큰 규모를 가지고 있습니까?A

이를 염두에두고 (거대한) 문헌을 트롤링하고 특정 문제에 대해 찾은 다양한 방법을 평가해야합니다. 일반적인 설명은 다음과 같습니다.

  • 솔루션에 기계 정밀도가 정말로 필요하거나 매트릭스가 작은 경우 (예 : 최대 행), 특히 밀도가 높은 시스템 (이 경우 모든 매트릭스 곱셈)에 대한 직접적인 방법을 이길 수 없습니다. 될 것입니다 당신은 반복을 많이해야하는 경우, 그리고이 힘은 멀리에서하지 직접적인 방법 필요). 또한 LU 분해 (피벗 포함)는 대부분의 반복 방법과 달리 모든 반전 가능한 매트릭스에서 작동합니다. (물론, 가 대칭이고 양수이면, Cholesky를 사용합니다.)1000O(n2)O(n3)A

    메모리 문제가 발생하지 않으면 (대형) 희소 행렬의 경우 에도 마찬가지입니다 . 일반적으로 희소 행렬에는 희소 LU 분해가 없으며, 요인이 (고속) 메모리에 맞지 않으면 이러한 방법을 사용할 수 없게됩니다.

    또한 직접 방법은 오랫동안 사용되어 왔으며 의 대역 구조를 자동으로 활용할 수있는 매우 우수한 소프트웨어 (예 : UMFPACK, MUMPS, 희소 행렬의 SuperLU)가 있습니다 .A

  • 정확도가 낮거나 직접 방법을 사용할 수없는 경우 고정 방법 (예 : Jacobi 또는 Gauss-Seidel) 대신 Krylov 방법 (예 : 가 대칭 양수의 경우 CG , 그렇지 않은 경우 GMRES 또는 BiCGStab)을 선택하십시오. 수렴은 의 스펙트럼 반경이 아니라 조건 수의 (제곱근)에 의해 결정되며 행렬의 구조에 의존하지 않기 때문에 훨씬 잘 작동 합니다. 그러나 Krylov 방법으로 실제로 우수한 성능을 얻으려면 매트릭스에 적합한 전제 조건을 선택해야합니다. 이는 과학보다는 기술입니다.AA

  • 동일한 행렬과 다른 오른쪽을 가진 선형 시스템을 반복적으로 해결해야하는 경우, 분해 방법을 한 번만 계산하면되기 때문에 직접 방법이 반복 방법보다 여전히 빠를 수 있습니다. (이는 순차적 인 해결책을 가정합니다. 동시에 모든 오른쪽이 있으면 블록 Krylov 방법을 사용할 수 있습니다.)

물론, 이것들은 매우 대략적인 지침입니다. 위의 진술에 대해, 대화가 참인 행렬이있을 가능성이 있습니다 ...

의견에 대한 참조를 요청 했으므로 여기에 몇 가지 교과서와 검토 논문이 있습니다. (이 둘 중 어느 것도 포괄적이지 않습니다.이 질문은 너무 광범위하며 특정 문제에 너무 많이 의존합니다.)


2
나는 당신의 드라이버 비유를 좋아합니다!
Paul

@chaohuang 질문에 대한 답변이 있다면, 수락해야합니다. (만약 그렇지 않다면, 무엇이 빠졌는지 알려주십시오.)
Christian Clason

@ChristianClason이 수락했습니다. 나는 기다리고 있었고 누군가가 직사각형 행렬 문제에 대해 밝힐 수 있기를 바랐습니다. 오랜 시간이 지났으므로 그런 대답은 없을 것 같습니다 :(
chaohuang

@chaohuang 감사합니다. 여전히 직사각형 행렬에 관심이 있다면 "과도하게 결정된 시스템을 해결하기위한 방법을 선택하는 방법"에 대한 (링크 된) 질문을 제기해야합니다.
Christian Clason

여기 에 선형 방정식의 큰 희소 시스템을 푸는 반복 방법의 사용에 대한 참조가 있습니다.
chaohuang


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.