잘못 조정 된 선형 시스템을 정확하게 해결할 수있는 이유는 무엇입니까?


13

여기 에 대한 답변 에 따르면 , 큰 조건 수 (선형 시스템 해석의 경우)는 부동 소수점 솔루션에서 보장 된 올바른 자릿수를 줄입니다. 유사 스펙트럼 방법에서 고차 미분 행렬은 일반적으로 매우 열악합니다. 그렇다면 왜 그들은 여전히 ​​매우 정확한 방법입니까?

조건부로 조정 된 행렬에서 나오는 낮은 정밀도는 보장 된 값일 뿐이지 만, 조건부로 조정 된 행렬이 실제로 직접적인 방법으로 정확하게 해결되는 이유가 무엇인지 궁금합니다. 예를 들어 LCOL11 페이지의 표 3.1 의 열 Wang et al., PSEUDOSPECTRAL 통합 매트릭스를 사용하는 잘 조정 된 공동 방법 , SIAM J. Sci. 계산, 36 (3) .


2
내 직감은 Ax = b 시스템의 용해도 / 정확도가 행렬 A뿐만 아니라 강제 벡터 b에 연결되어 있다는 것입니다. 아마도 b가 조건이 잘못된 A의 모드를 "탐색"또는 "여기"하지 않으면 정확한 솔루션입니다. 가능합니다. 제한적인 예로서, A는 정확히 단수 (무한 조건 수) 일 수 있지만, Ax = b는 여전히 해를 가지고있을 수 있습니다. 강제 데이터 b가 A의 범위에 있다면 정확하게 계산 될 수 있습니다. -wavy, 나는 대답 대신에 의견을 제시하는 이유입니다.
rchilton1980

@ rchilton1980 "아직 Ax = b는 여전히 솔루션을 소유 할 수 있습니다"그러나이 솔루션은 고유하지 않습니다. 그리고 내가 언급 한 예는 독특한 해결책을 가지고 있습니다.
Zoltán Csáti

그것은 무한한 조건 번호 (정확히 0의 고유 값)를 고르는 인공물 일 수 있습니다. 그러나 제로 고유 값을 기계 엡실론으로 바꿀 수 있다고 생각합니다. (즉, 시스템은 매우 큰 조건 수를 가지고 있으며, 시스템은 고유 한 솔루션으로 특이 적이 지 않습니다.이 작은 고유 쌍을 따라 성분이 없으면 매우 정확하게 계산할 수 있습니다).
rchilton1980

1
좀 더 구체적으로 말하면, 내 생각 실험은 A = diag ([1 1 1 1 eps]), b = [b1 b2 b3 b4 b5 0]과 같은 것입니다. 그것은 생각이 나지만 나는 원래 주장을 정당화하는 것으로 충분하다고 생각한다. "때때로 조건이 나쁜 A는 특정한 b 선택에 대해 정확하게 풀 수있다"
rchilton1980

답변:


7

초기 답변 후 추가 :

참조 된 논문의 저자는 표준 상대 오차 또는 최대 요소 별 상대 오차가 아닌 최대 절대 오차를 제공하면서 테이블에 조건 번호 (명확하게 2 노름 조건 번호이지만 무한대 노름 조건 번호)를주는 것으로 보입니다. 이것들은 모두 다른 측정입니다.) 최대 요소 별 상대 오차는 무한대-노멀 상대 오차와 같지 않습니다. 또한, 표의 오차는 이산화 된 선형 방정식 시스템이 아니라 원래의 미분 방정식 경계 값 문제에 대한 정확한 솔루션과 관련이 있습니다. 따라서 본 백서에 제공된 정보는 조건 번호를 기반으로하는 오류 한계와 함께 사용하기에 실제로 적합하지 않습니다.

그러나 계산을 복제 할 때 상대 무한 표준 오류 (또는 2- 노름 상대 오류)가 무한-노름 조건 번호 (각각 2 노름 조건 번호)로 설정된 범위보다 실질적으로 작은 상황을 봅니다. 때로는 운이 좋을 수도 있습니다.

DMSUITE MATLAB 패키지를 사용하고 Chebyshev 다항식과 함께 pseudospectral 방법을 사용하여이 논문의 예제 문제를 해결했습니다. 내 상태 번호와 최대 절대 오류는 논문에보고 된 것과 유사했습니다.

