I use the `inv()`

to do the inverse of the matrix, but I find that I don’t get the inverse matrix, or is it due to too much error?

This is my matrix

but

`inv(M1)*M1`

not equal to unit matrix,Why is it happen?

I use the `inv()`

to do the inverse of the matrix, but I find that I don’t get the inverse matrix, or is it due to too much error?

This is my matrix

but

`inv(M1)*M1`

not equal to unit matrix,Why is it happen?

Are you sure you really want the inverse matrix and not the solution of the equations which would be `y \ M`

.

Also your matrix looks very sparse, maybe try to call explicitly

```
julia> using SparseArrays
julia> sparse(zeros((4,4)))
4×4 SparseMatrixCSC{Float64, Int64} with 0 stored entries:
⋅ ⋅ ⋅ ⋅
⋅ ⋅ ⋅ ⋅
⋅ ⋅ ⋅ ⋅
⋅ ⋅ ⋅ ⋅
```

2 Likes

Maybe your matrix is badly conditioned (i.e., nearly singular), in which case floating-point roundoff errors are enormously amplified when you try to invert the matrix. Try computing `cond(M1)`

to get the condition number — probably it is huge (\sim 10^{15}).

If you are solving systems with an ill-conditioned matrix, you probably need to think carefully about what you are doing. (e.g. if you need a regularization, or if the problem is exactly singular and there is some other aspect of your problem that indicates which solution you want.)

6 Likes

You shouldn’t be inverting matrices. It’s not as bad as numerical algebra courses will tell you (as I fairly recently learned on here), but it’s still very rarely the best way to achieve what you want.