Merge branch 'master' of https://source.jalview.org/git/jalviewjs.git
[jalviewjs.git] / site / j2s / jalview / math / Matrix.js
index e260277..22cb59d 100644 (file)
-Clazz.declarePackage ("jalview.math");\r
-Clazz.load (null, "jalview.math.Matrix", ["jalview.util.Format", "$.MessageManager", "java.lang.Exception"], function () {\r
-c$ = Clazz.decorateAsClass (function () {\r
-this.value = null;\r
-this.rows = 0;\r
-this.cols = 0;\r
-this.d = null;\r
-this.e = null;\r
-this.maxIter = 45;\r
-Clazz.instantialize (this, arguments);\r
-}, jalview.math, "Matrix");\r
-Clazz.makeConstructor (c$, \r
-function (value, rows, cols) {\r
-this.rows = rows;\r
-this.cols = cols;\r
-this.value = value;\r
-}, "~A,~N,~N");\r
-Clazz.defineMethod (c$, "transpose", \r
-function () {\r
-var out =  Clazz.newDoubleArray (this.cols, this.rows, 0);\r
-for (var i = 0; i < this.cols; i++) {\r
-for (var j = 0; j < this.rows; j++) {\r
-out[i][j] = this.value[j][i];\r
-}\r
-}\r
-return  new jalview.math.Matrix (out, this.cols, this.rows);\r
-});\r
-Clazz.defineMethod (c$, "print", \r
-function (ps) {\r
-for (var i = 0; i < this.rows; i++) {\r
-for (var j = 0; j < this.cols; j++) {\r
-jalview.util.Format.printDouble (ps, "%8.2f", this.value[i][j]);\r
-}\r
-ps.println ();\r
-}\r
-}, "java.io.PrintStream");\r
-Clazz.defineMethod (c$, "preMultiply", \r
-function ($in) {\r
-var tmp =  Clazz.newDoubleArray ($in.rows, this.cols, 0);\r
-for (var i = 0; i < $in.rows; i++) {\r
-for (var j = 0; j < this.cols; j++) {\r
-tmp[i][j] = 0.0;\r
-for (var k = 0; k < $in.cols; k++) {\r
-tmp[i][j] += ($in.value[i][k] * this.value[k][j]);\r
-}\r
-}\r
-}\r
-return  new jalview.math.Matrix (tmp, $in.rows, this.cols);\r
-}, "jalview.math.Matrix");\r
-Clazz.defineMethod (c$, "vectorPostMultiply", \r
-function ($in) {\r
-var out =  Clazz.newDoubleArray ($in.length, 0);\r
-for (var i = 0; i < $in.length; i++) {\r
-out[i] = 0.0;\r
-for (var k = 0; k < $in.length; k++) {\r
-out[i] += (this.value[i][k] * $in[k]);\r
-}\r
-}\r
-return out;\r
-}, "~A");\r
-Clazz.defineMethod (c$, "postMultiply", \r
-function ($in) {\r
-var out =  Clazz.newDoubleArray (this.rows, $in.cols, 0);\r
-for (var i = 0; i < this.rows; i++) {\r
-for (var j = 0; j < $in.cols; j++) {\r
-out[i][j] = 0.0;\r
-for (var k = 0; k < this.rows; k++) {\r
-out[i][j] = out[i][j] + (this.value[i][k] * $in.value[k][j]);\r
-}\r
-}\r
-}\r
-return  new jalview.math.Matrix (out, this.cols, $in.rows);\r
-}, "jalview.math.Matrix");\r
-Clazz.defineMethod (c$, "copy", \r
-function () {\r
-var newmat =  Clazz.newDoubleArray (this.rows, this.cols, 0);\r
-for (var i = 0; i < this.rows; i++) {\r
-for (var j = 0; j < this.cols; j++) {\r
-newmat[i][j] = this.value[i][j];\r
-}\r
-}\r
-return  new jalview.math.Matrix (newmat, this.rows, this.cols);\r
-});\r
-Clazz.defineMethod (c$, "tred", \r
-function () {\r
-var n = this.rows;\r
-var l;\r
-var k;\r
-var j;\r
-var i;\r
-var scale;\r
-var hh;\r
-var h;\r
-var g;\r
-var f;\r
-this.d =  Clazz.newDoubleArray (this.rows, 0);\r
-this.e =  Clazz.newDoubleArray (this.rows, 0);\r
-for (i = n; i >= 2; i--) {\r
-l = i - 1;\r
-h = 0.0;\r
-scale = 0.0;\r
-if (l > 1) {\r
-for (k = 1; k <= l; k++) {\r
-scale += Math.abs (this.value[i - 1][k - 1]);\r
-}\r
-if (scale == 0.0) {\r
-this.e[i - 1] = this.value[i - 1][l - 1];\r
-} else {\r
-for (k = 1; k <= l; k++) {\r
-this.value[i - 1][k - 1] /= scale;\r
-h += (this.value[i - 1][k - 1] * this.value[i - 1][k - 1]);\r
-}\r
-f = this.value[i - 1][l - 1];\r
-if (f > 0) {\r
-g = -1.0 * Math.sqrt (h);\r
-} else {\r
-g = Math.sqrt (h);\r
-}this.e[i - 1] = scale * g;\r
-h -= (f * g);\r
-this.value[i - 1][l - 1] = f - g;\r
-f = 0.0;\r
-for (j = 1; j <= l; j++) {\r
-this.value[j - 1][i - 1] = this.value[i - 1][j - 1] / h;\r
-g = 0.0;\r
-for (k = 1; k <= j; k++) {\r
-g += (this.value[j - 1][k - 1] * this.value[i - 1][k - 1]);\r
-}\r
-for (k = j + 1; k <= l; k++) {\r
-g += (this.value[k - 1][j - 1] * this.value[i - 1][k - 1]);\r
-}\r
-this.e[j - 1] = g / h;\r
-f += (this.e[j - 1] * this.value[i - 1][j - 1]);\r
-}\r
-hh = f / (h + h);\r
-for (j = 1; j <= l; j++) {\r
-f = this.value[i - 1][j - 1];\r
-g = this.e[j - 1] - (hh * f);\r
-this.e[j - 1] = g;\r
-for (k = 1; k <= j; k++) {\r
-this.value[j - 1][k - 1] -= ((f * this.e[k - 1]) + (g * this.value[i - 1][k - 1]));\r
-}\r
-}\r
-}} else {\r
-this.e[i - 1] = this.value[i - 1][l - 1];\r
-}this.d[i - 1] = h;\r
-}\r
-this.d[0] = 0.0;\r
-this.e[0] = 0.0;\r
-for (i = 1; i <= n; i++) {\r
-l = i - 1;\r
-if (this.d[i - 1] != 0.0) {\r
-for (j = 1; j <= l; j++) {\r
-g = 0.0;\r
-for (k = 1; k <= l; k++) {\r
-g += (this.value[i - 1][k - 1] * this.value[k - 1][j - 1]);\r
-}\r
-for (k = 1; k <= l; k++) {\r
-this.value[k - 1][j - 1] -= (g * this.value[k - 1][i - 1]);\r
-}\r
-}\r
-}this.d[i - 1] = this.value[i - 1][i - 1];\r
-this.value[i - 1][i - 1] = 1.0;\r
-for (j = 1; j <= l; j++) {\r
-this.value[j - 1][i - 1] = 0.0;\r
-this.value[i - 1][j - 1] = 0.0;\r
-}\r
-}\r
-});\r
-Clazz.defineMethod (c$, "tqli", \r
-function () {\r
-var n = this.rows;\r
-var m;\r
-var l;\r
-var iter;\r
-var i;\r
-var k;\r
-var s;\r
-var r;\r
-var p;\r
-;var g;\r
-var f;\r
-var dd;\r
-var c;\r
-var b;\r
-for (i = 2; i <= n; i++) {\r
-this.e[i - 2] = this.e[i - 1];\r
-}\r
-this.e[n - 1] = 0.0;\r
-for (l = 1; l <= n; l++) {\r
-iter = 0;\r
-do {\r
-for (m = l; m <= (n - 1); m++) {\r
-dd = Math.abs (this.d[m - 1]) + Math.abs (this.d[m]);\r
-if ((Math.abs (this.e[m - 1]) + dd) == dd) {\r
-break;\r
-}}\r
-if (m != l) {\r
-iter++;\r
-if (iter == this.maxIter) {\r
-throw  new Exception (jalview.util.MessageManager.formatMessage ("exception.matrix_too_many_iteration",  Clazz.newArray (-1, ["tqli", Integer.$valueOf (this.maxIter).toString ()])));\r
-} else {\r
-}g = (this.d[l] - this.d[l - 1]) / (2.0 * this.e[l - 1]);\r
-r = Math.sqrt ((g * g) + 1.0);\r
-g = this.d[m - 1] - this.d[l - 1] + (this.e[l - 1] / (g + this.sign (r, g)));\r
-c = 1.0;\r
-s = c;\r
-p = 0.0;\r
-for (i = m - 1; i >= l; i--) {\r
-f = s * this.e[i - 1];\r
-b = c * this.e[i - 1];\r
-if (Math.abs (f) >= Math.abs (g)) {\r
-c = g / f;\r
-r = Math.sqrt ((c * c) + 1.0);\r
-this.e[i] = f * r;\r
-s = 1.0 / r;\r
-c *= s;\r
-} else {\r
-s = f / g;\r
-r = Math.sqrt ((s * s) + 1.0);\r
-this.e[i] = g * r;\r
-c = 1.0 / r;\r
-s *= c;\r
-}g = this.d[i] - p;\r
-r = ((this.d[i - 1] - g) * s) + (2.0 * c * b);\r
-p = s * r;\r
-this.d[i] = g + p;\r
-g = (c * r) - b;\r
-for (k = 1; k <= n; k++) {\r
-f = this.value[k - 1][i];\r
-this.value[k - 1][i] = (s * this.value[k - 1][i - 1]) + (c * f);\r
-this.value[k - 1][i - 1] = (c * this.value[k - 1][i - 1]) - (s * f);\r
-}\r
-}\r
-this.d[l - 1] = this.d[l - 1] - p;\r
-this.e[l - 1] = g;\r
-this.e[m - 1] = 0.0;\r
-}} while (m != l);\r
-}\r
-});\r
-Clazz.defineMethod (c$, "tred2", \r
-function () {\r
-var n = this.rows;\r
-var l;\r
-var k;\r
-var j;\r
-var i;\r
-var scale;\r
-var hh;\r
-var h;\r
-var g;\r
-var f;\r
-this.d =  Clazz.newDoubleArray (this.rows, 0);\r
-this.e =  Clazz.newDoubleArray (this.rows, 0);\r
-for (i = n - 1; i >= 1; i--) {\r
-l = i - 1;\r
-h = 0.0;\r
-scale = 0.0;\r
-if (l > 0) {\r
-for (k = 0; k < l; k++) {\r
-scale += Math.abs (this.value[i][k]);\r
-}\r
-if (scale == 0.0) {\r
-this.e[i] = this.value[i][l];\r
-} else {\r
-for (k = 0; k < l; k++) {\r
-this.value[i][k] /= scale;\r
-h += (this.value[i][k] * this.value[i][k]);\r
-}\r
-f = this.value[i][l];\r
-if (f > 0) {\r
-g = -1.0 * Math.sqrt (h);\r
-} else {\r
-g = Math.sqrt (h);\r
-}this.e[i] = scale * g;\r
-h -= (f * g);\r
-this.value[i][l] = f - g;\r
-f = 0.0;\r
-for (j = 0; j < l; j++) {\r
-this.value[j][i] = this.value[i][j] / h;\r
-g = 0.0;\r
-for (k = 0; k < j; k++) {\r
-g += (this.value[j][k] * this.value[i][k]);\r
-}\r
-for (k = j; k < l; k++) {\r
-g += (this.value[k][j] * this.value[i][k]);\r
-}\r
-this.e[j] = g / h;\r
-f += (this.e[j] * this.value[i][j]);\r
-}\r
-hh = f / (h + h);\r
-for (j = 0; j < l; j++) {\r
-f = this.value[i][j];\r
-g = this.e[j] - (hh * f);\r
-this.e[j] = g;\r
-for (k = 0; k < j; k++) {\r
-this.value[j][k] -= ((f * this.e[k]) + (g * this.value[i][k]));\r
-}\r
-}\r
-}} else {\r
-this.e[i] = this.value[i][l];\r
-}this.d[i] = h;\r
-}\r
-this.d[0] = 0.0;\r
-this.e[0] = 0.0;\r
-for (i = 0; i < n; i++) {\r
-l = i - 1;\r
-if (this.d[i] != 0.0) {\r
-for (j = 0; j < l; j++) {\r
-g = 0.0;\r
-for (k = 0; k < l; k++) {\r
-g += (this.value[i][k] * this.value[k][j]);\r
-}\r
-for (k = 0; k < l; k++) {\r
-this.value[k][j] -= (g * this.value[k][i]);\r
-}\r
-}\r
-}this.d[i] = this.value[i][i];\r
-this.value[i][i] = 1.0;\r
-for (j = 0; j < l; j++) {\r
-this.value[j][i] = 0.0;\r
-this.value[i][j] = 0.0;\r
-}\r
-}\r
-});\r
-Clazz.defineMethod (c$, "tqli2", \r
-function () {\r
-var n = this.rows;\r
-var m;\r
-var l;\r
-var iter;\r
-var i;\r
-var k;\r
-var s;\r
-var r;\r
-var p;\r
-;var g;\r
-var f;\r
-var dd;\r
-var c;\r
-var b;\r
-for (i = 2; i <= n; i++) {\r
-this.e[i - 2] = this.e[i - 1];\r
-}\r
-this.e[n - 1] = 0.0;\r
-for (l = 1; l <= n; l++) {\r
-iter = 0;\r
-do {\r
-for (m = l; m <= (n - 1); m++) {\r
-dd = Math.abs (this.d[m - 1]) + Math.abs (this.d[m]);\r
-if ((Math.abs (this.e[m - 1]) + dd) == dd) {\r
-break;\r
-}}\r
-if (m != l) {\r
-iter++;\r
-if (iter == this.maxIter) {\r
-throw  new Exception (jalview.util.MessageManager.formatMessage ("exception.matrix_too_many_iteration",  Clazz.newArray (-1, ["tqli2", Integer.$valueOf (this.maxIter).toString ()])));\r
-} else {\r
-}g = (this.d[l] - this.d[l - 1]) / (2.0 * this.e[l - 1]);\r
-r = Math.sqrt ((g * g) + 1.0);\r
-g = this.d[m - 1] - this.d[l - 1] + (this.e[l - 1] / (g + this.sign (r, g)));\r
-c = 1.0;\r
-s = c;\r
-p = 0.0;\r
-for (i = m - 1; i >= l; i--) {\r
-f = s * this.e[i - 1];\r
-b = c * this.e[i - 1];\r
-if (Math.abs (f) >= Math.abs (g)) {\r
-c = g / f;\r
-r = Math.sqrt ((c * c) + 1.0);\r
-this.e[i] = f * r;\r
-s = 1.0 / r;\r
-c *= s;\r
-} else {\r
-s = f / g;\r
-r = Math.sqrt ((s * s) + 1.0);\r
-this.e[i] = g * r;\r
-c = 1.0 / r;\r
-s *= c;\r
-}g = this.d[i] - p;\r
-r = ((this.d[i - 1] - g) * s) + (2.0 * c * b);\r
-p = s * r;\r
-this.d[i] = g + p;\r
-g = (c * r) - b;\r
-for (k = 1; k <= n; k++) {\r
-f = this.value[k - 1][i];\r
-this.value[k - 1][i] = (s * this.value[k - 1][i - 1]) + (c * f);\r
-this.value[k - 1][i - 1] = (c * this.value[k - 1][i - 1]) - (s * f);\r
-}\r
-}\r
-this.d[l - 1] = this.d[l - 1] - p;\r
-this.e[l - 1] = g;\r
-this.e[m - 1] = 0.0;\r
-}} while (m != l);\r
-}\r
-});\r
-Clazz.defineMethod (c$, "sign", \r
-function (a, b) {\r
-if (b < 0) {\r
-return -Math.abs (a);\r
-} else {\r
-return Math.abs (a);\r
-}}, "~N,~N");\r
-Clazz.defineMethod (c$, "getColumn", \r
-function (n) {\r
-var out =  Clazz.newDoubleArray (this.rows, 0);\r
-for (var i = 0; i < this.rows; i++) {\r
-out[i] = this.value[i][n];\r
-}\r
-return out;\r
-}, "~N");\r
-Clazz.defineMethod (c$, "printD", \r
-function (ps) {\r
-for (var j = 0; j < this.rows; j++) {\r
-jalview.util.Format.printDouble (ps, "%15.4e", this.d[j]);\r
-}\r
-}, "java.io.PrintStream");\r
-Clazz.defineMethod (c$, "printE", \r
-function (ps) {\r
-for (var j = 0; j < this.rows; j++) {\r
-jalview.util.Format.printDouble (ps, "%15.4e", this.e[j]);\r
-}\r
-}, "java.io.PrintStream");\r
-});\r
+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");
+});