희박하고 조건이 잘못된 시스템 해결


9

A가 복잡하고 희박하며 비대칭이며 조건이 좋지 않은 (조건 번호 ~ 1E + 20) 정사각형 또는 직사각형 행렬 인 Ax = b를 풀려고합니다. LAPACK의 ZGELSS로 시스템을 정확하게 해결할 수있었습니다. 그러나 시스템의 자유도가 커짐에 따라 희소성이 악용되지 않기 때문에 ZGELSS가 설치된 PC에서 시스템을 해결하는 데 시간이 오래 걸립니다. 최근에 동일한 시스템에 대해 SuperLU (Harwell-Boeing 스토리지 사용)를 사용해 보았지만 조건 번호> 1E + 12에 대해서는 결과가 정확하지 않습니다 (피벗과 관련된 수치적인 문제인지 확실하지 않습니다).

이미 개발 된 솔버를 사용하는 경향이 있습니다. 내가 언급 한 시스템을 신속하게 (즉, 희소성 활용) 안정적으로 (조건 번호를 고려하여) 해결할 수있는 강력한 솔버가 있습니까?


1
당신은 그것을 전제 할 수 있습니까? 그렇다면 Krylov 하위 공간 방법이 효과적 일 수 있습니다. 직접적인 방법을 고집하더라도 사전 조건은 수치 오류를 제어하는 ​​데 도움이됩니다.
Geoff Oxberry

1
또한 여기에 설명 된 방식과 거의 비슷한 전제 조건에 대한 좋은 경험을 쌓았습니다. en.wikipedia.org/wiki/… 정확한 산술로 사전 조건을 수행 할 수 있습니다. 그러나 내 행렬은 모두 밀도가 높으므로 여기에서 더 구체적인 방법 / 루틴을 가리킬 수는 없습니다.
AlexE

11
조건 수가 너무 큰 이유는 무엇입니까? 아마도 시스템을 더 잘 조절하기 위해 제형을 개선 할 수 있습니까? 일반적으로 잔차를보다 정확하게 평가할 수있을 것으로 기대할 수 없습니다(기계 정밀도)(조건 번호)비트가 부족하면 Krylov의 가치가 거의 없습니다. 조건 번호가 실제로1020, 쿼드 정밀도를 사용해야합니다 ( __float128GCC에서는 PETSc를 포함한 일부 패키지에서 지원).
Jed Brown

2
이 조건 수 추정치는 어디서 얻습니까? Matlab에 널 공간이있는 행렬의 조건 수를 추정하도록 요청하면 무한대를 제공하거나 때로는 실제 숫자와 같이 매우 큰 수를 제공 할 수 있습니다. 보고있는 시스템에 빈 공간이 있고 그 공간이 무엇인지 알고있는 경우이를 투영 할 수 있으며 남은 것이 더 나은 조건 번호를 가질 수 있습니다. 그런 다음 PETSc 또는 Trilinos를 사용할 수 있습니다.
Daniel Shapero

3
Daniel- ZGELSS에서 사용하는 잘린 SVD 방법은 널 공간 (SVD에서 작은 특이 값과 연관된 특이 벡터가 N (A)의 기초 임)을 결정하고 최소 제곱 솔루션을 찾습니다. 엑스위에 . 이자형아르 자형(())
Brian Borchers

답변:


13

ZGELSS를 사용하여이 문제를 해결하면 잘리지 않는 특이 값 분해를 사용하여 조건이 매우 좋지 않은 문제를 정규화합니다. 이 라이브러리 루틴이 대한 최소 제곱 솔루션을 찾으려고 시도하는 것이 아니라최소화하기 위해. 엑스=엑스엑스

ZGELSS에 전달 된 매개 변수 RCOND를 사용하여 솔루션 계산에 포함 및 제외 할 특이 값을 지정할 수 있습니다. RCOND * S (1)보다 작은 특이 값 (S (1)이 가장 큰 특이 값)은 무시됩니다. ZGELSS에서 RCOND 매개 변수를 설정 한 방법을 알려주지 않았으며 행렬 또는 오른쪽 계수의 노이즈 레벨에 대해서는 아무 것도 없으므로 사용 여부를 말하기가 어렵습니다. 적절한 양의 정규화.