또한 조건 번호를 기반으로 기대할 수있는 것보다 다소 나은 표준 상대 오류를 보았습니다. 예를 들어, 실시 예와 문제에 하여, N = 1024 , I 얻을ϵ=0.01N=1024

cond (A, 2) = 7.9e + 8

cond (A, inf) = 7.8e + 8

규범 (u-uexact, 2) / norm (uexact, 2) = 3.1e-12

규범 (u-uexact, inf) / norm (uexact, inf) = 2.7e-12

솔루션은 약 11-12 자릿수에 적합하고 조건 번호는 1e8 정도입니다.

그러나 요소 별 오류가있는 상황이 더 흥미 롭습니다.

최대 (abs (u-uexact)) = 2.7e-12

그래도 좋아 보인다.

최대 (abs ((u-uexact) ./ uexact) = 6.1e + 9

와우-솔루션의 적어도 하나의 구성 요소에 매우 큰 상대 오류가 있습니다.

어떻게 된 거예요? 이 방정식의 정확한 해는 작지만 (예 : 1.9e-22) 대략적인 해는 9e-14보다 훨씬 더 큰 값을 나타냅니다. 이것은 표준 상대 오차 측정에 의해 숨겨져 있으며 (2 노름 또는 무한대 노름이든) 요소 별 상대 오차를보고 최대 값을 취할 때만 표시됩니다.

아래의 원래 답변은 조건 번호로 주어진 범위보다 작은 솔루션에서 표준 상대 오차를 얻을 수있는 이유를 설명합니다.


이 질문에서 언급했듯이 비 단수 행렬 의 조건 번호 는 섭동 방정식 시스템에 대한 솔루션에 대한 최악의 상대 오차 경계를 제공합니다. 즉, A ( x + Δ x ) = b + Δ b를 정확하게 풀고 A x = b를 정확하게 풀면κ(A)A(x+Δx)=b+ΔbAx=b

Δxxκ(A)Δbb

조건 번호는 다양한 규범과 관련하여 계산할 수 있지만 일반적으로 2- 노름 조건 번호가 사용되며 이는 해당 논문에서 사용되는 조건 번호입니다.

최악의 경우 에러가 발생 의 좌 특이 벡터이다 의 최소 특이 값에 대응 . 때 최상의 경우가 발생 의 좌 특이 벡터이다 의 가장 큰 특이 값에 대응 . 때 무작위, 당신은의 돌기 봐야 의 왼쪽 단수 벡터의 모든에 와 해당 특이 값. 의 스펙트럼에 따라 상황이 매우 나쁘거나 잘 진행될 수 있습니다. A A Δ b A A Δ b Δ b A AΔbAAΔbAAΔbΔbAA

2-norm 조건 번호가 두 개의 행렬 고려하십시오 . 첫 번째 행렬에는 특이 값 , , , 있습니다. 두 번째 행렬에는 특이 값 , , , , 있습니다. 1.0 × 10 10 1 1 × 10 - 10 ... 1 × 10 - 101 ... 1 1 × 10 - 10A1.0×101011×10101×10101111×1010

첫 번째 경우, 임의 섭동은 첫 번째 왼쪽 특이 벡터의 방향이 아닐 가능성이 높으며 특이 값이 특이 벡터 중 하나에 가깝습니다 . 따라서 용액의 상대적 변화는 매우 클 수 있습니다. 두 번째 경우, 거의 모든 섭동은 특이 값 을 가진 특이 벡터와 방향이 가까우며 , 솔루션의 상대적 변화는 작습니다. 11×10101

추신 (나중에 요가 수업에서 돌아온 후 추가됨 ...)

대한 해의 공식 은 다음과 같습니다.AΔx=Δb

Δx=VΣ1UTΔb=i=1nUiTΔbσiVi

피타고라스 정리에 의해

Δx22=i=1n(UiTΔbσi)2

우리가 이면이 합계는 때 최대화되고 때 최소화됩니다 .Δ b = U n Δ b = U 1Δb2=1Δb=UnΔb=U1

여기에서 고려되는 상황에서 는 임의 반올림 오류의 결과이므로 값은 모두 거의 같은 크기 여야합니다. 값이 용어는 오류에 크게 기여하지만 값이 용어는 크게 기여하지 않습니다. 스펙트럼에 따라 최악의 경우보다 훨씬 작을 수 있습니다. U T i Δ b σ i σ iΔbUiTΔbσiσi


하지이 인수는 것을 의미하는 것 입니다 수 (심지어 않을 경우가)의 경계 최악의 경우에 도달하는 의 예에서 행렬을 검색 하시나요? AFAIU, 내 대답과 의 문서를 기반으로 할 수 없었습니다. κ(A)?getrs
Kirill

@BrianBorchers 당신은 때 최악의 경우 오류가 발생하는 이유를 "정교한 시겠어요 의 왼쪽 단수 벡터이다 의 가장 작은 특이 값에 해당하는 . 가장 좋은 경우가 발생하면 의 왼쪽 단수 벡터, 에 대응 의 가장 큰 특이 값입니다 . " 보유? 아래 예에서 논리적이지만 논리가 필요합니다. 의 SVD하자 수 . 첫 번째 경우 입니다. 진행하는 방법? Δ B = U Σ V T = Δ B σ 1 V의 T 1 + Σ N은 = 2 U I σ I 브이 T의 난을ΔbAAΔbAAAA=UΣVTA=Δbσ1v1T+i=2NuiσiviT
Zoltán Csáti

행렬 에서 반올림 오류에 대해서는 언급하지 않았지만, 반올림 오류 가 실제로 운이 나지 않는 한 일반적으로 비관적 최악의 경우보다 약간 더 나은 결과를 얻을 수 있습니다. A
Brian Borchers

(-1) 출력에서 ​​성분 별 상대 오차에 대한 논의는 심각하게 오도됩니다.
Kirill

1

TL은, DR은 그들이보고 조건 수, 반드시 우측 차이가 있기 때문에, 매트릭스에 대한 조건 참조.

이것은 행렬과 오른쪽 벡터에 따라 다릅니다. 에 대한 설명서를*getrs 보면 정방향 오류 범위는 여기서 는 일반적인 조건 번호 아니라 (여기서 표준 안에는 성분 별 절대 값이 있습니다.) 예를 들어 Higham의한 선형 시스템 및 LAPACK의 반복적 개선 또는 Higham의 수치 알고리즘정확도 및 안정성 (7.2)을 참조하십시오.

xx0xcond(A,x)ucond(A)u.
cond(A,x)κ(A)
cond(A,x)=|A1||A||x|x,cond(A)=|A1||A|.

귀하의 예를 들어, 과 비슷한 문제에 대해 의사 스펙트럼 차동 연산자를 사용 했으며 실제로및 , 나는 및 계산 했습니다. 표 3.1에 나와 있습니다 (3-4는 오류가 더 좋습니다). 조건이 잘못된 임의의 행렬에 대해 동일하게 시도하면 작동하지 않으므로 의 속성이어야합니다 .n=128|A1||A|κ(A)7×1032.6×107A

Kahan으로 인해 Higham (7.17, p.124)에서 가져온 두 조건 번호가 일치하지 않는 명백한 예는 내가 찾은 또 다른 예는 random 와 함께 일반 Vandermonde 행렬입니다 . 나는 갔고 조건이 좋지 않은 다른 행렬도 and 같은 이런 유형의 결과를 산출합니다 .

(2111ϵϵ1ϵϵ),(2+2ϵϵϵ).
[1:10]bMatrixDepot.jltriwmoler

본질적으로 진행중인 것은 섭동과 관련하여 선형 시스템을 해결하는 안정성을 분석 할 때 먼저 고려할 섭동 을 지정해야 한다는 것입니다. LAPACK으로 선형 시스템을 풀 때,이 오차 한계는 성분 별 동요를 고려 하지만 동요는 고려 하지 않습니다 . 따라서 이것은 일반적인이는 와 규범적인 섭동을 고려 합니다.Abκ(A)=A1AAb

(예를 들어) 구별 하지 않으면 어떻게 될지 고려하십시오 . 우리는 배정 밀도로 반복 정련을 사용하면 (위 링크 참조) 행렬에 대해 의 가장 좋은 상대 상대 오차를 얻을 수 있다는 것을 알고 있습니다 . 따라서 선형 시스템을 보다 더 나은 정확도로 해결할 수 없다는 아이디어를 고려 한다면 정제 솔루션은 어떻게 작동할까요?O(u)κ(A)1/uκ(A)u

PS 는 그 중요한 ?getrs계산 된 솔루션의 진정한 솔루션을 말한다 (A + E)x = b섭동와 에 만에 전혀 동요 . 에서 섭동이 허용되면 상황이 다를 수 있습니다 .EAbb

편집 코드에서 이것이 직접 작동하는 것을 보여주기 위해, 이것은 우연이나 운이 아니라 두 특정 조건에 대해 두 조건 번호의 결과가 비정상적이라는 것을 보여줍니다 (예 :

cond(A,x)cond(A)κ(A).
function main2(m=128)
    A = matrixdepot("chebspec", m)^2
    A[1,:] = A[end,:] = 0
    A[1,1] = A[end,end] = 1
    best, worst = Inf, -Inf
    for k=1:2^5
        b = randn(m)
        x = A \ b
        x_exact = Float64.(big.(A) \ big.(b))
        err = norm(x - x_exact, Inf) / norm(x_exact, Inf)
        best, worst = min(best, err), max(worst, err)
    end
    @printf "Best relative error:       %.3e\n" best
    @printf "Worst relative error:      %.3e\n" worst
    @printf "Predicted error κ(A)*ε:    %.3e\n" cond(A, Inf)*eps()
    @printf "Predicted error cond(A)*ε: %.3e\n" norm(abs.(inv(A))*abs.(A), Inf)*eps()
end

julia> main2()
Best relative error:       2.156e-14
Worst relative error:      2.414e-12
Predicted error κ(A)*ε:    8.780e-09
Predicted error cond(A)*ε: 2.482e-12

편집 2 다음은 서로 다른 조건 수가 예기치 않게 많이 나타나는 동일한 현상의 또 다른 예입니다. 이번에는 여기서 는 의 10 × 10 Vandermonde 행렬 이며 가 무작위로 선택 될 때 는 보다 눈에 띄게 작으며 최악의 경우 는 일부 .

cond(A,x)cond(A)κ(A).
A1:10xcond(A,x)κ(A)xxi=iaa
function main4(m=10)
    A = matrixdepot("vand", m)
    lu = lufact(A)
    lu_big = lufact(big.(A))
    AA = abs.(inv(A))*abs.(A)
    for k=1:12
        # b = randn(m) # good case
        b = (1:m).^(k-1) # worst case
        x, x_exact = lu \ b, lu_big \ big.(b)
        err = norm(x - x_exact, Inf) / norm(x_exact, Inf)
        predicted = norm(AA*abs.(x), Inf)/norm(x, Inf)*eps()
        @printf "relative error[%2d]    = %.3e (predicted cond(A,x)*ε = %.3e)\n" k err predicted
    end
    @printf "predicted κ(A)*ε      = %.3e\n" cond(A)*eps()
    @printf "predicted cond(A)*ε   = %.3e\n" norm(AA, Inf)*eps()
end

평균 사례 (거의 9 배 더 나은 오류) :

julia> T.main4()
relative error[1]     = 6.690e-11 (predicted cond(A,x)*ε = 2.213e-10)
relative error[2]     = 6.202e-11 (predicted cond(A,x)*ε = 2.081e-10)
relative error[3]     = 2.975e-11 (predicted cond(A,x)*ε = 1.113e-10)
relative error[4]     = 1.245e-11 (predicted cond(A,x)*ε = 6.126e-11)
relative error[5]     = 4.820e-12 (predicted cond(A,x)*ε = 3.489e-11)
relative error[6]     = 1.537e-12 (predicted cond(A,x)*ε = 1.729e-11)
relative error[7]     = 4.885e-13 (predicted cond(A,x)*ε = 8.696e-12)
relative error[8]     = 1.565e-13 (predicted cond(A,x)*ε = 4.446e-12)
predicted κ(A)*ε      = 4.677e-04
predicted cond(A)*ε   = 1.483e-05

최악의 경우 ( ) :a=1,,12

julia> T.main4()
relative error[ 1]    = 0.000e+00 (predicted cond(A,x)*ε = 6.608e-13)
relative error[ 2]    = 1.265e-13 (predicted cond(A,x)*ε = 3.382e-12)
relative error[ 3]    = 5.647e-13 (predicted cond(A,x)*ε = 1.887e-11)
relative error[ 4]    = 8.895e-74 (predicted cond(A,x)*ε = 1.127e-10)
relative error[ 5]    = 4.199e-10 (predicted cond(A,x)*ε = 7.111e-10)
relative error[ 6]    = 7.815e-10 (predicted cond(A,x)*ε = 4.703e-09)
relative error[ 7]    = 8.358e-09 (predicted cond(A,x)*ε = 3.239e-08)
relative error[ 8]    = 1.174e-07 (predicted cond(A,x)*ε = 2.310e-07)
relative error[ 9]    = 3.083e-06 (predicted cond(A,x)*ε = 1.700e-06)
relative error[10]    = 1.287e-05 (predicted cond(A,x)*ε = 1.286e-05)
relative error[11]    = 3.760e-10 (predicted cond(A,x)*ε = 1.580e-09)
relative error[12]    = 3.903e-10 (predicted cond(A,x)*ε = 1.406e-09)
predicted κ(A)*ε      = 4.677e-04
predicted cond(A)*ε   = 1.483e-05

편집 3 또 다른 예는 형식의 모든 크기의 요르단 블록 인 Forsythe 행렬 이것은 , 이므로 이지만 이므로 입니다. 그리고 손으로 확인할 수 , 잠재적으로 무한한 에도 불구하고 피벗으로 와 같은 선형 방정식 시스템을 해결하는 것은 매우 정확 합니다. 따라서이 매트릭스 역시 예기치 않은 정확한 솔루션을 제공합니다.

A=(010000100001ϵ000).
A=1A1=ϵ1κ(A)=ϵ1|A1|=A1=|A|1A x = b κ ( A )cond(A)=1Ax=bκ(A)

편집 4 Kahan 행렬 은 다음과 같습니다. :cond(A)κ(A)

A = matrixdepot("kahan", 48)
κ, c = cond(A, Inf), norm(abs.(inv(A))*abs.(A), Inf)
@printf "κ=%.3e c=%.3e ratio=%g\n" κ c (c/κ)

κ=8.504e+08 c=4.099e+06 ratio=0.00482027

OP가 참조하는 논문의 조건 번호는 2- 노름 조건 번호입니다. ElBarbary의 [17] 참조로 되돌아 가면 앞의 논문에서이 숫자가 두 규범 인 조건 번호임을 알 수 있습니다. 또한 DMsuite를 사용하여이 논문의 예제를 설정했으며 논문에보고 된 것과 거의 동일한 2- 노름 조건 번호를 얻었습니다.
Brian Borchers

dmsuite 및 Chebyshev 보간법을 사용하여 얻은이 예제의 무한 표준 조건 표준 숫자는 2 표준 조건 숫자와 크기가 비슷했습니다. 무한 노름 조건 수에서 2 노름의 차이 가이 특정 예에서 중요하다고 생각하지 않습니다.
Brian Borchers

나는 오류가 논문에서보고 있다고 생각됩니다 절대 오히려 상대 오류 (이 제외 너무 많은 차이가되지 않습니다보다는 솔루션이 0에 가까운 다운 딥,ϵ=0.01
브라이언 Borchers

들면 및 , 0 근처 용액의 부품에 대한 상대 오차가 크나 절대 오차가 작다. 나는 종이 조건 번호와 "오류"가 정확히 무엇인지에 대해 사용 된 것에 대해 매우 애매 동의 (상대 또는 절대 오류가 발생합니다.)N = 1024ϵ=0.01N=1024
브라이언 Borchers

@BrianBorchers 나는 당신이 무슨 뜻인지 잘 모르겠습니다 : 이것은 2-norm과 infty-norm 조건 숫자의 차이가 아니라 오히려 normwise와 component-wise 조건 숫자 (입력 요소의 구성 요소 별 상대 교란, 구성 요소가 아닌) 답변에서와 같이 출력의 -wise 상대 오류).
Kirill
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.