Skip to content

Commit de509e8

Browse files
authored
Create gauss_seidel_elimination.py
1 parent 9410e55 commit de509e8

File tree

1 file changed

+130
-0
lines changed

1 file changed

+130
-0
lines changed

gauss_seidel_elimination.py

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
4+
@author: Sudipto3331
5+
"""
6+
7+
##Import libraries as necessary
8+
import numpy as np
9+
import xlrd
10+
from xlwt import Workbook
11+
def brcond_Seidel(E,err,n):
12+
13+
a=0
14+
for i in range(n):
15+
if E[i]<err:
16+
a=a+1
17+
return a/n
18+
19+
#taking necessary input values from keyboard
20+
err=float(input('Enter desired percentage relative error: '))
21+
ite=int(input('Enter number of iterations: '))
22+
relaxation=float(input('Enter relaxation factor: '))
23+
24+
#Reading data from excel file
25+
loc = ('data.xls')
26+
27+
wb = xlrd.open_workbook(loc)
28+
sheet = wb.sheet_by_index(3)
29+
30+
n=sheet.nrows #number of unknown variables
31+
#Initialize variables
32+
a=np.zeros([n,n+1])
33+
E=np.zeros([n])
34+
rel_err=np.zeros([ite,n])
35+
X=np.zeros([n])
36+
x=np.zeros([ite,n])
37+
x_new=np.zeros([ite,n])
38+
itern=np.zeros([ite])
39+
p=np.zeros([n])
40+
41+
for i in range(sheet.ncols):
42+
for j in range(sheet.nrows):
43+
a[j,i]=sheet.cell_value(j, i)
44+
45+
#Iteration for Gauss Seidel begins here.
46+
for j in range(ite):
47+
#storing the values of iteration
48+
itern[j]=j+1
49+
50+
for i in range(n):
51+
summation=0
52+
53+
for k in range(n):
54+
55+
if k>i or k<i:
56+
summation=summation+a[i,k]*x[j,k]
57+
58+
x_new[j,i]=(a[i,n]-summation)/a[i,i] #Determining the values of unknown variables
59+
if j>0:
60+
x[j,i]=x_new[j,i]*relaxation+(1-relaxation)*x[j-1,i] #Determining the values of unknown variables
61+
if j==0:
62+
x[j,i]=x_new[j,i]
63+
64+
#Error calculation
65+
if j>0:
66+
rel_err[j,i]=((x[j,i]-x[j-1,i])/x[j,i])*100
67+
E[i]=rel_err[j,i]
68+
69+
if j>0:
70+
Q=brcond_Seidel(E,err,n)
71+
72+
if Q==1:
73+
break
74+
75+
if j==ite-1:
76+
break
77+
78+
x[j+1,:]=x[j,:]
79+
80+
num_of_iter=j
81+
X=x[j,:]
82+
83+
print('The values of the unknown variables are respectively:')
84+
print(X)
85+
86+
wb = Workbook()
87+
88+
# add_sheet is used to create sheet.
89+
sheet1 = wb.add_sheet('Sheet 1')
90+
91+
#writing on excel
92+
sheet1.write(0,n,'Gauss')
93+
sheet1.write(0,n+1,'Seidel')
94+
sheet1.write(1,0,'Number of iteration')
95+
96+
for i in range(1,n+1):
97+
sheet1.write(1,i,'x_'+str(i))
98+
99+
for i in range(n+1,2*n+1):
100+
sheet1.write(1,i,'Relative error of x_'+str(i-n))
101+
102+
for i in range(num_of_iter+1):
103+
104+
sheet1.write(i+2,0,itern[i])
105+
for j in range(n):
106+
sheet1.write(i+2,1+j,x[i,j])
107+
sheet1.write(i+2,n+1+j,rel_err[i,j])
108+
109+
sheet1.write(i+4,0,'The')
110+
sheet1.write(i+4,1,'unknown')
111+
sheet1.write(i+4,2,'values')
112+
sheet1.write(i+4,3,'are:')
113+
for k in range(n):
114+
sheet1.write(i+4,k+4,X[k])
115+
116+
#save the excel file
117+
wb.save('xlwt example.xls')
118+
119+
#Result Verification
120+
for i in range(n):
121+
summation=0
122+
for j in range(n):
123+
summation=summation+a[i,j]*X[j]
124+
125+
p[i]=summation-a[i,j+1]
126+
127+
#The implementation is corrct if verification results are all zero
128+
print('The verification results are:')
129+
print(p)
130+
print('The implementation is corrct if verification results are all zero')

0 commit comments

Comments
 (0)