ALl_codes
ALl_codes
NUMERICAL ANALYSIS”.
M. AUTH
1. Chapter 1
1.1. Program: Example 1.2.
# Python Code for Example 1.2 on page 6.
import numpy as np
import matplotlib.pyplot as plt
from math import sin, cos
x0 = 1.2
f0 = sin(x0)
fp = cos(x0)
i = np.r_[-20:0.5:0.5]
h = 10**i
err = np.abs(fp - (np.sin(x0+h) - f0)/h)
d_err = f0/2*h
plt.loglog(h,err)
plt.loglog(h,d_err)
x0 = 1.2
f0 = np.sin(x0)
fp = np.cos(x0)
i = np.arange(-20,0,0.5)
h = 10**i
err = np.abs(fp - (np.sin(x0 + h) -f0)/h)
d_err = f0/2*h
loglog(h,err)
loglog(h,d_err,"k--")
show()
1
2 M. AUTH
import numpy as np
x = 7/2
c = np.array([5/2, -11, 0, 2.2, -3], float)
n = 4
p = c[n]
for j in range(n-1,-1,-1):
p = p*x + c[j]
print(str(round(p,3)))
2. Chapter 3
2.1. Program: BISECTION.
import numpy as np
from math import cos, exp
def f(x):
return exp(x) + x - 7
for k in range(18):
x = (a+b)/2 # approximate root
if f(a)*f(x) < 0:
b = x
else:
a = x
err_bnd = b - a
print(k,str(round(x,12)),str(round(err_bnd,8)))
PYTHON CODE FROM TEXT ”A FIRST COURSE IN NUMERICAL ANALYSIS”. 3
import numpy as np
def f(x):
return x**3 - 30*x**2 + 2552
def g(x):
return log(7-x)
x = 1 # initial guess
print(str(round(0)),str(round(x,6)))
def f(x):
return x**2 - 2
def fPrime(x):
return 2*x
x = 1 # initial guess
print(str(round(0)),str(round(x,14)))
def f(x):
return x**2 - 2
a = 0, b = 1 # initial guesses
print(str(round(0)),str(round(a,8)))
3. Chapter 5
3.1. Program: Gaussian Elimination Start.
import numpy as np
A = np.array([[1, 2, 1],
[3, 8 , 1],
[0, 4, 1]])
n = 3 # size of A is 3x3
print(A)
import numpy as np
A = np.array([[1, 2, 1],
[3, 8 , 1],
[0, 4, 1]])
n = 3 # size of A is 3x3
print(A)
6 M. AUTH
import numpy as np
A = np.array([[1, 2, 1],
[3, 8 , 1],
[0, 4, 1]])
n = 3 # size of A is 3x3
L = np.identity(n)
print(A)
print(L)
U = np.array([[1, 2, 1],
[0, 2 , -2],
[0, 0, 5]])
n = 3 # size of A is 3x3
4. Chapter 6
Write your own code to do QR factorization using Gram-Schmidt. You need not
write code to do QR using Householder reflectors. You need only be able to use
PYTHON CODE FROM TEXT ”A FIRST COURSE IN NUMERICAL ANALYSIS”. 7
5. Chapter 7
5.1. Program: Jacobi.
import numpy as np
for k in range(num_steps):
r = b - A@x
x = x + np.linalg.inv(D)@r
print(k+1, x)
return x
# below are the matrix and vectors to input into my Jacobi function.
A = np.array([[3,1,-1],
[1,-4,2],
[-2,-1,5]])
b = np.array([3,-1,2])
x = np.array([0,0,0]) # initial guess for Jacobi
Jacobi(A, b, x, 11)
for k in range(num_steps):
r = b - A@x
x = x + np.linalg.inv(E)@r
print(k+1, x)
return x
# below are the matrix and vectors to input into my Gauss_Seidel function.
A = np.array([[3,1,-1],
[1,-4,2],
8 M. AUTH
[-2,-1,5]])
b = np.array([3,-1,2])
x = np.array([0,0,0]) # initial guess for Gauss_Seidel
Gauss_Seidel(A, b, x, 11)
for k in range(num_steps):
r = b - A@x
x = x + omega*np.linalg.inv((1 - omega)*(D) + omega*E)@r
print(k, x)
return x
# below are the matrix and vectors to input into my SOR function.
A = np.array([[3,1,-1],
[1,-4,2],
[-2,-1,5]])
b = np.array([3,-1,2])
x = np.array([0,0,0]) # initial guess
SOR(A, b, x, 11)
6. Chapter 8
6.1. Program: Power Method.
#ALGORITHM: Power Method p. 222.
import numpy as np
for k in range(16):
v = A@v
PYTHON CODE FROM TEXT ”A FIRST COURSE IN NUMERICAL ANALYSIS”. 9
v = v / np.linalg.norm(v)
lam = np.dot(v,A@v)
print(k+1, v, lam)
for k in range(7):
c = np.linalg.solve(L,P@v) # use numpy’s solve command (F.S.)
v = np.linalg.solve(U,c) # use numpy’s solve command (B.S.)
v = v / np.linalg.norm(v)
lam = np.dot(v,A@v)
print(k+1, v, lam)
for k in range(9):
c = np.linalg.solve(L,P@v) # use numpy’s solve command (F.S.)
v = np.linalg.solve(U,c) # use numpy’s solve command (B.S.)
v = v / np.linalg.norm(v)
lam = np.dot(v,A@v)
10 M. AUTH
print(k+1, v, lam)
7. Chapter 9
7.1. Newton’s Method.
#ALGORITHM: Newton’s Method for Systems p.254
import numpy as np
def J(x):
"""J is the Jacobian matrix of F."""
return np.array([[2*x[0] - 2, -1],
[2*x[0], 2*x[1]]])
Newton_method(F,J,x,5)
8. Chapter 14
8.1. Derivation approximation by order.
# Python Code for Example 14.1 on page 412
import numpy as np
import matplotlib.pyplot as plt
from math import exp
x0 = 0
f0 = exp(x0)
i = np.r_[-8:0.5:0.5]
h = 10**i
err1 = np.abs((np.exp(x0+h) - f0)/h - 1) #order 1 error
err2 = np.abs((np.exp(x0+h) - np.exp(x0-h))/(2*h) - 1) #order 2 error
err4 = np.abs((np.exp(x0-2*h) - 8*np.exp(x0-h) + 8*np.exp(x0+h) - np.exp(x0+2*h))/(12*h) - 1)
plt.loglog(h,err1)
plt.loglog(h,err2)
PYTHON CODE FROM TEXT ”A FIRST COURSE IN NUMERICAL ANALYSIS”. 11
plt.loglog(h,err4)
plt.show()
8.2. Richardson Extrapolation.
from math import exp
# approximate the derivative to f at x0
def f(x):
return exp(x)
x0 = 0
for k in range(1,6):
h = 10**(-k)
fPrime1 = (f(x0+h) - f(x0-h))/(2*h) # 3pt approximate derivative
fPrime2 = (f(x0+h/2) - f(x0-h/2))/(2*(h/2)) # 2nd 3pt approximate derivative
fPrime_better = (4*fPrime2 - fPrime1)/3 # mix of two 3pt approximates
err = abs(fPrime_better - 1) # absolute error
print(k,h,err)
9. Chapter 15
9.1. trapezoid rule.
# Code from textbook "Computational Physics" by Mark Newman
def f(x):
return x**4 - 2*x + 1
N = 10
a = 0.0
b = 2.0
h = (b-a)/N
s = 0.5*f(a) + 0.5*f(b)
for k in range(1,N):
s += f(a+k*h)
print(h*s)
10. Chapter 16
10.1. Euler’s Method.
# Code from textbook "Computational Physics" by Mark Newman
def f(x,t):
return -x**3 + sin(t)
plot(tpoints,xpoints)
xlabel("t")
ylabel("x(t)")
show()
10.2. Midpoint.
# Code from textbook "Computational Physics" by Mark Newman
def f(x,t):
return -x**3 + sin(t)
a = 0.0
b = 10.0
N = 10
h = (b-a)/N
tpoints = arange(a,b,h)
xpoints = []
x = 0.0
for t in tpoints:
xpoints.append(x)
k1 = h*f(x,t)
k2 = h*f(x+0.5*k1,t+0.5*h)
x += k2
plot(tpoints,xpoints)
xlabel("t")
ylabel("x(t)")
show()
10.3. RK4.
# Code from textbook "Computational Physics" by Mark Newman
from math import sin
PYTHON CODE FROM TEXT ”A FIRST COURSE IN NUMERICAL ANALYSIS”. 13
def f(x,t):
return -x**3 + sin(t)
a = 0.0
b = 10.0
N = 10
h = (b-a)/N
tpoints = arange(a,b,h)
xpoints = []
x = 0.0
for t in tpoints:
xpoints.append(x)
k1 = h*f(x,t)
k2 = h*f(x+0.5*k1,t+0.5*h)
k3 = h*f(x+0.5*k2,t+0.5*h)
k4 = h*f(x+k3,t+h)
x += (k1+2*k2+2*k3+k4)/6
plot(tpoints,xpoints)
xlabel("t")
ylabel("x(t)")
show()
References