isposdef()๋ ์ผ๋ถ(์ ๋ถ๋ ์๋์ง๋ง) ์์ ์ ๋ถํธ ํ๋ ฌ์ด ๋ค์๊ณผ ๊ฐ์ ๋ ์์ ์ ๋ถํธ ํ๋ ฌ์ด๋ผ๊ณ ์ฃผ์ฅํฉ๋๋ค.
julia> A = [1.69 2.21; 2.21 2.89]
2ร2 Array{Float64,2}:
1.69 2.21
2.21 2.89
julia> det(A)
0.0
julia> isposdef(A)
true
julia> isposdef(ones(2,2))
false
์ด ๋์์ ์์ธ์ด ๋ฌด์์ธ์ง ํ์คํ์ง ์์ต๋๋ค. isposdef()๊ฐ ํ๋ ฌ์ Cholesky ๋ถํด๋ฅผ ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉฐ ๋ชจ๋ ์์ ์ค์ ๋ถํธ ํ๋ ฌ์๋ Cholesky ๋ถํด๊ฐ ์์ต๋๋ค(IIRC์๋ ์ด๋ฅผ ์ฐพ๋ ์ผ๋ฐ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ด ์์) . ๋ค์๊ณผ ๊ฐ์ด Sylvestor์ ๊ธฐ์ค์ ๊ตฌํํ๋ ๊ฒ์ด ๋ ๊ฐ๋จํ ๊ฒ ๊ฐ์ต๋๋ค.
sylvestor(A) = issymmetric(A) & all([det(A[1:j, 1:j]) > 0 for j = 1:size(A)[1]])
๋ฒ์ ์ ๋ณด:
julia> versioninfo()
Julia Version 0.5.0
Commit 3c9d753 (2016-09-19 18:14 UTC)
Platform Info:
System: NT (x86_64-w64-mingw32)
CPU: Intel(R) Xeon(R) CPU E3-1240 v3 @ 3.40GHz
WORD_SIZE: 64
BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Haswell)
LAPACK: libopenblas64_
LIBM: libopenlibm
LLVM: libLLVM-3.7.1 (ORCJIT, haswell)
์ด๋ ์คํค ๋ถํด๋ฅผ ๊ณ์ฐํ๋ ๋์ ๋ฐ์ฌ๋ฆผํ๋ฉด ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ถ๋ ์์์ ํ๋ ฌ์ ํน์ด์ฑ์ ์์ ์ ์ผ๋ก ํ ์คํธํ ์ ์์ต๋๋ค. ์ ๊ณตํ ํ๋ ฌ์ ์ค์ ๋ก ์ด์ง ๋ถ๋ ์์์ ํํ์์ ๋จ์๊ฐ ์๋๋๋ค.
julia> det(big(A))
2.13162820728030047872728228063319445882714347172137703267935663215914838016073e-16
ํญ์ด ๋๋ฌด ๋นจ๋ฆฌ ์ฑ์ฅํ์ฌ Sylverster์ ๊ธฐ์ค์ด ์ค์ ๋ก ์ค์ฉ์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ ํ๋ ฌ์์ ์ผ๋ฐ์ ์ผ๋ก ์์น ๊ณ์ฐ์์ ๋งค์ฐ ์ ๋ขฐํ ์ ์์ต๋๋ค. ์์น ๊ณ์ฐ์์ Cholesky๋ฅผ ํตํ ํ ์คํธ๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ํ๋ ๊ฒ์ด๋ฉฐ ์๋นํ ์ ๋ ดํ๋ฏ๋ก ๋ณ๊ฒฝํ ์๊ฐ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ธฐ ์ํด ๋ฌธ์๋ฅผ ํ์ฅํ๊ณ ์ฌ๊ธฐ ์์ ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ ์ฌํญ์ ํ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ฌธ์ ์ ๋ฌธ์ ๋ ์ด๋ธ์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
@andreasnoack ์ฌ๊ธฐ์ ์ํฉ ์์ฝ์ด ์์ต๋๊น? ์น์ธ ํ ์์ ์ ํจ๊ป ๋ฌธ์์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
isposdef(A) โ ๋ถ์ธ
ํฐ ์์ ๋ํ ์ ๋ขฐํ ์ ์๋ ํ๋ ฌ์ ๊ณ์ฐ์ผ๋ก ์ธํด Sylvester์ ๊ธฐ์ค์ด ๋น์ค์ฉ์ ์ด ๋๊ธฐ ๋๋ฌธ์ Cholesky ๋ถํด๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ฌ์ด ์์ ์ ๋ถํธ์ธ์ง ํ
์คํธํฉ๋๋ค. ํน์ด์ (๋ฐ์ ๋ถ๊ฐ) ์์ ์ค์ ๋ถํธ ๋ถ๋ ์์์ ํ๋ ฌ์ ๊ฒฝ์ฐ ์ด๋ ์คํค ๋ถํด์ ํ๋ ฌ์ ๋นํน์ด ์ด์ง ๋ถ๋ ์์์ ํํ๊ณผ ๊ด๋ จ๋ ๋ฐ์ฌ๋ฆผ์ผ๋ก ์ธํด ํจ์๊ฐ ์ํ๋ ๋๋ก ์๋ํ์ง ์์ ์ ์์ต๋๋ค.
์ค๋ฒ ์คํฐ์ ๊ธฐ์ค์ ๋งํ ํ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๋ ์คํค ๋ถํด๋ฅผ ๊ณ์ฐํ๋ ๋์ ๋ฐ์ฌ๋ฆผํ๋ฉด ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ถ๋ ์์์ ํ๋ ฌ์ ํน์ด์ฑ์ ์์ ์ ์ผ๋ก ํ ์คํธํ ์ ์์ต๋๋ค. ์ ๊ณตํ ํ๋ ฌ์ ์ค์ ๋ก ์ด์ง ๋ถ๋ ์์์ ํํ์์ ๋จ์๊ฐ ์๋๋๋ค.
ํญ์ด ๋๋ฌด ๋นจ๋ฆฌ ์ฑ์ฅํ์ฌ Sylverster์ ๊ธฐ์ค์ด ์ค์ ๋ก ์ค์ฉ์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ ํ๋ ฌ์์ ์ผ๋ฐ์ ์ผ๋ก ์์น ๊ณ์ฐ์์ ๋งค์ฐ ์ ๋ขฐํ ์ ์์ต๋๋ค. ์์น ๊ณ์ฐ์์ Cholesky๋ฅผ ํตํ ํ ์คํธ๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ํ๋ ๊ฒ์ด๋ฉฐ ์๋นํ ์ ๋ ดํ๋ฏ๋ก ๋ณ๊ฒฝํ ์๊ฐ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ธฐ ์ํด ๋ฌธ์๋ฅผ ํ์ฅํ๊ณ ์ฌ๊ธฐ ์์ ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ ์ฌํญ์ ํ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ฌธ์ ์ ๋ฌธ์ ๋ ์ด๋ธ์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.