平方根法(Cholesky Decomposition)是一种专门用于对称正定矩阵的分解方法。它将矩阵分解为一个下三角矩阵及其转置的乘积,即 ( A = LL^T ),其中 ( L ) 是一个下三角矩阵。
下面是使用Python实现Cholesky分解并求解线性方程组的代码。
实现步骤
Cholesky分解:将对称正定矩阵 ( A ) 分解为下三角矩阵 ( L ) 和其转置矩阵 ( L^T )。
前向替代(Forward Substitution):解决方程 ( Ly = b )。
回代(Backward Substitution):解决方程 ( L^Tx = y )。
代码实现
import numpy as np
def cholesky_decomposition(A):
"""
Perform Cholesky decomposition of matrix A.
Parameters:
A : 2D list or numpy array
Symmetric positive-definite matrix
Returns:
L : numpy array
Lower triangular matrix such that A = L * L.T
"""
n = len(A)
L = np.zeros_like(A)
for i in range(n):
for j in range(i + 1):
sum_k = sum(L[i][k] * L[j][k] for k in range(j))
if i == j:
L[i][j] = np.sqrt(A[i][i] - sum_k)
else:
L[i][j] = (A[i][j] - sum_k) / L[j][j]
return L
def forward_substitution(L, b):
"""
Perform forward substitution to solve Ly = b.
Parameters:
L : 2D list or numpy array
Lower triangular matrix
b : 1D list or numpy array
Right-hand side vector
Returns:
y : numpy array
Solution vector
"""
n = len(b)
y = np.zeros(n)
for i in range(n):
y[i] = (b[i] - sum(L[i][j] * y[j] for j in range(i))) / L[i][i]
return y
def backward_substitution(L_T, y):
"""
Perform backward substitution to solve L.T x = y.
Parameters:
L_T : 2D list or numpy array
Transpose of the lower triangular matrix
y : 1D list or numpy array
Solution vector from forward substitution
Returns:
x : numpy array
Solution vector
"""
n = len(y)
x = np.zeros(n)
for i in range(n - 1, -1, -1):
x[i] = (y[i] - sum(L_T[i][j] * x[j] for j in range(i + 1, n))) / L_T[i][i]
return x
def solve_cholesky_decomposition(A, b):
"""
Solve the system of linear equations Ax = b using Cholesky Decomposition.
Parameters:
A : 2D list or numpy array
Symmetric positive-definite matrix
b : 1D list or numpy array
Right-hand side vector
Returns:
x : numpy array
Solution vector
"""
L = cholesky_decomposition(A)
y = forward_substitution(L, b)
x = backward_substitution(L.T, y)
return x
# Example usage
A = np.array([[4, 12, -16],
[12, 37, -43],
[-16, -43, 98]], dtype=float)
b = np.array([1, 2, 3], dtype=float)
x = solve_cholesky_decomposition(A, b)
print("Solution:", x)
代码说明
Cholesky分解(cholesky_decomposition函数):
对称正定矩阵 ( A ) 被分解为下三角矩阵 ( L ) 和其转置矩阵 ( L^T )。
前向替代(forward_substitution函数):
使用下三角矩阵 ( L ) 和右端向量 ( b ) 求解中间变量 ( y )。
回代(backward_substitution函数):
使用下三角矩阵的转置 ( L^T ) 和中间变量 ( y ) 求解最终解 ( x )。
求解线性方程组(solve_cholesky_decomposition函数):
综合上述步骤,完成Cholesky分解并求解线性方程组。
示例
给定对称正定矩阵 (A) 和右端向量 (b):
A = [[4, 12, -16],
[12, 37, -43],
[-16, -43, 98]]
b = [1, 2, 3]