Week 04


In [55]:
%matplotlib notebook
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.pyplot import *
from numpy import *

In [56]:
from numpy.linalg import solve, inv, det

In [57]:
A = array(([3.0, -0.1, -0.2], [0.1, -7.0, -0.3], [0.3, -0.2, -10.0]))
b = array([7.85, -19.3, 71.4])

print('A = \n', A)
print('b = ', b)

print('Solve Ax = b')
x = solve(A, b)
print('x = ', x)


A = 
 [[  3.   -0.1  -0.2]
 [  0.1  -7.   -0.3]
 [  0.3  -0.2 -10. ]]
b =  [  7.85 -19.3   71.4 ]
Solve Ax = b
x =  [ 2.2441941   3.09497021 -7.13457358]

In [58]:
print('Solve x = dot(inv(A), b)')
x = dot(inv(A), b)
print('x = ', x)


Solve x = dot(inv(A), b)
x =  [ 2.2441941   3.09497021 -7.13457358]

In [59]:
A = array(([3.0, 1.0], [8.0, 6.0], [0, 4]))
b = array(([5.0, 9.0], [7.0, 2.0]))

dot(X, Y)


Out[59]:
array([[ 22.,  29.],
       [ 82.,  84.],
       [ 28.,   8.]])

In [103]:
def gaussian(A, b):
    
    A = A.copy()
    b = b.copy()
    N = len(b)
    x = zeros(N)
    
    # Step 1: Forward elimination
    for k in range(0, N - 1):
        for i in range(k + 1, N):
            factor = A[i, k] / A[k, k]
            for j in range(N):
                A[i, j] = A[i, j] - factor * A[k, j]
                
            b[i] = b[i] - factor * b[k]
    
    # Step 2: Backward substitution
    x[N - 1] = b[N - 1] / A[N - 1, N - 1]
    for i in range(N - 2, -1, -1):
        sum = b[i]
        for j in range(i + 1, N):
            sum = sum - A[i, j] * x[j]
        x[i] = sum / A[i, i]
    
    return (x)

In [ ]:


In [109]:
A = array(([3.0, -0.1, -0.2], [0.1, -7.0, -0.3], [0.3, -0.2, -10.0]))
b = array([7.85, -19.3, 71.4])
print("Gaussian: \n", gaussian(A, b))
print("\nA: \n", A)
print("\nb: \n", b)


Gaussian: 
 [ 2.2441941   3.09497021 -7.13457358]

A: 
 [[  3.   -0.1  -0.2]
 [  0.1  -7.   -0.3]
 [  0.3  -0.2 -10. ]]

b: 
 [  7.85 -19.3   71.4 ]

In [113]:
def gaussianPivot(A, b):
    
    A = A.copy()
    b = b.copy()
    N = len(b)
    x = zeros(N)
    
    # Step 1: Forward elimination
    for k in range(0, N - 1):
        
        # Pivoting
        r = argmax(abs(A[k:, k])) + k
        
        # Swap only if r != k
        if r != k:
            # Swap A elements
            temp = A[k, :].copy()
            A[k, :] = A[r, :]
            A[r, :] = temp

            # Swap B elements
            temp = b[k].copy()
            b[k] = b[r]
            b[r] = temp
        
        for i in range(k + 1, N):
            factor = A[i, k] / A[k, k]
            for j in range(N):
                A[i, j] = A[i, j] - factor * A[k, j]
                
            b[i] = b[i] - factor * b[k]
    
    # Step 2: Backward substitution
    x[N - 1] = b[N - 1] / A[N - 1, N - 1]
    for i in range(N - 2, -1, -1):
        sum = b[i]
        for j in range(i + 1, N):
            sum = sum - A[i, j] * x[j]
        x[i] = sum / A[i, i]
    
    return (x)

In [114]:
A = array(([1, 2, 3], [0, 1, 3], [0, -7, 6]))
argmax(abs(A[1:, 1])) + 1


Out[114]:
2