행렬이 양의 반정의인지 테스트


12

양의 반 정도를 확인해야하는 대칭 행렬 목록 이 있습니다 (즉, 고유 값이 음수가 아닙니다).L

위의 의견은 각 고유 값을 계산하고 음수가 아닌지 확인하여 반올림 오류를 처리해야 함을 나타냅니다.

고유 값을 계산하는 것은 시나리오에서 상당히 비싸지 만, 사용중인 라이브러리가 양의 한계에 대해 매우 빠른 테스트를한다는 것을 알았습니다 (즉, 행렬의 고유 값이 엄격하게 양인 경우).

따라서 행렬 이 주어 지면 B + ϵ I 이 양의 정한 지 여부를 테스트하는 것이 좋습니다. 그렇지 않으면 B 는 양의 반 정밀도가 아니고, 그렇지 않으면 B 의 고유 값을 계산하여 실제로 양의 반정의인지 확인할 수 있습니다.BLB+ϵIBB

내 질문은 지금 :

포지티브 한정에 대한 효율적인 테스트가 제공된다면 매트릭스가 양의 반 정규인지 아닌지 직접적이고 효율적인 테스트 방법이 있습니까?


1
A


1
B+cIccc

예, 고유 값을 이동하고 가장 작은 고유 값을 계산할 수 있지만 허용 할 대상에 대한 허용 오차를 설정하는 데 여전히 문제가 있습니다 (고유 값이 최소한 허용 오차로 계산되도록해야합니다!)
Brian Borchers

이것이 도움이 될지 확실하지 않지만 일단 행렬이 양의 한정이 아니라는 것을 알면 양의 반정의인지 확인하려면 커널이 비어 있지 않은지 확인하면됩니다.
Abel Molina

답변:


23

"positive semidefinite"또는 "positive definite"의 작업 정의는 무엇입니까? 부동 소수점 산술에서는 이에 대한 일종의 공차를 지정해야합니다.

Aλ=1.01030λ=1.0

ϵ|λmax|λmax

불행하게도, 행렬의 모든 고유 값을 계산하는 데 다소 시간이 걸립니다. 일반적으로 사용되는 다른 접근 방식은 행렬에 부동 소수점 산술에서 hole 레 스키 분해가있는 경우 대칭 행렬이 양의 한정된 것으로 간주됩니다. hole 레 스키 인수 분해 계산은 고유 값을 계산하는 것보다 훨씬 빠릅니다. 행렬에 작은 배수의 아이덴티티를 추가하여이를 양의 반한 정도로 확장 할 수 있습니다. 다시, 스케일링 문제가 있습니다. 한 가지 빠른 접근 방식은 행렬의 대칭 스케일링을 수행 하여 Cholesky 인수 분해를 계산하기 전에 대각선 요소가 1.0이고 대각선에 을 추가 하는 것입니다. ϵ

그러나 접근 방식에 약간의 문제가 있기 때문에주의해야합니다. 예를 들어, 와 가 부동 소수점 Cholesky 인수 분해를 가지고 있다는 의미에서 postive 명확한 상황이 있지만 에는 Cholesky 인수 분해가 없습니다. 따라서 "부동 소수점 Cholesky 인수 분해 가능 양의 한정 행렬"세트는 볼록하지 않습니다! AB(A+B)/2


마지막 단락을 자세히 설명하거나 소스에 대한 링크를 게시 할 수 있습니까? 꽤 기이합니다.
Daniel Shapero 2016 년

2
이 스케일링에 대한 고전적인 참조는 A. van der Slui입니다. 매트릭스의 조건 수와 평형 Numerische Mathematik 14 (1) : 14-23, 1969. Golub 및 van Loan과 같은 교과서에서도 설명합니다. 마지막 단락의 비트는 반정의 프로그래밍 코드에서 코딩 라인 검색에 대한 개인적인 경험에서 얻은 것입니다 및 에 LAPACK에 의해 Cholesky 인수가 있는 상황이 발생 했지만 는 LAPACK에 따른 hole 레 스키 분해가 없습니다. 이런 종류의 문제는 거의 특이 할 때 발생합니다. XX+αΔXX+0.95αΔX
Brian Borchers

1
또한 일부 행렬이 확장 또는 4 중 정밀도로 hole 레 스키 (Cholesky) 인수 분해 될 수 있지만 규칙적인 배정도 또는 단 정밀도 부동 소수점 산술에서는 그렇지 않다는 것을 발견하는 것은 드문 일이 아닙니다.
Brian Borchers

3
SDP (CSDP, SDPT3, SDPA)에 대한 기본 이중 내부 포인트 코드 중 일부는 항상 양의 한정된 행렬을 반환하고 Cholesky 인수 분해를 사용하지만 다른 인기있는 솔버 (SeDuMi)는 고유 값 분해를 사용하고 매우 작은 음의 솔루션을 반환합니다 고유 값.
Brian Borchers

3

5
사용자 이름이 답의 저자와 논문의 저자 사이의 관계를 거의 공개하는 것처럼 보입니다. 논문에 포함 된 내용에 대해 조금 더 많은 정보가 있으면 좋을 것입니다. 어쨌든, 그것은 매우 흥미롭고 논문의 질문 목록과 관련이 있습니다!
Anton Menshov

0

@Brian Borchers의 제안을위한 Python, Cholesky 분해를 시도하십시오.

from sksparse.cholmod import cholesky, CholmodNotPositiveDefiniteError
    # https://scikit-sparse.readthedocs.io/en/latest/cholmod.html

def testposdef( A, beta=1e-6, pr="" ):
    """ try cholesky( a scipy.sparse matrix  + beta I )

    Why A + beta I, beta say 1e-6 ?
    If A has tiny eigenvalues, 0 to within machine precision,
    about half of these "zeros" may be negative -- tough on solvers.
    Also the condition number improves to ~ rho(A) / beta.
    """
    try:
        solve = cholesky( A, beta=beta )  # A + beta I
        if pr:
            print( "%s + %g I is positive-definite" % (pr, beta ))
        return solve  # x = solve( b )
    except CholmodNotPositiveDefiniteError:
        if pr:
            print( "%s + %g I is not positive-definite" % (pr, beta ))
        return False
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.