# Problem of the calculation of matrix

**URL:** <https://discourse.julialang.org/t/problem-of-the-calculation-of-matrix/30956>\
**Category:** Numerics\
**Created:** [November 11, 2019, 2:21pm UTC](https://discourse.julialang.org/t/problem-of-the-calculation-of-matrix/30956 "2019-11-11T14:21:20Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![FujiwaraTakumiEH](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fujiwaratakumieh/32/37975_2.png) [@FujiwaraTakumiEH](https://discourse.julialang.org/u/FujiwaraTakumiEH)\
**Post date:** [November 11, 2019, 2:21pm UTC](https://discourse.julialang.org/t/problem-of-the-calculation-of-matrix/30956/1 "2019-11-11T14:21:20Z")

</div>

## Background :

I use Julia to construct [Symmetric normalized Laplacian matrix](https://en.wikipedia.org/wiki/Laplacian_matrix) L^{sym} (Matrix D is a diagonal matrix):L^{sym}=D^{-1/2}×L×D^{-1/2}. Matrix L^{sym} is a sparse matrix.

> My computer configuration:

```julia
julia> versioninfo()
Julia Version 1.2.0
Commit c6da87ff4b (2019-08-20 00:03 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: Intel(R) Core(TM) i5-3337U CPU @ 1.80GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, ivybridge)

```

## My code:

```julia
D = ... # sparse matrix
L = ... # sparse matrix
Lsym = D^(-0.5)*L*D^(-0.5)

```

## Question:

- When L is 10000 × 10000 sparse matrix , the calculation speed of L^{sym} is fine.
- When L is 100000 × 100000 sparse matrix , the calculation speed of L^{sym} is very slow.

I wonder if there’s a faster way to calculate L^{sym}, or my code has problems calculating large sparse matrix.

---

<div class="post-metadata">

**Author:** ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)\
**Post date:** [November 11, 2019, 2:31pm UTC](https://discourse.julialang.org/t/problem-of-the-calculation-of-matrix/30956/2 "2019-11-11T14:31:42Z")

</div>

> [@FujiwaraTakumiEH](#):
>
> D = … # sparse matrix L = … # sparse matrix Lsym = D^(-0.5)_L_D^(-0.5)

Try

```julia
sqrtD = sqrt(D) 
Lsym = sqrtD*L*sqrt(D) 

```

It should make it at least twice as fast.

---

<div class="post-metadata">

**Author:** ![ranocha](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ranocha/32/35588_2.png) [@ranocha](https://discourse.julialang.org/u/ranocha)\
**Post date:** [November 11, 2019, 3:25pm UTC](https://discourse.julialang.org/t/problem-of-the-calculation-of-matrix/30956/3 "2019-11-11T15:25:18Z")

</div>

In your code, you wrote `D = ... # sparse matrix` but mentioned that `D` is diagonal. You could probably save some additional time by using `D = Diagonal(vector_of_coefficients_on_the_diagonal)`.  
(I assume that your `D` is a sparse matrix right now.)

---

<div class="post-metadata">

**Author:** ![FujiwaraTakumiEH](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fujiwaratakumieh/32/37975_2.png) [@FujiwaraTakumiEH](https://discourse.julialang.org/u/FujiwaraTakumiEH)\
**Post date:** [November 12, 2019, 12:57am UTC](https://discourse.julialang.org/t/problem-of-the-calculation-of-matrix/30956/4 "2019-11-12T00:57:52Z")

</div>

Thank you for your reply. I tried it according to your method. It has a very obvious acceleration effect on my computer! 😀

---

<div class="post-metadata">

**Author:** ![FujiwaraTakumiEH](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fujiwaratakumieh/32/37975_2.png) [@FujiwaraTakumiEH](https://discourse.julialang.org/u/FujiwaraTakumiEH)\
**Post date:** [November 12, 2019, 1:17am UTC](https://discourse.julialang.org/t/problem-of-the-calculation-of-matrix/30956/5 "2019-11-12T01:17:30Z")

</div>

Thank you for your reply, I think I may understand what you mean. But because it’s D^{-1/2}, so maybe it should be:

```julia
using LinearAlgebra

sqrtD = Diagonal(rand(1:1,10000))/sqrt(D) # Diagonal(rand(1:1,10000)) is to build an identity matrix
Lsym = sqrtD*L*sqrtD

```

According to your method, it‘s really much faster. Thank you！😀
