Skip to content

Commit c442e32

Browse files
committed
Added DiagonalMatrix
1 parent e054f3c commit c442e32

File tree

5 files changed

+424
-58
lines changed

5 files changed

+424
-58
lines changed

src/main/java/jama2/CholeskyDecomposition.java

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -135,23 +135,23 @@ public class CholeskyDecomposition implements IMatrix, Serializable {
135135
*/
136136
CholeskyDecomposition(final Matrix Arg) {
137137
// Initialize.
138-
final double[][] A = Arg.getArray();
138+
final var A = Arg.getArray();
139139
this.n = Arg.getRowDimension();
140140
this.L = new double[this.n][this.n];
141141

142142
// Is A square?
143-
boolean isspd = (Arg.getColumnDimension() == this.n);
143+
var isspd = (Arg.getColumnDimension() == this.n);
144144

145145
// Main loop.
146-
for (int j = 0; j < this.n; j++) {
146+
for (var j = 0; j < this.n; j++) {
147147
// diagonal element
148-
double d = A[j][j];
148+
var d = A[j][j];
149149

150150
// for k=1,...,j-1
151151
// L[j][k] = (A[j][k] - L[k][1]^2 - .. - L[k][k-1]^2) / L[k][k]
152-
for (int k = 0; k < j; k++) {
153-
double s = A[j][k];
154-
for (int i = 0; i < k; i++) {
152+
for (var k = 0; k < j; k++) {
153+
var s = A[j][k];
154+
for (var i = 0; i < k; i++) {
155155
s -= this.L[k][i] * this.L[k][i];
156156
}
157157

@@ -167,19 +167,15 @@ public class CholeskyDecomposition implements IMatrix, Serializable {
167167
}
168168

169169
// L[j][j] = sqrt(A[j][j]-L[i][1]^2-...-L[i][i-1]^2)
170-
if (d <= 0D) {
170+
if (d > 0D) {
171+
this.L[j][j] = Math.sqrt(d);
172+
} else {
171173
// A is not positive definite!
172174
isspd = false;
173175
this.L[j][j] = 0D;
174-
} else {
175-
this.L[j][j] = Math.sqrt(d);
176-
// L[j][j] > 0
177176
}
178177

179178
// L[j][j+1] = ... = L[j][n]=0
180-
for (int k = j + 1; k < this.n; k++) {
181-
this.L[j][k] = 0D;
182-
}
183179
}
184180
this.isspd = isspd;
185181
}
@@ -217,23 +213,23 @@ public Matrix solve(final Matrix B) {
217213
return null;
218214
} else {
219215
// Copy right hand side.
220-
final Matrix M = new Matrix(B);
221-
final double[][] X = M.getArray();
222-
final int nx = B.getColumnDimension();
216+
final var M = new Matrix(B);
217+
final var X = M.getArray();
218+
final var nx = B.getColumnDimension();
223219

224220
// Solve L*Y = B;
225-
for (int k = 0; k < this.n; k++) {
226-
for (int j = 0; j < nx; j++) {
227-
for (int i = 0; i < k; i++) {
221+
for (var k = 0; k < this.n; k++) {
222+
for (var j = 0; j < nx; j++) {
223+
for (var i = 0; i < k; i++) {
228224
X[k][j] -= X[i][j] * this.L[k][i];
229225
}
230226
X[k][j] /= this.L[k][k];
231227
}
232228
}
233229

234230
// Solve L'*X = Y;
235-
for (int k = this.n - 1; k >= 0; k--) {
236-
for (int j = 0; j < nx; j++) {
231+
for (var k = this.n - 1; k >= 0; k--) {
232+
for (var j = 0; j < nx; j++) {
237233
for (int i = k + 1; i < this.n; i++) {
238234
X[k][j] -= X[i][j] * this.L[i][k];
239235
}

0 commit comments

Comments
 (0)