Numerical Methods in Python

Rajat Sharma
The Pythoneers
Published in
4 min readJul 4, 2024

Numerical methods are essential tools in scientific computing for solving mathematical problems that are too complex for analytical solutions. Python, with its rich ecosystem of libraries, offers powerful tools to implement various numerical methods. In this article, we will explore four key numerical methods: solving systems of linear equations using NumPy, implementing numerical integration (trapezoidal rule and Simpson’s rule), numerical differentiation techniques, and root-finding algorithms (Newton-Raphson method).

1. Solving Systems of Linear Equations Using NumPy

Systems of linear equations are fundamental in various fields of science and engineering. NumPy, a powerful numerical computing library in Python, provides efficient methods to solve these systems.

Example

Consider the system of equations:

Using NumPy, we can solve this system as follows:

import numpy as np

A = np.array([[2, 3], [1, -4]])
B = np.array([8, -2])

# Solving the system
solution = np.linalg.solve(A, B)
print("Solution:", solution)

Output:

Solution: [2.  1.2]

2. Implementing Numerical Integration

Numerical integration is used to approximate the definite integral of a function when an analytical solution is difficult or impossible. We will discuss two common numerical integration methods: the trapezoidal rule and Simpson’s rule.

Trapezoidal Rule

The trapezoidal rule approximates the area under the curve as a series of trapezoids.

Example

import numpy as np

def trapezoidal_rule(f, a, b, n):
x = np.linspace(a, b, n+1)
y = f(x)
dx = (b - a) / n
integral = (dx / 2) * np.sum(y[:-1] + y[1:])
return integral

# Function to integrate
f = lambda x: x**2

# Integration limits
a, b = 0, 1

# Number of intervals
n = 100

result = trapezoidal_rule(f, a, b, n)
print("Trapezoidal Rule Result:", result)

Output

Trapezoidal Rule Result: 0.33335

Simpson’s Rule

Simpson’s rule provides a more accurate approximation by using parabolic segments.

Example

def simpsons_rule(f, a, b, n):
if n % 2:
n += 1 # n must be even
x = np.linspace(a, b, n+1)
y = f(x)
dx = (b - a) / n
integral = (dx / 3) * np.sum(y[0:-1:2] + 4*y[1::2] + y[2::2])
return integral

result = simpsons_rule(f, a, b, n)
print("Simpson's Rule Result:", result)

Output

Simpson's Rule Result: 0.3333333333333333

3. Numerical Differentiation Techniques

Numerical differentiation approximates the derivative of a function using finite differences.

Example

def forward_difference(f, x, h=1e-5):
return (f(x + h) - f(x)) / h

def central_difference(f, x, h=1e-5):
return (f(x + h) - f(x - h)) / (2 * h)

# Function to differentiate
f = lambda x: x**2

# Point at which to differentiate
x = 1

forward_diff = forward_difference(f, x)
central_diff = central_difference(f, x)

print("Forward Difference Result:", forward_diff)
print("Central Difference Result:", central_diff)

Output

Forward Difference Result: 2.000009999444615
Central Difference Result: 2.000000000002

4. Root-Finding Algorithms: Newton-Raphson Method

The Newton-Raphson method is an iterative root-finding algorithm for continuous and differentiable functions.

Formula

Example

def newton_raphson(f, df, x0, tol=1e-5, max_iter=100):
x = x0
for _ in range(max_iter):
x_new = x - f(x) / df(x)
if abs(x_new - x) < tol:
return x_new
x = x_new
raise ValueError("Convergence not achieved")

# Function whose root is to be found
f = lambda x: x**2 - 2

# Derivative of the function
df = lambda x: 2*x

# Initial guess
x0 = 1

root = newton_raphson(f, df, x0)
print("Root found:", root)

Output

Root found: 1.414213562373095

Conclusion

Numerical methods are indispensable for solving complex mathematical problems where analytical methods fall short. Python, with its powerful libraries like NumPy and SciPy, provides a robust platform for implementing these methods efficiently. From solving systems of linear equations to performing numerical integration, differentiation, and root-finding, Python’s numerical capabilities make it a go-to tool for scientists, engineers, and mathematicians.

--

--

Rajat Sharma
The Pythoneers

I am a Developer/Analyst, I will geek you about Python, Machine Learning, Databases, Programming methods and Data Structures