Professional Documents
Culture Documents
[1]: [[3.0, -0.1, -0.2], [0.1, 7.0, -0.3], [0.3, -0.2, -10.0]]
[2]: Matrix_B = [
[7.85],
[-19.3],
[71.4]
]
Matrix_B
[[ 3. -0.1 -0.2]
[ 0.1 7. -0.3]
[ 0.3 -0.2 -10. ]]
[[ 7.85]
[-19.3 ]
[ 71.4 ]]
1
1.1.2 Forward Elimination ( Manually going diagonally )
Matrix_A = [
[3.0, -0.1, -0.2],
[0.1, 7.0, -0.3],
[0.3, -0.2, -10.0]
]
n,m = np.shape(np.array(Matrix_A))
Matrix_A2 = [Matrix_A[0]]
k = 0
for i in range(k + 1,n):
a = []
for j in range(m):
frac = Matrix_A[i][k] / Matrix_A[k][k]
a_ij = Matrix_A[i][j] - frac * Matrix_A[k][j]
a.append(a_ij)
Matrix_A2.append(a)
print(np.array(Matrix_A2))
print()
k = 1
for i in range(k + 1,n):
a = []
for j in range(m):
frac = Matrix_A2[i][k] / Matrix_A2[k][k]
a_ij = Matrix_A2[i][j] - frac * Matrix_A2[k][j]
a.append(a_ij)
Matrix_A3.append(a)
print(np.array(Matrix_A3))
[[ 3. -0.1 -0.2 ]
[ 0. 7.00333333 -0.29333333]
[ 0. -0.19 -9.98 ]]
[[ 3. -0.1 -0.2 ]
[ 0. 7.00333333 -0.29333333]
[ 0. 0. -9.98795812]]
2
1.1.3
1.2 Forward Elimination
[5]: import numpy as np
Matrix_A = [
[3.0, -0.1, -0.2],
[0.1, 7.0, -0.3],
[0.3, -0.2, -10.0]
]
Matrix_B = [
[7.85],
[-19.3],
[71.4]
]
n,m = np.shape(np.array(Matrix_A))
for k in range(n-1): ␣
↪ # k goes diagonaly
for j in range(k+1,n): ␣
↪ # j goes downwards
frac = Matrix_A[j][k] / Matrix_A[k][k]
for i in range(k,m): ␣
↪ # i goes sideways
Matrix_A[j][i] = Matrix_A[j][i] - frac * Matrix_A[k][i]
print(np.array(Matrix_A),"\n")
[[ 3. -0.1 -0.2 ]
[ 0. 7.00333333 -0.29333333]
[ 0.3 -0.2 -10. ]]
[[ 3. -0.1 -0.2 ]
[ 0. 7.00333333 -0.29333333]
[ 0. -0.19 -9.98 ]]
[[ 3. -0.1 -0.2 ]
[ 0. 7.00333333 -0.29333333]
3
[ 0. 0. -9.98795812]]
[[ 3. -0.1 -0.2 ]
[ 0. 7.00333333 -0.29333333]
[ 0. 0. -9.98795812]]
Matrix B is
[[ 7.85 ]
[-19.56166667]
[ 70.08429319]]
for i in range(n-2,-1,-1): #␣
↪reverse order
summ = 0
for j in range(i+1,m):
summ = summ + Matrix_A[i][j]*Matrix_X[j][0]
print("sum = ",summ,"\n")
Matrix_X[i][0] = (Matrix_B[i][0]-summ)/Matrix_A[i][i]
print(np.array(Matrix_X))
print()
Matrix X -
[[ 0. ]
[ 0. ]
[-7.01687896]]
sum = 2.0582844961646662
[[ 0. ]
[-3.08709441]
[-7.01687896]]
4
sum = 0.30870944068773926
sum = 1.7120852335272845
[[ 2.04597159]
[-3.08709441]
[-7.01687896]]
C = np.dot(np.array(Matrix_A),np.array(Matrix_X))
print("Product of A and X =\n\n",C,'\n\nB Matrix = \n\n',np.array(Matrix_B))
Product of A and X =
[[ 7.85]
[-19.3 ]
[ 71.4 ]]
B Matrix =
[[ 7.85]
[-19.3 ]
[ 71.4 ]]
3 Pivoting
[8]: # I am using numpy array this time instead of list ........ Both are mutable i.
↪e they can be modified unlike tuples.
import numpy as np
_A_ = np.array([
5
[0, -0.1, -0.2],
[0.1, 0, -0.3],
[0.3, -0.2, -10.0]
])
_B_ = np.array([
[7.85],
[-19.3],
[71.4]
])
n,m = np.shape(_A_)
for k in range(n-1):
for j in range(k+1,n):
frac = _A_[j,k] /_A_[k,k]
for i in range(k,m):
_A_[j,i] = _A_[j,i] - frac *_A_[k,i]
print(np.array(_A_),"\n")
[[ 0. -0.1 -0.2]
[ nan inf inf]
[ 0.3 -0.2 -10. ]]
[[ 0. -0.1 -0.2]
[ nan inf inf]
[ nan inf inf]]
[[ 0. -0.1 -0.2]
[ nan inf inf]
[ nan nan nan]]
[[ 0. -0.1 -0.2]
[ nan inf inf]
[ nan nan nan]]
Matrix B is
6
[[ 7.85]
[-19.3 ]
[ nan]]
C:\Users\asus\AppData\Local\Temp\ipykernel_3504\1876914903.py:21:
RuntimeWarning: divide by zero encountered in scalar divide
frac = _A_[j,k] /_A_[k,k]
C:\Users\asus\AppData\Local\Temp\ipykernel_3504\1876914903.py:23:
RuntimeWarning: invalid value encountered in scalar multiply
_A_[j,i] = _A_[j,i] - frac *_A_[k,i]
C:\Users\asus\AppData\Local\Temp\ipykernel_3504\1876914903.py:21:
RuntimeWarning: invalid value encountered in scalar divide
frac = _A_[j,k] /_A_[k,k]
import numpy as np
_A_ = [
[0, -0.2, -0.2],
[0.2, 0, -0.3],
[0.3, -0.1, 0]
]
A = np.array(_A_).copy()
_B_ = [
[7.85],
[-19.34],
[71.4]
]
B = np.array(_B_).copy()
n,m = np.shape(np.array(_A_))
def Pivot(_A_,_B_,k):
for j in range(k+1,n):
if abs(_A_[j][k]) > abs(_A_[k][k]):
_A_[j],_A_[k] = _A_[k],_A_[j]
_B_[j],_B_[k] = _B_[k],_B_[j]
return
for k in range(n-1):
for j in range(k+1,n):
7
if _A_[k][k] < 1e-5: # Pivoting␣
↪inside j loop
print(f"\nOrig A = \n\n{np.array(_A_)}")
Pivot(_A_,_B_,k)
print(f"\nPivoted A = \n\n{np.array(_A_)}\n")
Matrix_X = [
[0],
[0],
[0]
]
Matrix_X[n-1][0] = _B_[n-1][0]/_A_[n-1][n-1]
print("\n\n�Matrix X�\n\n",np.array(Matrix_X))
print()
for k in range(n-2,-1,-1):
summ = 0
for i in range(k+1,n):
summ = summ + _A_[k][i]*Matrix_X[i][0]
Matrix_X[k][0] = (_B_[k][0] - summ)/_A_[k][k]
print("\n\n Matrix X = \n\n",np.array(Matrix_X))
print()
C = np.dot(np.array(A),np.array(Matrix_X))
print("---------------------------------------\n\nProduct of A and X␣
↪=\n\n",C,'\n\nB Matrix = \n\n',np.array(B))
Orig A =
[[ 0. -0.2 -0.2]
[ 0.2 0. -0.3]
8
[ 0.3 -0.1 0. ]]
Pivoted A =
[[ 0.3 -0.1 0. ]
[ 0. -0.2 -0.2]
[ 0.2 0. -0.3]]
Orig A =
[[ 0.3 -0.1 0. ]
[ 0. -0.2 -0.2 ]
[ 0. 0.06666667 -0.3 ]]
Pivoted A =
[[ 0.3 -0.1 0. ]
[ 0. -0.2 -0.2 ]
[ 0. 0.06666667 -0.3 ]]
[[ 0.3 -0.1 0. ]
[ 0. -0.2 -0.2 ]
[ 0. 0. -0.36666667]]
Matrix B is
[[ 71.4 ]
[ 7.85 ]
[-64.32333333]]
�Matrix X�
[[ 0. ]
[ 0. ]
[175.42727273]]
Matrix X =
[[ 0. ]
[-214.67727273]
[ 175.42727273]]
9
Matrix X =
[[ 166.44090909]
[-214.67727273]
[ 175.42727273]]
---------------------------------------
Product of A and X =
[[ 7.85]
[-19.34]
[ 71.4 ]]
B Matrix =
[[ 7.85]
[-19.34]
[ 71.4 ]]
3.2
A = [
[3,-0.1,-0.2],
[0.1,7,-0.3],
[0.3,-0.2,-10]
]
A_=np.array(A).copy()
B = [
[7.85],
[-19.3],
[71.4]
]
B_=np.array(B).copy()
n,m = np.shape(np.array(A))
10
for k in range(n): # Notice I have changed the range of k from␣
↪(0,n-1) to (0,n) for norm. It will not affect j loop.
B[k][0] = B[k][0]/A[k][k]
A[k][k] = A[k][k]/A[k][k]
print(np.array(A))
print("\n\nMatrix B -\n\n",np.array(B),"\n\
——————————————————————————————————————————\n\n")
for j in range(k+1,n): ␣
↪ # forward elimination
frac = A[j][k]/A[k][k]
for i in range(k,m):
A[j][i] = A[j][i]-frac*A[k][i]
B[j][0] = B[j][0]-frac*B[k][0]
print("\n\n�Matrix A�\n\n",np.array(A),
"\n\n�Matrix B�\n\n",np.array(B),
"\n----------------------------------------\n\n")
for r in range(p,-1,-1):
A[q][r] = A[q][r] - fract*A[p][r]
B[q][0]=B[q][0]-fract*B[p][0]
print(f"\n{np.array(A)}")
print(f"\n\nMatrix B = Matrix X =\n\n{np.array(B)}\n")
X = B
11
C = np.dot(np.array(A_),np.array(X)) ␣
↪ # Check AX=B
print("\n=========================================\
\n\nProduct of A and X =\n\n",C,'\n\nB Matrix = \n\n',np.array(B_))
if (np.array(C)).all()==(np.array(B)).all():
print("\n ���")
else:
print("\n �")
[[ 1. -0.03333333 -0.06666667]
[ 0.1 7. -0.3 ]
[ 0.3 -0.2 -10. ]]
Matrix B -
[[ 2.61666667]
[-19.3 ]
[ 71.4 ]]
——————————————————————————————————————————
�Matrix A�
[[ 1. -0.03333333 -0.06666667]
[ 0. 7.00333333 -0.29333333]
[ 0.3 -0.2 -10. ]]
�Matrix B�
[[ 2.61666667]
[-19.56166667]
[ 71.4 ]]
----------------------------------------
�Matrix A�
12
[[ 1. -0.03333333 -0.06666667]
[ 0. 7.00333333 -0.29333333]
[ 0. -0.19 -9.98 ]]
�Matrix B�
[[ 2.61666667]
[-19.56166667]
[ 70.615 ]]
----------------------------------------
[[ 1. -0.03333333 -0.06666667]
[ 0. 1. -0.04188482]
[ 0. -0.19 -9.98 ]]
Matrix B -
[[ 2.61666667]
[-2.79319372]
[70.615 ]]
——————————————————————————————————————————
�Matrix A�
[[ 1. -0.03333333 -0.06666667]
[ 0. 1. -0.04188482]
[ 0. 0. -9.98795812]]
�Matrix B�
[[ 2.61666667]
[-2.79319372]
[70.08429319]]
----------------------------------------
[[ 1. -0.03333333 -0.06666667]
13
[ 0. 1. -0.04188482]
[ 0. 0. 1. ]]
Matrix B -
[[ 2.61666667]
[-2.79319372]
[-7.01687896]]
——————————————————————————————————————————
[[ 1. -0.03333333 -0.06666667]
[ 0. 1. 0. ]
[ 0. 0. 1. ]]
[[ 1. -0.03333333 0. ]
[ 0. 1. 0. ]
[ 0. 0. 1. ]]
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
Matrix B = Matrix X =
[[ 2.04597159]
[-3.08709441]
[-7.01687896]]
=========================================
Product of A and X =
[[ 7.85]
[-19.3 ]
[ 71.4 ]]
B Matrix =
[[ 7.85]
[-19.3 ]
[ 71.4 ]]
14
���
[ ]:
[ ]:
[ ]:
[ ]:
[ ]:
15