Julia: isposdef()๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค

์— ๋งŒ๋“  2017๋…„ 01์›” 12์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: JuliaLang/julia

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)
doc linear algebra

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด๋ ˆ์Šคํ‚ค ๋ถ„ํ•ด๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋™์•ˆ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถ€๋™ ์†Œ์ˆ˜์  ํ–‰๋ ฌ์˜ ํŠน์ด์„ฑ์„ ์•ˆ์ •์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ œ๊ณตํ•œ ํ–‰๋ ฌ์€ ์‹ค์ œ๋กœ ์ด์ง„ ๋ถ€๋™ ์†Œ์ˆ˜์  ํ‘œํ˜„์—์„œ ๋‹จ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

julia> det(big(A))
2.13162820728030047872728228063319445882714347172137703267935663215914838016073e-16

ํ•ญ์ด ๋„ˆ๋ฌด ๋นจ๋ฆฌ ์„ฑ์žฅํ•˜์—ฌ Sylverster์˜ ๊ธฐ์ค€์ด ์‹ค์ œ๋กœ ์‹ค์šฉ์ ์ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ–‰๋ ฌ์‹์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜์น˜ ๊ณ„์‚ฐ์—์„œ ๋งค์šฐ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ˆ˜์น˜ ๊ณ„์‚ฐ์—์„œ Cholesky๋ฅผ ํ†ตํ•œ ํ…Œ์ŠคํŠธ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์›ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ ์ƒ๋‹นํžˆ ์ €๋ ดํ•˜๋ฏ€๋กœ ๋ณ€๊ฒฝํ•  ์ƒ๊ฐ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์„œ๋ฅผ ํ™•์žฅํ•˜๊ณ  ์—ฌ๊ธฐ ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œํ•œ ์‚ฌํ•ญ์„ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ์— ๋ฌธ์„œ ๋ ˆ์ด๋ธ”์„ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

์ด๋ ˆ์Šคํ‚ค ๋ถ„ํ•ด๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋™์•ˆ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถ€๋™ ์†Œ์ˆ˜์  ํ–‰๋ ฌ์˜ ํŠน์ด์„ฑ์„ ์•ˆ์ •์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ œ๊ณตํ•œ ํ–‰๋ ฌ์€ ์‹ค์ œ๋กœ ์ด์ง„ ๋ถ€๋™ ์†Œ์ˆ˜์  ํ‘œํ˜„์—์„œ ๋‹จ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

julia> det(big(A))
2.13162820728030047872728228063319445882714347172137703267935663215914838016073e-16

ํ•ญ์ด ๋„ˆ๋ฌด ๋นจ๋ฆฌ ์„ฑ์žฅํ•˜์—ฌ Sylverster์˜ ๊ธฐ์ค€์ด ์‹ค์ œ๋กœ ์‹ค์šฉ์ ์ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ–‰๋ ฌ์‹์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜์น˜ ๊ณ„์‚ฐ์—์„œ ๋งค์šฐ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ˆ˜์น˜ ๊ณ„์‚ฐ์—์„œ Cholesky๋ฅผ ํ†ตํ•œ ํ…Œ์ŠคํŠธ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์›ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ ์ƒ๋‹นํžˆ ์ €๋ ดํ•˜๋ฏ€๋กœ ๋ณ€๊ฒฝํ•  ์ƒ๊ฐ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์„œ๋ฅผ ํ™•์žฅํ•˜๊ณ  ์—ฌ๊ธฐ ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œํ•œ ์‚ฌํ•ญ์„ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ์— ๋ฌธ์„œ ๋ ˆ์ด๋ธ”์„ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@andreasnoack ์—ฌ๊ธฐ์— ์ƒํ™ฉ ์š”์•ฝ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์Šน์ธ ํ›„ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ๋ฌธ์„œ์— ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
isposdef(A) โ†’ ๋ถ€์šธ
ํฐ ์ˆ˜์— ๋Œ€ํ•œ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ํ–‰๋ ฌ์‹ ๊ณ„์‚ฐ์œผ๋กœ ์ธํ•ด Sylvester์˜ ๊ธฐ์ค€์ด ๋น„์‹ค์šฉ์ ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— Cholesky ๋ถ„ํ•ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ–‰๋ ฌ์ด ์–‘์˜ ์ •๋ถ€ํ˜ธ์ธ์ง€ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. ํŠน์ด์ (๋ฐ˜์ „ ๋ถˆ๊ฐ€) ์–‘์˜ ์ค€์ •๋ถ€ํ˜ธ ๋ถ€๋™ ์†Œ์ˆ˜์  ํ–‰๋ ฌ์˜ ๊ฒฝ์šฐ ์ด๋ ˆ์Šคํ‚ค ๋ถ„ํ•ด์™€ ํ–‰๋ ฌ์˜ ๋น„ํŠน์ด ์ด์ง„ ๋ถ€๋™ ์†Œ์ˆ˜์  ํ‘œํ˜„๊ณผ ๊ด€๋ จ๋œ ๋ฐ˜์˜ฌ๋ฆผ์œผ๋กœ ์ธํ•ด ํ•จ์ˆ˜๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค๋ฒ ์Šคํ„ฐ์˜ ๊ธฐ์ค€์„ ๋งํ•  ํ•„์š”๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