The behavior of unpivoted Cholesky is not obviously wrong; it fails to
factorize in finite-precision arithmetic when the smallest eigenvalue
is something on the order of epsilon (you can get the precise constant
and citation from, e.g.
http://mathoverflow.net/questions/108700/quantifying-the-failure-of-the-cholesky-factorization-test-for-indefinite-matric).

I believe the error code returned tells you which row of the
factorization failed.
Thanks,

Jiahao Chen
Staff Research Scientist
MIT Computer Science and Artificial Intelligence Laboratory


On Mon, Apr 7, 2014 at 4:49 PM, Iain Dunning <iaindunn...@gmail.com> wrote:
> Hey,
>
> Couldn't find the documentation - all I found was
> https://github.com/JuliaLang/julia/blob/27c3a5b7ed66bee509fc4a81aa54ba09aec1b2ee/base/linalg/exceptions.jl#L19-L21
> and
> http://docs.julialang.org/en/latest/stdlib/linalg/?highlight=posdefexception#Base.cholfact
>
> I know rand(4,4) isn't symmetric :)
> I was just trying to figure out if the error code was always 4 or there was
> some deeper meaning.
>
> My solution is to use cholfact and set pivot to true. Would it be a good
> idea for chol to use pivot by default? Or is the cost unacceptable?
>
> Cheers,
> Iain
>
>
> On Monday, April 7, 2014 4:41:38 PM UTC-4, Douglas Bates wrote:
>>
>>
>>
>> On Monday, April 7, 2014 3:24:32 PM UTC-5, Iain Dunning wrote:
>>>
>>> Hi all,
>>>
>>> I have the following matrix (in a copy-pasteable format)
>>>
>>> X = [1.00000000753845    -.9999999962147147  -1.0000000052345246
>>> -1.0000000048451771;
>>> -.9999999962147147  .9999999849183356   .9999999938533486
>>> .9999999932021346;
>>> -1.0000000052345246 .9999999938533486   1.0000000081826723
>>> 1.0000000034216714;
>>> -1.0000000048451771 .9999999932021346   1.0000000034216714
>>> 1.0000000058875202]
>>>
>>> and I have
>>> println(eig(X))
>>>
>>> telling me
>>> [8.01744247656805e-17, 2.6859121865768767e-9, 3.823536365571658e-9,
>>> 4.000000000017529]
>>> (i.e. that it is PSD)
>>>
>>> but
>>> println(chol(X))
>>>
>>> giving me
>>> ERROR: PosDefException(4)
>>>
>>> Two questions:
>>> 1) How do I make chol try harder? Do I want to use cholfact and increase
>>> tol to... what?
>>> 2) How can I find out what (4) means? Because when I do the following:
>>>
>> As a last resort you can always read the documentation :-)
>>
>> The 4 is the error number from the LAPACK.potrf! function, indicating that
>> the Cholesky factorization failed on the fourth column
>>
>>> julia> chol(rand(4,4))
>>> ERROR: PosDefException(2)
>>>  in cholfact! at linalg/factorization.jl:36
>>>  in chol at linalg/factorization.jl:44
>>>
>>
>> Umm - rand(4,4) is not expected to be symmetric.
>>
>>>
>>> it is (2) - so I'm guessing that the 4 communicates something useful.
>>>
>>> Cheers,
>>> Iain
>>>
>>>
>

Reply via email to