#63 · Linear Algebra · Hard
⊣ Solve on deep-ml.comImplement the Conjugate Gradient method for solving a system of linear equations Ax = b, where A is a symmetric positive-definite matrix. Return the solution vector x.
import numpy as np
def conjugate_gradient(A, b, x=None, tol=1e-10, max_iter=1000):
n = len(b)
if x is None:
x = np.zeros(n, dtype=float)
b = b.astype(float)
A = A.astype(float)
r = b - A @ x
p = r.copy()
rs_old = np.dot(r, r)
for i in range(max_iter):
if np.sqrt(rs_old) < tol:
break
Ap = A @ p
alpha = rs_old / np.dot(p, Ap)
x = x + alpha * p
r = r - alpha * Ap
rs_new = np.dot(r, r)
beta = rs_new / rs_old
p = r + beta * p
rs_old = rs_new
return xx (default zeros) and compute the initial residual r = b - Ax.p = r.alpha = r^T r / (p^T A p).x = x + alpha * p.r = r - alpha * A p.p = r + beta * p where beta = r_new^T r_new / r_old^T r_old.