this is my solving process from the exercise of [a beginner's guide to R]
> Q
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 2 1
[3,] 2 3 0
> solve(Q)
[,1] [,2] [,3]
[1,] -0.12 0.36 -0.16
[2,] 0.08 -0.24 0.44
[3,] 0.32 0.04 -0.24
> solve(Q)%*%Q
[,1] [,2] [,3]
[1,] 1 -2.775558e-17 0
[2,] 0 1.000000e+00 0
[3,] 0 0.000000e+00 1
I wonder why I cannot get to the right answer that the identity matrix should come out.
Use the zapsmall
function on the final result. Due to floating point representation and rounding errors anything more than simple arithmatic (and even that sometimes) will result in values that are very close, but not exactly the same as what is expected. In this case you are seeing a value that has 16 0's after the decimal place before the first non-zero digit. The zapsmall
function will convert these small, essentially 0, values to 0 so that what you see matches what you expect.
This is not a programming error, this is the result of what's called "floating point arithmetic." rounded to a reasonable length, you will get the identity matrix:
Q2 <- solve(Q)%*%Q
round(Q2, 4)
To learn more on floating point arithmetic go here.
来源:https://stackoverflow.com/questions/15575240/in-r-programming-concerning-on-inverse-matrix-and-its-multiplication