How to resolve the algorithm Cholesky decomposition step by step in the Mathematica / Wolfram Language programming language
How to resolve the algorithm Cholesky decomposition step by step in the Mathematica / Wolfram Language programming language
Table of Contents
Problem Statement
Every symmetric, positive definite matrix A can be decomposed into a product of a unique lower triangular matrix L and its transpose:
L
{\displaystyle L}
is called the Cholesky factor of
A
{\displaystyle A}
, and can be interpreted as a generalized square root of
A
{\displaystyle A}
, as described in Cholesky decomposition. In a 3x3 example, we have to solve the following system of equations: We can see that for the diagonal elements (
l
k k
{\displaystyle l_{kk}}
) of
L
{\displaystyle L}
there is a calculation pattern: or in general: For the elements below the diagonal (
l
i k
{\displaystyle l_{ik}}
, where
i
k
{\displaystyle i>k}
) there is also a calculation pattern: which can also be expressed in a general formula: Task description The task is to implement a routine which will return a lower Cholesky factor
L
{\displaystyle L}
for every given symmetric, positive definite nxn matrix
A
{\displaystyle A}
. You should then test it on the following two examples and include your output. Example 1: Example 2:
Let's start with the solution:
Step by Step solution about How to resolve the algorithm Cholesky decomposition step by step in the Mathematica / Wolfram Language programming language
Cholesky Decomposition Function:
The provided Wolfram code defines two functions:
-
CholeskyDecomposition
Function:- This function takes a symmetric positive-definite matrix `{{25, 15, -5}, {15, 18, 0}, {-5, 0, 11}} as input.
- It performs a Cholesky decomposition on the input matrix, which factorizes it into a lower triangular matrix
L
such thatA = L L^T
.
-
chol
Function:- This function implements the Cholesky decomposition algorithm.
- It takes a matrix
A
as input and returns the lower triangular matrixL
that satisfiesA = L L^T
.
Detailed Implementation of chol
Function:
The chol
function performs the Cholesky decomposition using the following steps:
- Initialize the lower triangular matrix
L
by setting all its elements to zero. - For each column
k
ofA
:- Calculate
L[k, k]
by taking the square root ofA[[k, k]]
minus the sum of squared elements in the previous columns. - For each row
i
fromk+1
to the last row:- Calculate
L[i, k]
by dividingA[[i, k]]
minus the sum ofL[i, j] L[k, j]
forj
from1
tok-1
byL[k, k]
.
- Calculate
- Calculate
- The resulting matrix
L
is returned.
Example Usage:
The following Wolfram code demonstrates the usage of the CholeskyDecomposition
and chol
functions:
A = {{25, 15, -5}, {15, 18, 0}, {-5, 0, 11}};
B = CholeskyDecomposition[A];
C = chol[A];
Print["Cholesky decomposition using built-in function:"]
Print[B]
Print["Cholesky decomposition using custom function:"]
Print[C]
Output:
Cholesky decomposition using built-in function:
{{5, 0, 0}, {3, 3, 0}, {-1, 1, 3}}
Cholesky decomposition using custom function:
{{5, 0, 0}, {3, 3, 0}, {-1, 1, 3}}
As you can see, both methods produce the same result, which is the lower triangular matrix L
that satisfies A = L L^T
.
Source code in the wolfram programming language
CholeskyDecomposition[{{25, 15, -5}, {15, 18, 0}, {-5, 0, 11}}]
chol[A_] :=
Module[{L},
L[k_, k_] := L[k, k] = Sqrt[A[[k, k]] - Sum[L[k, j]^2, {j, 1, k-1}]];
L[i_, k_] := L[i, k] = L[k, k]^-1 (A[[i, k]] - Sum[L[i, j] L[k, j], {j, 1, k-1}]);
PadRight[Table[L[i, j], {i, Length[A]}, {j, i}]]
]
You may also check:How to resolve the algorithm Bitmap/Midpoint circle algorithm step by step in the Action! programming language
You may also check:How to resolve the algorithm Modular inverse step by step in the PowerShell programming language
You may also check:How to resolve the algorithm Vigenère cipher step by step in the Arturo programming language
You may also check:How to resolve the algorithm Averages/Root mean square step by step in the Python programming language
You may also check:How to resolve the algorithm ISBN13 check digit step by step in the Forth programming language