I am attempting to learn Julia and am experimenting with the matrix
function inv to calculate the inverse of some matrices. Some are singular
and some are nonsingular.
One case (below) gives me the wrong result but it is a simple example so I
must be misusing Julia (I found a similar issue with large numbers in the
basic factorial function in the documentation returning 0 which came down
to me not realizing the overflow behavior immediately)
These attempts works as expected
julia> A = [1 2 3; 0 2 2; 1 2 3]; inv(A)
ERROR: SingularException(3)
in inv at linalg/lu.jl:149
in inv at linalg/dense.jl:328
julia> A = [1 1 1; 0 2 3; 5 5 1]; inv(A)
3x3 Array{Float64,2}:
1.625 -0.5 -0.125
-1.875 0.5 0.375
1.25 0.0 -0.25
julia> inv(A) * A
3x3 Array{Float64,2}:
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
This does not
jjulia> A = [2 1 -1; 1 -2 -3; -3 -1 2]; inv(A)
3x3 Array{Float64,2}:
-4.5036e15 -6.43371e14 -3.21686e15
4.5036e15 6.43371e14 3.21686e15
-4.5036e15 -6.43371e14 -3.21686e15
julia> A * inv(A)
3x3 Array{Float64,2}:
0.0 -0.125 -0.5
0.0 0.75 0.0
0.0 0.0 0.0
Double checking manually, in julia with rref, and with wolframalpha.com
shows the expected results on this singular matrix
julia> A = [2 1 -1; 1 -2 -3; -3 -1 2]; rref([A eye(3)])
3x6 Array{Float64,2}:
1.0 0.0 -1.0 0.0 0.142857 -0.285714
0.0 1.0 1.0 0.0 -0.428571 -0.142857
* 0.0 0.0 0.0 * 1.0 0.142857 0.714286
inv {{2,1,-1}, {1,-2,-3}, {-3,-1,2}}
http://www.wolframalpha.com/input/?i=inv+%7B%7B2%2C1%2C-1%7D%2C+%7B1%2C-2%2C-3%7D%2C+%7B-3%2C-1%2C2%7D%7D
Thanks for any help,
Ben