How to resolve the algorithm Cholesky decomposition step by step in the Java programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Cholesky decomposition step by step in the Java 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 Java programming language

Objective:

  • The provided Java code performs a Cholesky factorization on a given square matrix, which is a decomposition of the matrix into its Cholesky factor, a lower triangular matrix with positive diagonal elements.

Implementation Details:

1. Cholesky Factorization Algorithm:

  • The chol method implements the Cholesky factorization algorithm.
  • Input: It takes a square matrix a as input.
  • Output: It returns the lower triangular Cholesky factor of a in a new matrix l.
  • Algorithm:
    • Initializes a lower triangular matrix l with all elements set to 0.
    • Iterates through rows of a:
      • For each row i, calculates the diagonal element l[i][i] as the square root of the difference between a[i][i] and the sum of squared elements in row i of l.
      • For each subsequent column k in row i, calculates l[i][k] as the difference between a[i][k] and the sum of products of elements in rows i and k of l, divided by l[k][k].

2. Main Method:

  • The main method provides two test cases:
    • test1 is a 3x3 matrix.
    • test2 is a 4x4 matrix.
  • For each test case, it calls the chol method to perform the Cholesky factorization and prints the resulting Cholesky factor l.

Example Output:

[[5.0, 0.0, 0.0], [3.0, 3.0, 0.0], [-1.0, 2.0, 3.0]]
[[6.0, 0.0, 0.0, 0.0], [3.6666666666666665, 5.0, 0.0, 0.0], [9.0, 7.333333333333334, 8.0, 0.0], [7.0, 4.666666666666667, 7.5, 4.0]]

Important Notes:

  • This implementation assumes that the input matrix a is positive definite (i.e., symmetric and has positive eigenvalues).
  • If the input matrix is not positive definite, the Cholesky factorization algorithm may not produce valid results.

Source code in the java programming language

import java.util.Arrays;

public class Cholesky {
	public static double[][] chol(double[][] a){
		int m = a.length;
		double[][] l = new double[m][m]; //automatically initialzed to 0's
		for(int i = 0; i< m;i++){
			for(int k = 0; k < (i+1); k++){
				double sum = 0;
				for(int j = 0; j < k; j++){
					sum += l[i][j] * l[k][j];
				}
				l[i][k] = (i == k) ? Math.sqrt(a[i][i] - sum) :
					(1.0 / l[k][k] * (a[i][k] - sum));
			}
		}
		return l;
	}
	
	public static void main(String[] args){
		double[][] test1 = {{25, 15, -5},
							{15, 18, 0},
							{-5, 0, 11}};
		System.out.println(Arrays.deepToString(chol(test1)));
		double[][] test2 = {{18, 22, 54, 42},
							{22, 70, 86, 62},
							{54, 86, 174, 134},
							{42, 62, 134, 106}};
		System.out.println(Arrays.deepToString(chol(test2)));
	}
}

  

You may also check:How to resolve the algorithm Fibonacci word step by step in the Haskell programming language
You may also check:How to resolve the algorithm Balanced brackets step by step in the R programming language
You may also check:How to resolve the algorithm Parameterized SQL statement step by step in the M2000 Interpreter programming language
You may also check:How to resolve the algorithm Old lady swallowed a fly step by step in the Logo programming language
You may also check:How to resolve the algorithm Loops/Infinite step by step in the Octave programming language