X-Git-Url: http://source.jalview.org/gitweb/?p=jalviewjs.git;a=blobdiff_plain;f=bin%2Fjalview%2Fmath%2FMatrix.js;h=22cb59db5749b89df5b55b0263f6629cacb5b587;hp=e260277cf5d1da81008f95c0436996d04020eb7e;hb=7301a2415adab88038b291fc54caeeb3a5a47a44;hpb=6154cb57a6eac3bb1344b8342495f5bb701ee921 diff --git a/bin/jalview/math/Matrix.js b/bin/jalview/math/Matrix.js index e260277..22cb59d 100644 --- a/bin/jalview/math/Matrix.js +++ b/bin/jalview/math/Matrix.js @@ -1,423 +1,423 @@ -Clazz.declarePackage ("jalview.math"); -Clazz.load (null, "jalview.math.Matrix", ["jalview.util.Format", "$.MessageManager", "java.lang.Exception"], function () { -c$ = Clazz.decorateAsClass (function () { -this.value = null; -this.rows = 0; -this.cols = 0; -this.d = null; -this.e = null; -this.maxIter = 45; -Clazz.instantialize (this, arguments); -}, jalview.math, "Matrix"); -Clazz.makeConstructor (c$, -function (value, rows, cols) { -this.rows = rows; -this.cols = cols; -this.value = value; -}, "~A,~N,~N"); -Clazz.defineMethod (c$, "transpose", -function () { -var out = Clazz.newDoubleArray (this.cols, this.rows, 0); -for (var i = 0; i < this.cols; i++) { -for (var j = 0; j < this.rows; j++) { -out[i][j] = this.value[j][i]; -} -} -return new jalview.math.Matrix (out, this.cols, this.rows); -}); -Clazz.defineMethod (c$, "print", -function (ps) { -for (var i = 0; i < this.rows; i++) { -for (var j = 0; j < this.cols; j++) { -jalview.util.Format.printDouble (ps, "%8.2f", this.value[i][j]); -} -ps.println (); -} -}, "java.io.PrintStream"); -Clazz.defineMethod (c$, "preMultiply", -function ($in) { -var tmp = Clazz.newDoubleArray ($in.rows, this.cols, 0); -for (var i = 0; i < $in.rows; i++) { -for (var j = 0; j < this.cols; j++) { -tmp[i][j] = 0.0; -for (var k = 0; k < $in.cols; k++) { -tmp[i][j] += ($in.value[i][k] * this.value[k][j]); -} -} -} -return new jalview.math.Matrix (tmp, $in.rows, this.cols); -}, "jalview.math.Matrix"); -Clazz.defineMethod (c$, "vectorPostMultiply", -function ($in) { -var out = Clazz.newDoubleArray ($in.length, 0); -for (var i = 0; i < $in.length; i++) { -out[i] = 0.0; -for (var k = 0; k < $in.length; k++) { -out[i] += (this.value[i][k] * $in[k]); -} -} -return out; -}, "~A"); -Clazz.defineMethod (c$, "postMultiply", -function ($in) { -var out = Clazz.newDoubleArray (this.rows, $in.cols, 0); -for (var i = 0; i < this.rows; i++) { -for (var j = 0; j < $in.cols; j++) { -out[i][j] = 0.0; -for (var k = 0; k < this.rows; k++) { -out[i][j] = out[i][j] + (this.value[i][k] * $in.value[k][j]); -} -} -} -return new jalview.math.Matrix (out, this.cols, $in.rows); -}, "jalview.math.Matrix"); -Clazz.defineMethod (c$, "copy", -function () { -var newmat = Clazz.newDoubleArray (this.rows, this.cols, 0); -for (var i = 0; i < this.rows; i++) { -for (var j = 0; j < this.cols; j++) { -newmat[i][j] = this.value[i][j]; -} -} -return new jalview.math.Matrix (newmat, this.rows, this.cols); -}); -Clazz.defineMethod (c$, "tred", -function () { -var n = this.rows; -var l; -var k; -var j; -var i; -var scale; -var hh; -var h; -var g; -var f; -this.d = Clazz.newDoubleArray (this.rows, 0); -this.e = Clazz.newDoubleArray (this.rows, 0); -for (i = n; i >= 2; i--) { -l = i - 1; -h = 0.0; -scale = 0.0; -if (l > 1) { -for (k = 1; k <= l; k++) { -scale += Math.abs (this.value[i - 1][k - 1]); -} -if (scale == 0.0) { -this.e[i - 1] = this.value[i - 1][l - 1]; -} else { -for (k = 1; k <= l; k++) { -this.value[i - 1][k - 1] /= scale; -h += (this.value[i - 1][k - 1] * this.value[i - 1][k - 1]); -} -f = this.value[i - 1][l - 1]; -if (f > 0) { -g = -1.0 * Math.sqrt (h); -} else { -g = Math.sqrt (h); -}this.e[i - 1] = scale * g; -h -= (f * g); -this.value[i - 1][l - 1] = f - g; -f = 0.0; -for (j = 1; j <= l; j++) { -this.value[j - 1][i - 1] = this.value[i - 1][j - 1] / h; -g = 0.0; -for (k = 1; k <= j; k++) { -g += (this.value[j - 1][k - 1] * this.value[i - 1][k - 1]); -} -for (k = j + 1; k <= l; k++) { -g += (this.value[k - 1][j - 1] * this.value[i - 1][k - 1]); -} -this.e[j - 1] = g / h; -f += (this.e[j - 1] * this.value[i - 1][j - 1]); -} -hh = f / (h + h); -for (j = 1; j <= l; j++) { -f = this.value[i - 1][j - 1]; -g = this.e[j - 1] - (hh * f); -this.e[j - 1] = g; -for (k = 1; k <= j; k++) { -this.value[j - 1][k - 1] -= ((f * this.e[k - 1]) + (g * this.value[i - 1][k - 1])); -} -} -}} else { -this.e[i - 1] = this.value[i - 1][l - 1]; -}this.d[i - 1] = h; -} -this.d[0] = 0.0; -this.e[0] = 0.0; -for (i = 1; i <= n; i++) { -l = i - 1; -if (this.d[i - 1] != 0.0) { -for (j = 1; j <= l; j++) { -g = 0.0; -for (k = 1; k <= l; k++) { -g += (this.value[i - 1][k - 1] * this.value[k - 1][j - 1]); -} -for (k = 1; k <= l; k++) { -this.value[k - 1][j - 1] -= (g * this.value[k - 1][i - 1]); -} -} -}this.d[i - 1] = this.value[i - 1][i - 1]; -this.value[i - 1][i - 1] = 1.0; -for (j = 1; j <= l; j++) { -this.value[j - 1][i - 1] = 0.0; -this.value[i - 1][j - 1] = 0.0; -} -} -}); -Clazz.defineMethod (c$, "tqli", -function () { -var n = this.rows; -var m; -var l; -var iter; -var i; -var k; -var s; -var r; -var p; -;var g; -var f; -var dd; -var c; -var b; -for (i = 2; i <= n; i++) { -this.e[i - 2] = this.e[i - 1]; -} -this.e[n - 1] = 0.0; -for (l = 1; l <= n; l++) { -iter = 0; -do { -for (m = l; m <= (n - 1); m++) { -dd = Math.abs (this.d[m - 1]) + Math.abs (this.d[m]); -if ((Math.abs (this.e[m - 1]) + dd) == dd) { -break; -}} -if (m != l) { -iter++; -if (iter == this.maxIter) { -throw new Exception (jalview.util.MessageManager.formatMessage ("exception.matrix_too_many_iteration", Clazz.newArray (-1, ["tqli", Integer.$valueOf (this.maxIter).toString ()]))); -} else { -}g = (this.d[l] - this.d[l - 1]) / (2.0 * this.e[l - 1]); -r = Math.sqrt ((g * g) + 1.0); -g = this.d[m - 1] - this.d[l - 1] + (this.e[l - 1] / (g + this.sign (r, g))); -c = 1.0; -s = c; -p = 0.0; -for (i = m - 1; i >= l; i--) { -f = s * this.e[i - 1]; -b = c * this.e[i - 1]; -if (Math.abs (f) >= Math.abs (g)) { -c = g / f; -r = Math.sqrt ((c * c) + 1.0); -this.e[i] = f * r; -s = 1.0 / r; -c *= s; -} else { -s = f / g; -r = Math.sqrt ((s * s) + 1.0); -this.e[i] = g * r; -c = 1.0 / r; -s *= c; -}g = this.d[i] - p; -r = ((this.d[i - 1] - g) * s) + (2.0 * c * b); -p = s * r; -this.d[i] = g + p; -g = (c * r) - b; -for (k = 1; k <= n; k++) { -f = this.value[k - 1][i]; -this.value[k - 1][i] = (s * this.value[k - 1][i - 1]) + (c * f); -this.value[k - 1][i - 1] = (c * this.value[k - 1][i - 1]) - (s * f); -} -} -this.d[l - 1] = this.d[l - 1] - p; -this.e[l - 1] = g; -this.e[m - 1] = 0.0; -}} while (m != l); -} -}); -Clazz.defineMethod (c$, "tred2", -function () { -var n = this.rows; -var l; -var k; -var j; -var i; -var scale; -var hh; -var h; -var g; -var f; -this.d = Clazz.newDoubleArray (this.rows, 0); -this.e = Clazz.newDoubleArray (this.rows, 0); -for (i = n - 1; i >= 1; i--) { -l = i - 1; -h = 0.0; -scale = 0.0; -if (l > 0) { -for (k = 0; k < l; k++) { -scale += Math.abs (this.value[i][k]); -} -if (scale == 0.0) { -this.e[i] = this.value[i][l]; -} else { -for (k = 0; k < l; k++) { -this.value[i][k] /= scale; -h += (this.value[i][k] * this.value[i][k]); -} -f = this.value[i][l]; -if (f > 0) { -g = -1.0 * Math.sqrt (h); -} else { -g = Math.sqrt (h); -}this.e[i] = scale * g; -h -= (f * g); -this.value[i][l] = f - g; -f = 0.0; -for (j = 0; j < l; j++) { -this.value[j][i] = this.value[i][j] / h; -g = 0.0; -for (k = 0; k < j; k++) { -g += (this.value[j][k] * this.value[i][k]); -} -for (k = j; k < l; k++) { -g += (this.value[k][j] * this.value[i][k]); -} -this.e[j] = g / h; -f += (this.e[j] * this.value[i][j]); -} -hh = f / (h + h); -for (j = 0; j < l; j++) { -f = this.value[i][j]; -g = this.e[j] - (hh * f); -this.e[j] = g; -for (k = 0; k < j; k++) { -this.value[j][k] -= ((f * this.e[k]) + (g * this.value[i][k])); -} -} -}} else { -this.e[i] = this.value[i][l]; -}this.d[i] = h; -} -this.d[0] = 0.0; -this.e[0] = 0.0; -for (i = 0; i < n; i++) { -l = i - 1; -if (this.d[i] != 0.0) { -for (j = 0; j < l; j++) { -g = 0.0; -for (k = 0; k < l; k++) { -g += (this.value[i][k] * this.value[k][j]); -} -for (k = 0; k < l; k++) { -this.value[k][j] -= (g * this.value[k][i]); -} -} -}this.d[i] = this.value[i][i]; -this.value[i][i] = 1.0; -for (j = 0; j < l; j++) { -this.value[j][i] = 0.0; -this.value[i][j] = 0.0; -} -} -}); -Clazz.defineMethod (c$, "tqli2", -function () { -var n = this.rows; -var m; -var l; -var iter; -var i; -var k; -var s; -var r; -var p; -;var g; -var f; -var dd; -var c; -var b; -for (i = 2; i <= n; i++) { -this.e[i - 2] = this.e[i - 1]; -} -this.e[n - 1] = 0.0; -for (l = 1; l <= n; l++) { -iter = 0; -do { -for (m = l; m <= (n - 1); m++) { -dd = Math.abs (this.d[m - 1]) + Math.abs (this.d[m]); -if ((Math.abs (this.e[m - 1]) + dd) == dd) { -break; -}} -if (m != l) { -iter++; -if (iter == this.maxIter) { -throw new Exception (jalview.util.MessageManager.formatMessage ("exception.matrix_too_many_iteration", Clazz.newArray (-1, ["tqli2", Integer.$valueOf (this.maxIter).toString ()]))); -} else { -}g = (this.d[l] - this.d[l - 1]) / (2.0 * this.e[l - 1]); -r = Math.sqrt ((g * g) + 1.0); -g = this.d[m - 1] - this.d[l - 1] + (this.e[l - 1] / (g + this.sign (r, g))); -c = 1.0; -s = c; -p = 0.0; -for (i = m - 1; i >= l; i--) { -f = s * this.e[i - 1]; -b = c * this.e[i - 1]; -if (Math.abs (f) >= Math.abs (g)) { -c = g / f; -r = Math.sqrt ((c * c) + 1.0); -this.e[i] = f * r; -s = 1.0 / r; -c *= s; -} else { -s = f / g; -r = Math.sqrt ((s * s) + 1.0); -this.e[i] = g * r; -c = 1.0 / r; -s *= c; -}g = this.d[i] - p; -r = ((this.d[i - 1] - g) * s) + (2.0 * c * b); -p = s * r; -this.d[i] = g + p; -g = (c * r) - b; -for (k = 1; k <= n; k++) { -f = this.value[k - 1][i]; -this.value[k - 1][i] = (s * this.value[k - 1][i - 1]) + (c * f); -this.value[k - 1][i - 1] = (c * this.value[k - 1][i - 1]) - (s * f); -} -} -this.d[l - 1] = this.d[l - 1] - p; -this.e[l - 1] = g; -this.e[m - 1] = 0.0; -}} while (m != l); -} -}); -Clazz.defineMethod (c$, "sign", -function (a, b) { -if (b < 0) { -return -Math.abs (a); -} else { -return Math.abs (a); -}}, "~N,~N"); -Clazz.defineMethod (c$, "getColumn", -function (n) { -var out = Clazz.newDoubleArray (this.rows, 0); -for (var i = 0; i < this.rows; i++) { -out[i] = this.value[i][n]; -} -return out; -}, "~N"); -Clazz.defineMethod (c$, "printD", -function (ps) { -for (var j = 0; j < this.rows; j++) { -jalview.util.Format.printDouble (ps, "%15.4e", this.d[j]); -} -}, "java.io.PrintStream"); -Clazz.defineMethod (c$, "printE", -function (ps) { -for (var j = 0; j < this.rows; j++) { -jalview.util.Format.printDouble (ps, "%15.4e", this.e[j]); -} -}, "java.io.PrintStream"); -}); +Clazz.declarePackage ("jalview.math"); +Clazz.load (null, "jalview.math.Matrix", ["jalview.util.Format", "$.MessageManager", "java.lang.Exception"], function () { +c$ = Clazz.decorateAsClass (function () { +this.value = null; +this.rows = 0; +this.cols = 0; +this.d = null; +this.e = null; +this.maxIter = 45; +Clazz.instantialize (this, arguments); +}, jalview.math, "Matrix"); +Clazz.makeConstructor (c$, +function (value, rows, cols) { +this.rows = rows; +this.cols = cols; +this.value = value; +}, "~A,~N,~N"); +Clazz.defineMethod (c$, "transpose", +function () { +var out = Clazz.newDoubleArray (this.cols, this.rows, 0); +for (var i = 0; i < this.cols; i++) { +for (var j = 0; j < this.rows; j++) { +out[i][j] = this.value[j][i]; +} +} +return new jalview.math.Matrix (out, this.cols, this.rows); +}); +Clazz.defineMethod (c$, "print", +function (ps) { +for (var i = 0; i < this.rows; i++) { +for (var j = 0; j < this.cols; j++) { +jalview.util.Format.printDouble (ps, "%8.2f", this.value[i][j]); +} +ps.println (); +} +}, "java.io.PrintStream"); +Clazz.defineMethod (c$, "preMultiply", +function ($in) { +var tmp = Clazz.newDoubleArray ($in.rows, this.cols, 0); +for (var i = 0; i < $in.rows; i++) { +for (var j = 0; j < this.cols; j++) { +tmp[i][j] = 0.0; +for (var k = 0; k < $in.cols; k++) { +tmp[i][j] += ($in.value[i][k] * this.value[k][j]); +} +} +} +return new jalview.math.Matrix (tmp, $in.rows, this.cols); +}, "jalview.math.Matrix"); +Clazz.defineMethod (c$, "vectorPostMultiply", +function ($in) { +var out = Clazz.newDoubleArray ($in.length, 0); +for (var i = 0; i < $in.length; i++) { +out[i] = 0.0; +for (var k = 0; k < $in.length; k++) { +out[i] += (this.value[i][k] * $in[k]); +} +} +return out; +}, "~A"); +Clazz.defineMethod (c$, "postMultiply", +function ($in) { +var out = Clazz.newDoubleArray (this.rows, $in.cols, 0); +for (var i = 0; i < this.rows; i++) { +for (var j = 0; j < $in.cols; j++) { +out[i][j] = 0.0; +for (var k = 0; k < this.rows; k++) { +out[i][j] = out[i][j] + (this.value[i][k] * $in.value[k][j]); +} +} +} +return new jalview.math.Matrix (out, this.cols, $in.rows); +}, "jalview.math.Matrix"); +Clazz.defineMethod (c$, "copy", +function () { +var newmat = Clazz.newDoubleArray (this.rows, this.cols, 0); +for (var i = 0; i < this.rows; i++) { +for (var j = 0; j < this.cols; j++) { +newmat[i][j] = this.value[i][j]; +} +} +return new jalview.math.Matrix (newmat, this.rows, this.cols); +}); +Clazz.defineMethod (c$, "tred", +function () { +var n = this.rows; +var l; +var k; +var j; +var i; +var scale; +var hh; +var h; +var g; +var f; +this.d = Clazz.newDoubleArray (this.rows, 0); +this.e = Clazz.newDoubleArray (this.rows, 0); +for (i = n; i >= 2; i--) { +l = i - 1; +h = 0.0; +scale = 0.0; +if (l > 1) { +for (k = 1; k <= l; k++) { +scale += Math.abs (this.value[i - 1][k - 1]); +} +if (scale == 0.0) { +this.e[i - 1] = this.value[i - 1][l - 1]; +} else { +for (k = 1; k <= l; k++) { +this.value[i - 1][k - 1] /= scale; +h += (this.value[i - 1][k - 1] * this.value[i - 1][k - 1]); +} +f = this.value[i - 1][l - 1]; +if (f > 0) { +g = -1.0 * Math.sqrt (h); +} else { +g = Math.sqrt (h); +}this.e[i - 1] = scale * g; +h -= (f * g); +this.value[i - 1][l - 1] = f - g; +f = 0.0; +for (j = 1; j <= l; j++) { +this.value[j - 1][i - 1] = this.value[i - 1][j - 1] / h; +g = 0.0; +for (k = 1; k <= j; k++) { +g += (this.value[j - 1][k - 1] * this.value[i - 1][k - 1]); +} +for (k = j + 1; k <= l; k++) { +g += (this.value[k - 1][j - 1] * this.value[i - 1][k - 1]); +} +this.e[j - 1] = g / h; +f += (this.e[j - 1] * this.value[i - 1][j - 1]); +} +hh = f / (h + h); +for (j = 1; j <= l; j++) { +f = this.value[i - 1][j - 1]; +g = this.e[j - 1] - (hh * f); +this.e[j - 1] = g; +for (k = 1; k <= j; k++) { +this.value[j - 1][k - 1] -= ((f * this.e[k - 1]) + (g * this.value[i - 1][k - 1])); +} +} +}} else { +this.e[i - 1] = this.value[i - 1][l - 1]; +}this.d[i - 1] = h; +} +this.d[0] = 0.0; +this.e[0] = 0.0; +for (i = 1; i <= n; i++) { +l = i - 1; +if (this.d[i - 1] != 0.0) { +for (j = 1; j <= l; j++) { +g = 0.0; +for (k = 1; k <= l; k++) { +g += (this.value[i - 1][k - 1] * this.value[k - 1][j - 1]); +} +for (k = 1; k <= l; k++) { +this.value[k - 1][j - 1] -= (g * this.value[k - 1][i - 1]); +} +} +}this.d[i - 1] = this.value[i - 1][i - 1]; +this.value[i - 1][i - 1] = 1.0; +for (j = 1; j <= l; j++) { +this.value[j - 1][i - 1] = 0.0; +this.value[i - 1][j - 1] = 0.0; +} +} +}); +Clazz.defineMethod (c$, "tqli", +function () { +var n = this.rows; +var m; +var l; +var iter; +var i; +var k; +var s; +var r; +var p; +;var g; +var f; +var dd; +var c; +var b; +for (i = 2; i <= n; i++) { +this.e[i - 2] = this.e[i - 1]; +} +this.e[n - 1] = 0.0; +for (l = 1; l <= n; l++) { +iter = 0; +do { +for (m = l; m <= (n - 1); m++) { +dd = Math.abs (this.d[m - 1]) + Math.abs (this.d[m]); +if ((Math.abs (this.e[m - 1]) + dd) == dd) { +break; +}} +if (m != l) { +iter++; +if (iter == this.maxIter) { +throw new Exception (jalview.util.MessageManager.formatMessage ("exception.matrix_too_many_iteration", Clazz.newArray (-1, ["tqli", Integer.$valueOf (this.maxIter).toString ()]))); +} else { +}g = (this.d[l] - this.d[l - 1]) / (2.0 * this.e[l - 1]); +r = Math.sqrt ((g * g) + 1.0); +g = this.d[m - 1] - this.d[l - 1] + (this.e[l - 1] / (g + this.sign (r, g))); +c = 1.0; +s = c; +p = 0.0; +for (i = m - 1; i >= l; i--) { +f = s * this.e[i - 1]; +b = c * this.e[i - 1]; +if (Math.abs (f) >= Math.abs (g)) { +c = g / f; +r = Math.sqrt ((c * c) + 1.0); +this.e[i] = f * r; +s = 1.0 / r; +c *= s; +} else { +s = f / g; +r = Math.sqrt ((s * s) + 1.0); +this.e[i] = g * r; +c = 1.0 / r; +s *= c; +}g = this.d[i] - p; +r = ((this.d[i - 1] - g) * s) + (2.0 * c * b); +p = s * r; +this.d[i] = g + p; +g = (c * r) - b; +for (k = 1; k <= n; k++) { +f = this.value[k - 1][i]; +this.value[k - 1][i] = (s * this.value[k - 1][i - 1]) + (c * f); +this.value[k - 1][i - 1] = (c * this.value[k - 1][i - 1]) - (s * f); +} +} +this.d[l - 1] = this.d[l - 1] - p; +this.e[l - 1] = g; +this.e[m - 1] = 0.0; +}} while (m != l); +} +}); +Clazz.defineMethod (c$, "tred2", +function () { +var n = this.rows; +var l; +var k; +var j; +var i; +var scale; +var hh; +var h; +var g; +var f; +this.d = Clazz.newDoubleArray (this.rows, 0); +this.e = Clazz.newDoubleArray (this.rows, 0); +for (i = n - 1; i >= 1; i--) { +l = i - 1; +h = 0.0; +scale = 0.0; +if (l > 0) { +for (k = 0; k < l; k++) { +scale += Math.abs (this.value[i][k]); +} +if (scale == 0.0) { +this.e[i] = this.value[i][l]; +} else { +for (k = 0; k < l; k++) { +this.value[i][k] /= scale; +h += (this.value[i][k] * this.value[i][k]); +} +f = this.value[i][l]; +if (f > 0) { +g = -1.0 * Math.sqrt (h); +} else { +g = Math.sqrt (h); +}this.e[i] = scale * g; +h -= (f * g); +this.value[i][l] = f - g; +f = 0.0; +for (j = 0; j < l; j++) { +this.value[j][i] = this.value[i][j] / h; +g = 0.0; +for (k = 0; k < j; k++) { +g += (this.value[j][k] * this.value[i][k]); +} +for (k = j; k < l; k++) { +g += (this.value[k][j] * this.value[i][k]); +} +this.e[j] = g / h; +f += (this.e[j] * this.value[i][j]); +} +hh = f / (h + h); +for (j = 0; j < l; j++) { +f = this.value[i][j]; +g = this.e[j] - (hh * f); +this.e[j] = g; +for (k = 0; k < j; k++) { +this.value[j][k] -= ((f * this.e[k]) + (g * this.value[i][k])); +} +} +}} else { +this.e[i] = this.value[i][l]; +}this.d[i] = h; +} +this.d[0] = 0.0; +this.e[0] = 0.0; +for (i = 0; i < n; i++) { +l = i - 1; +if (this.d[i] != 0.0) { +for (j = 0; j < l; j++) { +g = 0.0; +for (k = 0; k < l; k++) { +g += (this.value[i][k] * this.value[k][j]); +} +for (k = 0; k < l; k++) { +this.value[k][j] -= (g * this.value[k][i]); +} +} +}this.d[i] = this.value[i][i]; +this.value[i][i] = 1.0; +for (j = 0; j < l; j++) { +this.value[j][i] = 0.0; +this.value[i][j] = 0.0; +} +} +}); +Clazz.defineMethod (c$, "tqli2", +function () { +var n = this.rows; +var m; +var l; +var iter; +var i; +var k; +var s; +var r; +var p; +;var g; +var f; +var dd; +var c; +var b; +for (i = 2; i <= n; i++) { +this.e[i - 2] = this.e[i - 1]; +} +this.e[n - 1] = 0.0; +for (l = 1; l <= n; l++) { +iter = 0; +do { +for (m = l; m <= (n - 1); m++) { +dd = Math.abs (this.d[m - 1]) + Math.abs (this.d[m]); +if ((Math.abs (this.e[m - 1]) + dd) == dd) { +break; +}} +if (m != l) { +iter++; +if (iter == this.maxIter) { +throw new Exception (jalview.util.MessageManager.formatMessage ("exception.matrix_too_many_iteration", Clazz.newArray (-1, ["tqli2", Integer.$valueOf (this.maxIter).toString ()]))); +} else { +}g = (this.d[l] - this.d[l - 1]) / (2.0 * this.e[l - 1]); +r = Math.sqrt ((g * g) + 1.0); +g = this.d[m - 1] - this.d[l - 1] + (this.e[l - 1] / (g + this.sign (r, g))); +c = 1.0; +s = c; +p = 0.0; +for (i = m - 1; i >= l; i--) { +f = s * this.e[i - 1]; +b = c * this.e[i - 1]; +if (Math.abs (f) >= Math.abs (g)) { +c = g / f; +r = Math.sqrt ((c * c) + 1.0); +this.e[i] = f * r; +s = 1.0 / r; +c *= s; +} else { +s = f / g; +r = Math.sqrt ((s * s) + 1.0); +this.e[i] = g * r; +c = 1.0 / r; +s *= c; +}g = this.d[i] - p; +r = ((this.d[i - 1] - g) * s) + (2.0 * c * b); +p = s * r; +this.d[i] = g + p; +g = (c * r) - b; +for (k = 1; k <= n; k++) { +f = this.value[k - 1][i]; +this.value[k - 1][i] = (s * this.value[k - 1][i - 1]) + (c * f); +this.value[k - 1][i - 1] = (c * this.value[k - 1][i - 1]) - (s * f); +} +} +this.d[l - 1] = this.d[l - 1] - p; +this.e[l - 1] = g; +this.e[m - 1] = 0.0; +}} while (m != l); +} +}); +Clazz.defineMethod (c$, "sign", +function (a, b) { +if (b < 0) { +return -Math.abs (a); +} else { +return Math.abs (a); +}}, "~N,~N"); +Clazz.defineMethod (c$, "getColumn", +function (n) { +var out = Clazz.newDoubleArray (this.rows, 0); +for (var i = 0; i < this.rows; i++) { +out[i] = this.value[i][n]; +} +return out; +}, "~N"); +Clazz.defineMethod (c$, "printD", +function (ps) { +for (var j = 0; j < this.rows; j++) { +jalview.util.Format.printDouble (ps, "%15.4e", this.d[j]); +} +}, "java.io.PrintStream"); +Clazz.defineMethod (c$, "printE", +function (ps) { +for (var j = 0; j < this.rows; j++) { +jalview.util.Format.printDouble (ps, "%15.4e", this.e[j]); +} +}, "java.io.PrintStream"); +});