## Welcome to the World of Modelling and Simulation

### What is Modelling?

This blog is all about system dynamics modelling and simulation applied in the engineering field, especially mechanical, electrical, and ... ### Successive over Relaxation (SOR) Method to Solve System of Equations

Problem: Develop a MATLAB code to solve the following system of algebraic equations using the Successive-over-Relaxation Method. Solution:

Successive over Relaxation Method: This method is just the modification of the Gauss-Seidel method with an addition relaxation factor 𝛚. This method gives convergent solution as there is an option for under relaxation when 𝛚 is less than one. For different 𝛚, the following program can determine the solution. However, when 𝛚 is 0.05, the relatively better results are obtained.

MATLAB Program for Successive Over Relaxation (SOR) Method

function x = sor(a,b,x0,e,N,w)

% a - (nxn) matrix
% b - column vector of length n
% x0 - initial solution
% e - error definition
% N - no. of iterations
% w – relaxation factor

format long;

m=size(a,1);

n=length(b);

p=length(x0);

q=length(e);

if (m ~= n)

error('a and b do not have the same number of rows')

end

y0=x0;

for i=1:m

[~,f]=max(abs(a(1:m,i:i)));

% disp(f);

a([i,f],1:n)=a([f,i],1:n);

end

for t=1:m

if a(t,t)==0

[~,g]=max(abs(a(1:m,t:t)));

a([t,g],1:n)=a([g,t],1:n);

end

end

% disp(a);

c=1;

while(c<N)

for j=1:m

for k=1:p

Z(1,k)=(a(j,1:n)*y0(1:p,1));

end

Y(j:j,1)=sum(Z(1,k));

% disp(Y);

R(j:j,1)=b(j:j,1)-Y(j:j,1);

% disp (R);

x(j:j,1)=y0(j:j,1)+((R(j:j,1)*w)/a(j:j,j:j));

y0(j:j,1)= x(j:j,1);

% disp (y0);
% disp (x);

end

if (abs(x(1:p,1)-x0(1:p,1)) < e(1:q,1))

break;

end

disp (x);
disp(abs(x(1:p,1)-x0(1:p,1)));

x0=y0;

c=c+1;

end

x=x(1:p,1);

end

Program Outputs:

ans =

2.322822494693882
0.675693020694401
2.160169880982512
-0.350429027969758
-0.428941223493063
-0.394923172868219

Error Percentage: 2.2%, 1.5%, 1.4%, 2.6%, 0.9% and 5.8%.