// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package com.jisuan.Jama; import java.io.Serializable; public class CholeskyDecomposition implements Serializable { private double[][] L; private int n; private boolean isspd; private static final long serialVersionUID = 1L; public CholeskyDecomposition(Matrix var1) { double[][] var2 = var1.getArray(); this.n = var1.getRowDimension(); this.L = new double[this.n][this.n]; this.isspd = var1.getColumnDimension() == this.n; for(int var3 = 0; var3 < this.n; ++var3) { double[] var4 = this.L[var3]; double var5 = 0.0; int var7; for(var7 = 0; var7 < var3; ++var7) { double[] var8 = this.L[var7]; double var9 = 0.0; for(int var11 = 0; var11 < var7; ++var11) { var9 += var8[var11] * var4[var11]; } var4[var7] = var9 = (var2[var3][var7] - var9) / this.L[var7][var7]; var5 += var9 * var9; this.isspd &= var2[var7][var3] == var2[var3][var7]; } var5 = var2[var3][var3] - var5; this.isspd &= var5 > 0.0; this.L[var3][var3] = Math.sqrt(Math.max(var5, 0.0)); for(var7 = var3 + 1; var7 < this.n; ++var7) { this.L[var3][var7] = 0.0; } } } public boolean isSPD() { return this.isspd; } public Matrix getL() { return new Matrix(this.L, this.n, this.n); } public Matrix solve(Matrix var1) { if (var1.getRowDimension() != this.n) { throw new IllegalArgumentException("Matrix row dimensions must agree."); } else if (!this.isspd) { throw new RuntimeException("Matrix is not symmetric positive definite."); } else { double[][] var2 = var1.getArrayCopy(); int var3 = var1.getColumnDimension(); int var4; int var5; int var6; for(var4 = 0; var4 < this.n; ++var4) { for(var5 = 0; var5 < var3; ++var5) { for(var6 = 0; var6 < var4; ++var6) { var2[var4][var5] -= var2[var6][var5] * this.L[var4][var6]; } var2[var4][var5] /= this.L[var4][var4]; } } for(var4 = this.n - 1; var4 >= 0; --var4) { for(var5 = 0; var5 < var3; ++var5) { for(var6 = var4 + 1; var6 < this.n; ++var6) { var2[var4][var5] -= var2[var6][var5] * this.L[var6][var4]; } var2[var4][var5] /= this.L[var4][var4]; } } return new Matrix(var2, this.n, var3); } } }