# In-place cholesky decomposition fails even if the matrix is hermitian

**URL:** <https://discourse.julialang.org/t/in-place-cholesky-decomposition-fails-even-if-the-matrix-is-hermitian/101473>\
**Category:** General Usage\
**Tags:** question\
**Created:** [July 11, 2023, 7:32am UTC](https://discourse.julialang.org/t/in-place-cholesky-decomposition-fails-even-if-the-matrix-is-hermitian/101473 "2023-07-11T07:32:33Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![taka255](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/taka255/32/51426_2.png) [@taka255](https://discourse.julialang.org/u/taka255)\
**Post date:** [July 11, 2023, 7:32am UTC](https://discourse.julialang.org/t/in-place-cholesky-decomposition-fails-even-if-the-matrix-is-hermitian/101473/1 "2023-07-11T07:32:34Z")

</div>

Hi,

I am encountering an issue with Cholesky decomposition in Julia. The code I am using is as follows:

```julia
using StaticArrays, LinearAlgebra

sigma = @MMatrix [20+1.0*cos(2.0) 3.0; 3.0 20-1.0 *cos(2.0)]
sigma1 = @SMatrix [0.01^2 0;0 0.01^2]

sigma2 = sigma1*inv(sigma1+sigma)*sigma
sigma3 = Symmetric(sigma2)

display(sigma3)
display(ishermitian(sigma3))

cholesky!(sigma3)

```

and the result is

```julia
2×2 Symmetric{Float64, SMatrix{2, 2, Float64, 4}}:
 9.99995e-5 7.67596e-11
 7.67596e-11 9.99995e-5
true
PosDefException: matrix is not Hermitian; Cholesky factorization failed.

```

I expected the Cholesky factorization to succeed since the matrix `sigma3` is Hermitian, but it failed. I tried using cholesky(sigma3).L instead, and it succeeded. However, I would like to perform the Cholesky factorization in-place.

I would appreciate any assistance you can provide.

---

<div class="post-metadata">

**Author:** ![jishnub](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jishnub/32/33620_2.png) [@jishnub](https://discourse.julialang.org/u/jishnub)\
**Post date:** [July 11, 2023, 7:50am UTC](https://discourse.julialang.org/t/in-place-cholesky-decomposition-fails-even-if-the-matrix-is-hermitian/101473/2 "2023-07-11T07:50:28Z")

</div>

Please report this issue with `StaticArrays.jl`, they should be skipping the check in this case where the static matrix is wrapped in a `Symmetric` or `Hermitian`.

That being said, your matrix is immutable, so I don’t think an in-place operation is possible.

---

<div class="post-metadata">

**Author:** ![taka255](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/taka255/32/51426_2.png) [@taka255](https://discourse.julialang.org/u/taka255)\
**Post date:** [July 11, 2023, 8:27am UTC](https://discourse.julialang.org/t/in-place-cholesky-decomposition-fails-even-if-the-matrix-is-hermitian/101473/3 "2023-07-11T08:27:19Z")

</div>

Thanks for helping me understand the essence of issue.

As an immediate solution, instead of using the `Symmetric`, I found that directly assigning `sigma2[2,1] = sigma2[1,2]` worked fine when `sigma1` is `MMatrix`.
