title: Matlab code for Gauss-Seidel and Successive over relaxation iterative methods
body: <p>I need to code the Gauss Seidel and Successive over relaxation iterative methods in Matlab. I have created the below code for each of them, however my final solution vector does not return the correct answers and i'm really struggling to figure out why. Could anyone please help me?
  In both cases, x is the final solution vector and i returns the number of iterations.</p>
  
  <p>Thanks in advance</p>
  
  <p>Gauss Seidel Method:</p>
  
  <pre><code>function [x,i] = gaussSeidel(A,b,x0,tol)
  x2 = x0;
  count = 0;
  D = diag(diag(A));
  U = triu(A-D);
  disp(U);
  L = tril(A-D);
  disp(L);
  C = diag(diag(A));
  disp(C);
  Inv = inv(C+D);
  error = inf;
        while error&gt;tol
            x1 = x2;
            x2 = Inv*(b-(U*x1));
            error = max(abs(x2-x1)/abs(x1));
            count = count + 1;
        end
  x = x2;
  i = count;
  end
  </code></pre>
  
  <p>SOR Method:</p>
  
  <pre><code>function [x,i] = sor(A,b,x0,tol,omega)
  [m,n] = size(A);
  D = diag(diag(A));
  U = triu(A-D);
  L = tril(A-D);
  count = 1;
  xtable = x0;
  w = omega;
  if size(b) ~= size(x0)
      error('The given approximation vector does not match the x vector size');
  elseif m~=n
      error('The given coefficient matrix is not a square');
  else
      xnew = (inv(D+w*L))*(((1-w)*D-w*U)*x0 +w*b);
      RelError = (abs(xnew-x0))/(abs(xnew));
      RelErrorCol = max(max(RelError));
      while RelErrorCol&gt;tol
          xnew = (inv(D+w*L))*(((1-w)*D-w*U)*x0 +w*b);
          RelError = (abs(xnew-x0))/(abs(xnew));
          RelErrorCol = max(max(RelError));
          x0 = xnew;
          count = count+1;
          xtable = [xtable, xnew];
      end
      disp(xtable);
      x = xnew;
      i = count;
  end
  </code></pre>