Python Program for Successive Over-Relaxation

In numerical analysis, specially in linear algebra, successive over-relaxation (SOR) method is a variant of the Gauss–Seidel method for solving a system of linear equations. This variant converges faster than Gauss-Seidel method.

This Python program implements successive over-relaxation (SOR) method to solve system of linear equations.

This program solves system of linear equation having 3 unknowns. You can modify this program to solve higher number of unknowns.

Following system of linear equations are used:

 3x - y + z = -1
-x + 3y - z = 7
 x - y + 3z = -7

Python Source Code


# successive over-relaxation (SOR)

# Defining equations to be solved
# in diagonally dominant form
f1 = lambda x,y,z: (-1+y-z)/3
f2 = lambda x,y,z: (7+x+z)/3
f3 = lambda x,y,z: (-7-x+y)/3

# Initial setup
x0 = 0
y0 = 0
z0 = 0
count = 1

# Reading tolerable error
e = float(input('Enter tolerable error: '))

# Reading relaxation factor
w = float(input("Enter relaxation factor: "))

# Implementation of successive over-relaxation
print('\nCount\tx\ty\tz\n')

condition = True

while condition:
    x1 = (1-w) * x0 + w * f1(x0,y0,z0)
    y1 = (1-w) * y0 + w * f2(x1,y0,z0)
    z1 = (1-w) * z0 + w * f3(x1,y1,z0)
    print('%d\t%0.4f\t%0.4f\t%0.4f\n' %(count, x1,y1,z1))
    e1 = abs(x0-x1);
    e2 = abs(y0-y1);
    e3 = abs(z0-z1);
    
    count += 1
    x0 = x1
    y0 = y1
    z0 = z1
    
    condition = e1>e and e2>e and e3>e

print('\nSolution: x = %0.3f, y = %0.3f and z = %0.3f\n'% (x1,y1,z1))

Output

Enter tolerable error: 0.0001
Enter relaxation factor: 1.25

Count	x	y	z

1	-0.4167	2.7431	-1.6001

2	1.4972	2.1880	-2.2288

3	1.0494	1.8782	-2.0141

4	0.9428	2.0007	-1.9723

5	1.0031	2.0126	-2.0029

6	1.0057	1.9980	-2.0025

7	0.9988	1.9990	-1.9993

8	0.9996	2.0004	-1.9998

9	1.0002	2.0001	-2.0001

10	1.0000	2.0000	-2.0000


Solution: x = 1.000, y = 2.000 and z = -2.000