이 나타나는 있도록, 당신은 ZGELSS로 얻고 있다는 본격화 솔루션에 만족하실 것 같습니다 않는 최소 발견립니다 SVD 방법 (에 의해 영향을 정규화 최소화하는 최소 제곱 솔루션 사이의 솔루션 RCOND * S (1)보다 큰 특이 값과 관련된 특이 벡터로 확장 된 솔루션 공간의 는 만족합니다. 엑스엑스

귀하의 질문은 "이 크고 희박하고 조건이 잘못된 선형 최소 제곱 문제에 대한 정규화 된 최소 제곱 솔루션을 어떻게 효율적으로 얻을 수 있습니까?"로 재구성 될 수 있습니다.

반복적으로 권장되는 방법 (예 : CGLS 또는 LSQR)을 사용하여 명시 적으로 정규화 된 최소 제곱 문제를 최소화하는 것이 좋습니다

엑스2+α2엑스2

여기서 정규화 매개 변수 는 감쇠 최소 제곱 문제가 잘 조정되고 결과적인 정규 솔루션에 만족하도록 조정됩니다. α


처음에 이것을 언급하지 않은 것에 대해 사과드립니다. 해결되는 문제는 FEM을 사용한 음향의 Helmholtz 방정식입니다. 솔루션을 근사화하는 데 사용되는 평면파 기준으로 인해 시스템의 상태가 좋지 않습니다.
user1234

와 의 계수는 어디에서 오는가? 그들은 데이터를 측정합니까? 일부 객체 설계에서 "정확한"값 (실제로는 15 자리의 공차로 가공 할 수 없음)?
Brian Borchers

1
행렬 A와 b는 Helmholtz PDE의 약한 공식을 사용하여 형성됩니다. asadl.org/jasa/resource/1/jasman/v119/i3/…
user1234

9

Jed Brown은 이미 질문에 대한 의견에서 이것을 지적했지만 조건 번호가 크면 평소 배정 밀도로 할 수있는 일은 거의 없습니다. 대부분의 경우 단일 자릿수의 정확도를 얻지 못할 것입니다 솔루션 벡터에 해당하는 잔차를 정확하게 평가할 수 없으므로 더 이상 알 수 없습니다. 다른 말로, 어떤 선형 솔버를 선택해야하는지에 대한 질문은 아닙니다. 선형 솔버는 그러한 매트릭스에 유용한 어떤 것도 할 수 없습니다.

이러한 상황은 일반적으로 부적절한 기준을 선택하기 때문에 발생합니다. 예를 들어, 함수를 선택하면 조건이 잘못된 행렬이 나타납니다.1,엑스,엑스2,엑스,...Galerkin 방법의 기초로. (이로 인해 Hilbert 매트릭스가 나쁘게 조절됩니다.) 이러한 경우 해결책은 어떤 솔버가 선형 시스템을 해결할 수 있는지를 묻는 것이 아니라 사용할 수있는 더 나은 염기가 있는지를 묻는 것입니다. 나는 당신이 똑같이 할 것을 권장합니다 : 당신이 이런 종류의 행렬로 끝나지 않도록 문제를 재구성하는 것에 대해 생각하십시오.


예를 들어, 역열 방정식과 같은 PDE에 대해 잘못 제기 된 문제를 구별 할 때는 분명히 조건이 잘못된 행렬 방정식으로 끝납니다. 방정식을 재구성하거나 효율적인 행렬 솔버를 선택하거나 부동 소수점 수의 정밀도를 개선하여 해결할 수있는 경우는 아닙니다. 이 경우 (즉, 음향 역 문제) 정규화 방법이 필요합니다.
tqviet

7

조건이 잘못된 문제를 해결하는 가장 간단하고 빠른 방법은 계산 정밀도를 높이는 것입니다. 항상 가능하지는 않지만 또 다른 방법은 문제를 재구성하는 것입니다.

4 중 정밀도 (십진수 34 자리)를 사용해야 할 수도 있습니다. 코스에서 20 자리 숫자가 없어지더라도 (조건 번호 때문에) 14 자리 숫자를 얻을 수 있습니다.

관심이 있다면 MATLAB에서도 4 중 정밀 희소 솔버 를 사용할 수 있습니다.

(나는 언급 된 도구 상자의 저자입니다).

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