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)
In [58]:
print('Solve x = dot(inv(A), b)')
x = dot(inv(A), b)
print('x = ', x)
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]:
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)
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]: