# Checking for singularity of matrix

**URL:** https://discourse.julialang.org/t/checking-for-singularity-of-matrix/54746
**Category:** General Usage
**Created:** [February 6, 2021, 6:08pm UTC](https://discourse.julialang.org/t/checking-for-singularity-of-matrix/54746 "2021-02-06T18:08:06Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![iamsuddhasattwa](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/iamsuddhasattwa/32/7441_2.png) [@iamsuddhasattwa](https://discourse.julialang.org/u/iamsuddhasattwa)
#### Post date: [February 6, 2021, 6:08pm UTC](https://discourse.julialang.org/t/checking-for-singularity-of-matrix/54746/1 "2021-02-06T18:08:06Z")

</div>

When doing linear algebra procedures such as  
`A\b` or `pinv(A)`,  
where `A` is a square matrix, is there a way to check for singularity of `A` ? Otherwise I keep getting errors such as `SingularException(3)` or ` LAPACKException(1)`.

---

<div class="post-metadata">

### Author: ![zdenek\_hurak](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/zdenek_hurak/32/53118_2.png) [@zdenek\_hurak](https://discourse.julialang.org/u/zdenek_hurak)
#### Post date: [February 6, 2021, 6:25pm UTC](https://discourse.julialang.org/t/checking-for-singularity-of-matrix/54746/2 "2021-02-06T18:25:04Z")

</div>

[rank](https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.rank)

---

<div class="post-metadata">

### Author: ![tim.rand](https://avatars.discourse-cdn.com/v4/letter/t/a3d4f5/32.png) [@tim.rand](https://discourse.julialang.org/u/tim.rand)
#### Post date: [December 26, 2022, 8:53pm UTC](https://discourse.julialang.org/t/checking-for-singularity-of-matrix/54746/3 "2022-12-26T20:53:56Z")

</div>

pretty new to julia, but I think this would work:  
is\_singular = A → rank(A) == max(size(A)…)  
#only true for matrix A when square and no dependent columns (full rank) = singular

---

<div class="post-metadata">

### Author: ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)
#### Post date: [December 26, 2022, 10:09pm UTC](https://discourse.julialang.org/t/checking-for-singularity-of-matrix/54746/4 "2022-12-26T22:09:49Z")

</div>

> [@iamsuddhasattwa](#):
>
> is there a way to check for singularity of `A` ?

Numerically, this question is a bit ill-defined, because roundoff errors make it hard to distinguish between a matrix that is _exactly_ singular and a matrix that is [_nearly_ singular](https://mathworld.wolfram.com/Ill-ConditionedMatrix.html). Moreover, as a practical matter it is rarely a good idea to try to make this distinction — matrices that are _nearly_ singular are in many ways just as “bad” as matrices that are singular.

If you find yourself solving a lot of systems that are nearly singular, that it is a good sign that you need to re-think what you are doing. (e.g. perhaps you need some regularization in your equations)

Where are these matrices coming from? Why are they sometimes singular or nearly so?

---

<div class="post-metadata">

### Author: ![Dan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dan/32/42581_2.png) [@Dan](https://discourse.julialang.org/u/Dan)
#### Post date: [December 26, 2022, 11:05pm UTC](https://discourse.julialang.org/t/checking-for-singularity-of-matrix/54746/5 "2022-12-26T23:05:44Z")

</div>

Just adding that checking the condition number of a matrix can be done with:

```julia
julia> using LinearAlgebra

julia> M = rand(4,4)
4×4 Matrix{Float64}:
 0.596334 0.699729 0.632193 0.931758
 0.910922 0.150834 0.605005 0.90234
 0.640964 0.0686345 0.0811358 0.372114
 0.67283 0.458002 0.346649 0.485548

julia> cond(M)
23.45879906432043

julia> cond(zeros(4,4)) # zero matrix is singular
Inf

```

and for any singular matrix, the condition number would be `Inf`. A smaller condition number is better.

---

<div class="post-metadata">

### Author: ![iamsuddhasattwa](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/iamsuddhasattwa/32/7441_2.png) [@iamsuddhasattwa](https://discourse.julialang.org/u/iamsuddhasattwa)
#### Post date: [December 29, 2022, 5:09am UTC](https://discourse.julialang.org/t/checking-for-singularity-of-matrix/54746/6 "2022-12-29T05:09:07Z")

</div>

Very nice point. I shall follow it.

---

<div class="post-metadata">

### Author: ![iamsuddhasattwa](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/iamsuddhasattwa/32/7441_2.png) [@iamsuddhasattwa](https://discourse.julialang.org/u/iamsuddhasattwa)
#### Post date: [December 29, 2022, 5:09am UTC](https://discourse.julialang.org/t/checking-for-singularity-of-matrix/54746/7 "2022-12-29T05:09:31Z")

</div>

Thank you, that is quite handy
