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
inv(M1)*M1
not equal to unit matrix,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:
⋅ ⋅ ⋅ ⋅
⋅ ⋅ ⋅ ⋅
⋅ ⋅ ⋅ ⋅
⋅ ⋅ ⋅ ⋅
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.)
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.