1 Clazz.declarePackage ("JU");
\r
2 c$ = Clazz.decorateAsClass (function () {
\r
6 if (!Clazz.isClassDefined ("JU.Matrix.LUDecomp")) {
\r
7 JU.Matrix.$Matrix$LUDecomp$ ();
\r
9 Clazz.instantialize (this, arguments);
\r
10 }, JU, "Matrix", null, Cloneable);
\r
11 Clazz.makeConstructor (c$,
\r
12 function (a, m, n) {
\r
13 this.a = (a == null ? Clazz.newDoubleArray (m, n, 0) : a);
\r
17 Clazz.defineMethod (c$, "getRowDimension",
\r
21 Clazz.defineMethod (c$, "getColumnDimension",
\r
25 Clazz.defineMethod (c$, "getArray",
\r
29 Clazz.defineMethod (c$, "getArrayCopy",
\r
31 var x = Clazz.newDoubleArray (this.m, this.n, 0);
\r
32 for (var i = this.m; --i >= 0; ) for (var j = this.n; --j >= 0; ) x[i][j] = this.a[i][j];
\r
37 Clazz.defineMethod (c$, "copy",
\r
39 var x = new JU.Matrix (null, this.m, this.n);
\r
41 for (var i = this.m; --i >= 0; ) for (var j = this.n; --j >= 0; ) c[i][j] = this.a[i][j];
\r
46 Clazz.overrideMethod (c$, "clone",
\r
48 return this.copy ();
\r
50 Clazz.defineMethod (c$, "getSubmatrix",
\r
51 function (i0, j0, nrows, ncols) {
\r
52 var x = new JU.Matrix (null, nrows, ncols);
\r
54 for (var i = nrows; --i >= 0; ) for (var j = ncols; --j >= 0; ) xa[i][j] = this.a[i0 + i][j0 + j];
\r
59 Clazz.defineMethod (c$, "getMatrixSelected",
\r
61 var x = new JU.Matrix (null, r.length, n);
\r
63 for (var i = r.length; --i >= 0; ) {
\r
64 var b = this.a[r[i]];
\r
65 for (var j = n; --j >= 0; ) xa[i][j] = b[j];
\r
70 Clazz.defineMethod (c$, "transpose",
\r
72 var x = new JU.Matrix (null, this.n, this.m);
\r
74 for (var i = this.m; --i >= 0; ) for (var j = this.n; --j >= 0; ) c[j][i] = this.a[i][j];
\r
79 Clazz.defineMethod (c$, "add",
\r
81 return this.scaleAdd (b, 1);
\r
83 Clazz.defineMethod (c$, "sub",
\r
85 return this.scaleAdd (b, -1);
\r
87 Clazz.defineMethod (c$, "scaleAdd",
\r
88 function (b, scale) {
\r
89 var x = new JU.Matrix (null, this.m, this.n);
\r
92 for (var i = this.m; --i >= 0; ) for (var j = this.n; --j >= 0; ) xa[i][j] = ba[i][j] * scale + this.a[i][j];
\r
97 Clazz.defineMethod (c$, "mul",
\r
99 if (b.m != this.n) return null;
\r
100 var x = new JU.Matrix (null, this.m, b.n);
\r
103 for (var j = b.n; --j >= 0; ) for (var i = this.m; --i >= 0; ) {
\r
104 var arowi = this.a[i];
\r
106 for (var k = this.n; --k >= 0; ) s += arowi[k] * ba[k][j];
\r
113 Clazz.defineMethod (c$, "inverse",
\r
115 return Clazz.innerTypeInstance (JU.Matrix.LUDecomp, this, null, this.m, this.n).solve (JU.Matrix.identity (this.m, this.m), this.n);
\r
117 Clazz.defineMethod (c$, "trace",
\r
120 for (var i = Math.min (this.m, this.n); --i >= 0; ) t += this.a[i][i];
\r
124 c$.identity = Clazz.defineMethod (c$, "identity",
\r
126 var x = new JU.Matrix (null, m, n);
\r
128 for (var i = Math.min (m, n); --i >= 0; ) xa[i][i] = 1;
\r
132 Clazz.defineMethod (c$, "getRotation",
\r
134 return this.getSubmatrix (0, 0, this.m - 1, this.n - 1);
\r
136 Clazz.defineMethod (c$, "getTranslation",
\r
138 return this.getSubmatrix (0, this.n - 1, this.m - 1, 1);
\r
140 c$.newT = Clazz.defineMethod (c$, "newT",
\r
141 function (r, asColumn) {
\r
142 return (asColumn ? new JU.Matrix ( Clazz.newArray (-1, [ Clazz.newDoubleArray (-1, [r.x]), Clazz.newDoubleArray (-1, [r.y]), Clazz.newDoubleArray (-1, [r.z])]), 3, 1) : new JU.Matrix ( Clazz.newArray (-1, [ Clazz.newDoubleArray (-1, [r.x, r.y, r.z])]), 1, 3));
\r
144 Clazz.overrideMethod (c$, "toString",
\r
147 for (var i = 0; i < this.m; i++) {
\r
149 for (var j = 0; j < this.n; j++) s += " " + this.a[i][j];
\r
156 c$.$Matrix$LUDecomp$ = function () {
\r
157 Clazz.pu$h(self.c$);
\r
158 c$ = Clazz.decorateAsClass (function () {
\r
159 Clazz.prepareCallback (this, arguments);
\r
163 Clazz.instantialize (this, arguments);
\r
164 }, JU.Matrix, "LUDecomp");
\r
165 Clazz.makeConstructor (c$,
\r
167 this.LU = this.b$["JU.Matrix"].getArrayCopy ();
\r
168 this.piv = Clazz.newIntArray (a, 0);
\r
169 for (var c = a; --c >= 0; ) this.piv[c] = c;
\r
173 var e = Clazz.newDoubleArray (a, 0);
\r
174 for (var f = 0; f < b; f++) {
\r
175 for (var g = a; --g >= 0; ) e[g] = this.LU[g][f];
\r
177 for (var h = a; --h >= 0; ) {
\r
179 var i = Math.min (h, f);
\r
181 for (var k = i; --k >= 0; ) j += d[k] * e[k];
\r
186 for (var j = a; --j > f; ) if (Math.abs (e[j]) > Math.abs (e[i])) i = j;
\r
189 for (var k = b; --k >= 0; ) {
\r
190 var l = this.LU[i][k];
\r
191 this.LU[i][k] = this.LU[f][k];
\r
194 var l = this.piv[i];
\r
195 this.piv[i] = this.piv[f];
\r
197 this.pivsign = -this.pivsign;
\r
198 }if ( new Boolean (f < a & this.LU[f][f] != 0.0).valueOf ()) for (var k = a; --k > f; ) this.LU[k][f] /= this.LU[f][f];
\r
202 Clazz.defineMethod (c$, "solve",
\r
204 for (var c = 0; c < b; c++) if (this.LU[c][c] == 0) return null;
\r
207 var e = a.getMatrixSelected (this.piv, d);
\r
209 for (var g = 0; g < b; g++) for (var h = g + 1; h < b; h++) for (var i = 0; i < d; i++) f[h][i] -= f[g][i] * this.LU[h][g];
\r
213 for (var j = b; --j >= 0; ) {
\r
214 for (var k = d; --k >= 0; ) f[j][k] /= this.LU[j][j];
\r
216 for (var l = j; --l >= 0; ) for (var m = d; --m >= 0; ) f[l][m] -= f[j][m] * this.LU[l][j];
\r
221 }, "JU.Matrix,~N");
\r