I just learned about the RCM. I am trying to solve a problem that is a result of fluid dynamics and chemistry so I have a very large sparse matrix. I also learned reducing the bandwidth would accelerate the solver.
How do I know that the Matrix reordered matrix A in the system Ax=b will yield the same x vector as in the original A ?
I played a bit with Octave and Matlab to test it, but I don't see that is the case. So, I must understood something wrong, or did something wrong. Can someone here shed some light on the subject?
Well, it seems the answer is YES, but I don't know how to do it.
Here is an example done with octave:
Ny=900;
Nx=900;
ex = ones(Nx,1);
Axx = spdiags([ex -2*ex ex], -1:1, Nx, Nx);
Ix = speye(Nx);
ey = ones(Ny,1);
Ayy = spdiags([ey -2*ey ey], -1:1, Ny, Ny);
Iy = speye(Ny);
A = kron(Axx,Iy)+kron(Ix,Ayy);
C=symrcm (A); %this is the actual RCM
% just to visualize things
spy (A)
spy (A(C,C))
b=ones(900,1);
% store the permutated matrix
Amut= (A(C,C));
% solve and compare
x=A\b;
xmut=Amut\b;
x==xmut % results in avector full of zeros, e.g. False.
So how do I permutate my xmut to be x again ? it seems the individual entries are correct, but not in the right order.
It seems that the values in the vectors are equal if I do that:
octave:136>r1=x(C) % permutate x ...
octave:138> xmut(1:10)
ans =
-2.0039
-3.5078
-3.5078
-4.7093
-6.3179
-4.7093
-5.7014
-8.6281
-8.6281
-5.7014
octave:139> r1(1:10)
ans =
-2.0039
-3.5078
-3.5078
-4.7093
-6.3179
-4.7093
-5.7014
-8.6281
-8.6281
-5.7014
octave:140> isequal(r1(1:10),xmut(1:10))
ans = 0
SO I think the answer is YES, I still need to find how to compare the vectors...
So the final answer: octave:144> r1-xmut
yields only numbers like -1.3323e-15, -4.4409e-16 which practically can be treated as zero because of the floating points limitations. Which means my vectors are the same. Which is what I wanted to find out.