Merge branch 'master' of https://source.jalview.org/git/jalviewjs.git
[jalviewjs.git] / site / j2s / JU / Eigen.js
index d2c5e9c..6bceb9d 100644 (file)
-Clazz.declarePackage ("JU");\r
-Clazz.load (["javajs.api.EigenInterface"], "JU.Eigen", ["JU.V3"], function () {\r
-c$ = Clazz.decorateAsClass (function () {\r
-this.n = 3;\r
-this.d = null;\r
-this.e = null;\r
-this.V = null;\r
-Clazz.instantialize (this, arguments);\r
-}, JU, "Eigen", null, javajs.api.EigenInterface);\r
-Clazz.makeConstructor (c$, \r
-function () {\r
-});\r
-Clazz.defineMethod (c$, "set", \r
-function (n) {\r
-this.n = n;\r
-this.V =  Clazz.newDoubleArray (n, n, 0);\r
-this.d =  Clazz.newDoubleArray (n, 0);\r
-this.e =  Clazz.newDoubleArray (n, 0);\r
-return this;\r
-}, "~N");\r
-Clazz.overrideMethod (c$, "setM", \r
-function (m) {\r
-this.set (m.length);\r
-this.calc (m);\r
-return this;\r
-}, "~A");\r
-Clazz.overrideMethod (c$, "getEigenvalues", \r
-function () {\r
-return this.d;\r
-});\r
-Clazz.overrideMethod (c$, "fillFloatArrays", \r
-function (eigenVectors, eigenValues) {\r
-for (var i = 0; i < 3; i++) {\r
-if (eigenVectors != null) {\r
-if (eigenVectors[i] == null) eigenVectors[i] =  new JU.V3 ();\r
-eigenVectors[i].set (this.V[0][i], this.V[1][i], this.V[2][i]);\r
-}if (eigenValues != null) eigenValues[i] = this.d[i];\r
-}\r
-}, "~A,~A");\r
-Clazz.overrideMethod (c$, "getEigenvectorsFloatTransposed", \r
-function () {\r
-var f =  Clazz.newFloatArray (this.n, this.n, 0);\r
-for (var i = this.n; --i >= 0; ) for (var j = this.n; --j >= 0; ) f[j][i] = this.V[i][j];\r
-\r
-\r
-return f;\r
-});\r
-Clazz.defineMethod (c$, "calc", \r
-function (A) {\r
-for (var i = 0; i < this.n; i++) {\r
-for (var j = 0; j < this.n; j++) {\r
-this.V[i][j] = A[i][j];\r
-}\r
-}\r
-this.tred2 ();\r
-this.tql2 ();\r
-}, "~A");\r
-Clazz.defineMethod (c$, "getRealEigenvalues", \r
-function () {\r
-return this.d;\r
-});\r
-Clazz.defineMethod (c$, "getImagEigenvalues", \r
-function () {\r
-return this.e;\r
-});\r
-Clazz.defineMethod (c$, "tred2", \r
- function () {\r
-for (var j = 0; j < this.n; j++) {\r
-this.d[j] = this.V[this.n - 1][j];\r
-}\r
-for (var i = this.n - 1; i > 0; i--) {\r
-var scale = 0.0;\r
-var h = 0.0;\r
-for (var k = 0; k < i; k++) {\r
-scale = scale + Math.abs (this.d[k]);\r
-}\r
-if (scale == 0.0) {\r
-this.e[i] = this.d[i - 1];\r
-for (var j = 0; j < i; j++) {\r
-this.d[j] = this.V[i - 1][j];\r
-this.V[i][j] = 0.0;\r
-this.V[j][i] = 0.0;\r
-}\r
-} else {\r
-for (var k = 0; k < i; k++) {\r
-this.d[k] /= scale;\r
-h += this.d[k] * this.d[k];\r
-}\r
-var f = this.d[i - 1];\r
-var g = Math.sqrt (h);\r
-if (f > 0) {\r
-g = -g;\r
-}this.e[i] = scale * g;\r
-h = h - f * g;\r
-this.d[i - 1] = f - g;\r
-for (var j = 0; j < i; j++) {\r
-this.e[j] = 0.0;\r
-}\r
-for (var j = 0; j < i; j++) {\r
-f = this.d[j];\r
-this.V[j][i] = f;\r
-g = this.e[j] + this.V[j][j] * f;\r
-for (var k = j + 1; k <= i - 1; k++) {\r
-g += this.V[k][j] * this.d[k];\r
-this.e[k] += this.V[k][j] * f;\r
-}\r
-this.e[j] = g;\r
-}\r
-f = 0.0;\r
-for (var j = 0; j < i; j++) {\r
-this.e[j] /= h;\r
-f += this.e[j] * this.d[j];\r
-}\r
-var hh = f / (h + h);\r
-for (var j = 0; j < i; j++) {\r
-this.e[j] -= hh * this.d[j];\r
-}\r
-for (var j = 0; j < i; j++) {\r
-f = this.d[j];\r
-g = this.e[j];\r
-for (var k = j; k <= i - 1; k++) {\r
-this.V[k][j] -= (f * this.e[k] + g * this.d[k]);\r
-}\r
-this.d[j] = this.V[i - 1][j];\r
-this.V[i][j] = 0.0;\r
-}\r
-}this.d[i] = h;\r
-}\r
-for (var i = 0; i < this.n - 1; i++) {\r
-this.V[this.n - 1][i] = this.V[i][i];\r
-this.V[i][i] = 1.0;\r
-var h = this.d[i + 1];\r
-if (h != 0.0) {\r
-for (var k = 0; k <= i; k++) {\r
-this.d[k] = this.V[k][i + 1] / h;\r
-}\r
-for (var j = 0; j <= i; j++) {\r
-var g = 0.0;\r
-for (var k = 0; k <= i; k++) {\r
-g += this.V[k][i + 1] * this.V[k][j];\r
-}\r
-for (var k = 0; k <= i; k++) {\r
-this.V[k][j] -= g * this.d[k];\r
-}\r
-}\r
-}for (var k = 0; k <= i; k++) {\r
-this.V[k][i + 1] = 0.0;\r
-}\r
-}\r
-for (var j = 0; j < this.n; j++) {\r
-this.d[j] = this.V[this.n - 1][j];\r
-this.V[this.n - 1][j] = 0.0;\r
-}\r
-this.V[this.n - 1][this.n - 1] = 1.0;\r
-this.e[0] = 0.0;\r
-});\r
-Clazz.defineMethod (c$, "tql2", \r
- function () {\r
-for (var i = 1; i < this.n; i++) {\r
-this.e[i - 1] = this.e[i];\r
-}\r
-this.e[this.n - 1] = 0.0;\r
-var f = 0.0;\r
-var tst1 = 0.0;\r
-var eps = Math.pow (2.0, -52.0);\r
-for (var l = 0; l < this.n; l++) {\r
-tst1 = Math.max (tst1, Math.abs (this.d[l]) + Math.abs (this.e[l]));\r
-var m = l;\r
-while (m < this.n) {\r
-if (Math.abs (this.e[m]) <= eps * tst1) {\r
-break;\r
-}m++;\r
-}\r
-if (m > l) {\r
-var iter = 0;\r
-do {\r
-iter = iter + 1;\r
-var g = this.d[l];\r
-var p = (this.d[l + 1] - g) / (2.0 * this.e[l]);\r
-var r = JU.Eigen.hypot (p, 1.0);\r
-if (p < 0) {\r
-r = -r;\r
-}this.d[l] = this.e[l] / (p + r);\r
-this.d[l + 1] = this.e[l] * (p + r);\r
-var dl1 = this.d[l + 1];\r
-var h = g - this.d[l];\r
-for (var i = l + 2; i < this.n; i++) {\r
-this.d[i] -= h;\r
-}\r
-f = f + h;\r
-p = this.d[m];\r
-var c = 1.0;\r
-var c2 = c;\r
-var c3 = c;\r
-var el1 = this.e[l + 1];\r
-var s = 0.0;\r
-var s2 = 0.0;\r
-for (var i = m - 1; i >= l; i--) {\r
-c3 = c2;\r
-c2 = c;\r
-s2 = s;\r
-g = c * this.e[i];\r
-h = c * p;\r
-r = JU.Eigen.hypot (p, this.e[i]);\r
-this.e[i + 1] = s * r;\r
-s = this.e[i] / r;\r
-c = p / r;\r
-p = c * this.d[i] - s * g;\r
-this.d[i + 1] = h + s * (c * g + s * this.d[i]);\r
-for (var k = 0; k < this.n; k++) {\r
-h = this.V[k][i + 1];\r
-this.V[k][i + 1] = s * this.V[k][i] + c * h;\r
-this.V[k][i] = c * this.V[k][i] - s * h;\r
-}\r
-}\r
-p = -s * s2 * c3 * el1 * this.e[l] / dl1;\r
-this.e[l] = s * p;\r
-this.d[l] = c * p;\r
-} while (Math.abs (this.e[l]) > eps * tst1);\r
-}this.d[l] = this.d[l] + f;\r
-this.e[l] = 0.0;\r
-}\r
-for (var i = 0; i < this.n - 1; i++) {\r
-var k = i;\r
-var p = this.d[i];\r
-for (var j = i + 1; j < this.n; j++) {\r
-if (this.d[j] < p) {\r
-k = j;\r
-p = this.d[j];\r
-}}\r
-if (k != i) {\r
-this.d[k] = this.d[i];\r
-this.d[i] = p;\r
-for (var j = 0; j < this.n; j++) {\r
-p = this.V[j][i];\r
-this.V[j][i] = this.V[j][k];\r
-this.V[j][k] = p;\r
-}\r
-}}\r
-});\r
-c$.hypot = Clazz.defineMethod (c$, "hypot", \r
- function (a, b) {\r
-var r;\r
-if (Math.abs (a) > Math.abs (b)) {\r
-r = b / a;\r
-r = Math.abs (a) * Math.sqrt (1 + r * r);\r
-} else if (b != 0) {\r
-r = a / b;\r
-r = Math.abs (b) * Math.sqrt (1 + r * r);\r
-} else {\r
-r = 0.0;\r
-}return r;\r
-}, "~N,~N");\r
-});\r
+Clazz.declarePackage ("JU");
+Clazz.load (["javajs.api.EigenInterface"], "JU.Eigen", ["JU.V3"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.n = 3;
+this.d = null;
+this.e = null;
+this.V = null;
+Clazz.instantialize (this, arguments);
+}, JU, "Eigen", null, javajs.api.EigenInterface);
+Clazz.makeConstructor (c$, 
+function () {
+});
+Clazz.defineMethod (c$, "set", 
+function (n) {
+this.n = n;
+this.V =  Clazz.newDoubleArray (n, n, 0);
+this.d =  Clazz.newDoubleArray (n, 0);
+this.e =  Clazz.newDoubleArray (n, 0);
+return this;
+}, "~N");
+Clazz.overrideMethod (c$, "setM", 
+function (m) {
+this.set (m.length);
+this.calc (m);
+return this;
+}, "~A");
+Clazz.overrideMethod (c$, "getEigenvalues", 
+function () {
+return this.d;
+});
+Clazz.overrideMethod (c$, "fillFloatArrays", 
+function (eigenVectors, eigenValues) {
+for (var i = 0; i < 3; i++) {
+if (eigenVectors != null) {
+if (eigenVectors[i] == null) eigenVectors[i] =  new JU.V3 ();
+eigenVectors[i].set (this.V[0][i], this.V[1][i], this.V[2][i]);
+}if (eigenValues != null) eigenValues[i] = this.d[i];
+}
+}, "~A,~A");
+Clazz.overrideMethod (c$, "getEigenvectorsFloatTransposed", 
+function () {
+var f =  Clazz.newFloatArray (this.n, this.n, 0);
+for (var i = this.n; --i >= 0; ) for (var j = this.n; --j >= 0; ) f[j][i] = this.V[i][j];
+
+
+return f;
+});
+Clazz.defineMethod (c$, "calc", 
+function (A) {
+for (var i = 0; i < this.n; i++) {
+for (var j = 0; j < this.n; j++) {
+this.V[i][j] = A[i][j];
+}
+}
+this.tred2 ();
+this.tql2 ();
+}, "~A");
+Clazz.defineMethod (c$, "getRealEigenvalues", 
+function () {
+return this.d;
+});
+Clazz.defineMethod (c$, "getImagEigenvalues", 
+function () {
+return this.e;
+});
+Clazz.defineMethod (c$, "tred2", 
+ function () {
+for (var j = 0; j < this.n; j++) {
+this.d[j] = this.V[this.n - 1][j];
+}
+for (var i = this.n - 1; i > 0; i--) {
+var scale = 0.0;
+var h = 0.0;
+for (var k = 0; k < i; k++) {
+scale = scale + Math.abs (this.d[k]);
+}
+if (scale == 0.0) {
+this.e[i] = this.d[i - 1];
+for (var j = 0; j < i; j++) {
+this.d[j] = this.V[i - 1][j];
+this.V[i][j] = 0.0;
+this.V[j][i] = 0.0;
+}
+} else {
+for (var k = 0; k < i; k++) {
+this.d[k] /= scale;
+h += this.d[k] * this.d[k];
+}
+var f = this.d[i - 1];
+var g = Math.sqrt (h);
+if (f > 0) {
+g = -g;
+}this.e[i] = scale * g;
+h = h - f * g;
+this.d[i - 1] = f - g;
+for (var j = 0; j < i; j++) {
+this.e[j] = 0.0;
+}
+for (var j = 0; j < i; j++) {
+f = this.d[j];
+this.V[j][i] = f;
+g = this.e[j] + this.V[j][j] * f;
+for (var k = j + 1; k <= i - 1; k++) {
+g += this.V[k][j] * this.d[k];
+this.e[k] += this.V[k][j] * f;
+}
+this.e[j] = g;
+}
+f = 0.0;
+for (var j = 0; j < i; j++) {
+this.e[j] /= h;
+f += this.e[j] * this.d[j];
+}
+var hh = f / (h + h);
+for (var j = 0; j < i; j++) {
+this.e[j] -= hh * this.d[j];
+}
+for (var j = 0; j < i; j++) {
+f = this.d[j];
+g = this.e[j];
+for (var k = j; k <= i - 1; k++) {
+this.V[k][j] -= (f * this.e[k] + g * this.d[k]);
+}
+this.d[j] = this.V[i - 1][j];
+this.V[i][j] = 0.0;
+}
+}this.d[i] = h;
+}
+for (var i = 0; i < this.n - 1; i++) {
+this.V[this.n - 1][i] = this.V[i][i];
+this.V[i][i] = 1.0;
+var h = this.d[i + 1];
+if (h != 0.0) {
+for (var k = 0; k <= i; k++) {
+this.d[k] = this.V[k][i + 1] / h;
+}
+for (var j = 0; j <= i; j++) {
+var g = 0.0;
+for (var k = 0; k <= i; k++) {
+g += this.V[k][i + 1] * this.V[k][j];
+}
+for (var k = 0; k <= i; k++) {
+this.V[k][j] -= g * this.d[k];
+}
+}
+}for (var k = 0; k <= i; k++) {
+this.V[k][i + 1] = 0.0;
+}
+}
+for (var j = 0; j < this.n; j++) {
+this.d[j] = this.V[this.n - 1][j];
+this.V[this.n - 1][j] = 0.0;
+}
+this.V[this.n - 1][this.n - 1] = 1.0;
+this.e[0] = 0.0;
+});
+Clazz.defineMethod (c$, "tql2", 
+ function () {
+for (var i = 1; i < this.n; i++) {
+this.e[i - 1] = this.e[i];
+}
+this.e[this.n - 1] = 0.0;
+var f = 0.0;
+var tst1 = 0.0;
+var eps = Math.pow (2.0, -52.0);
+for (var l = 0; l < this.n; l++) {
+tst1 = Math.max (tst1, Math.abs (this.d[l]) + Math.abs (this.e[l]));
+var m = l;
+while (m < this.n) {
+if (Math.abs (this.e[m]) <= eps * tst1) {
+break;
+}m++;
+}
+if (m > l) {
+var iter = 0;
+do {
+iter = iter + 1;
+var g = this.d[l];
+var p = (this.d[l + 1] - g) / (2.0 * this.e[l]);
+var r = JU.Eigen.hypot (p, 1.0);
+if (p < 0) {
+r = -r;
+}this.d[l] = this.e[l] / (p + r);
+this.d[l + 1] = this.e[l] * (p + r);
+var dl1 = this.d[l + 1];
+var h = g - this.d[l];
+for (var i = l + 2; i < this.n; i++) {
+this.d[i] -= h;
+}
+f = f + h;
+p = this.d[m];
+var c = 1.0;
+var c2 = c;
+var c3 = c;
+var el1 = this.e[l + 1];
+var s = 0.0;
+var s2 = 0.0;
+for (var i = m - 1; i >= l; i--) {
+c3 = c2;
+c2 = c;
+s2 = s;
+g = c * this.e[i];
+h = c * p;
+r = JU.Eigen.hypot (p, this.e[i]);
+this.e[i + 1] = s * r;
+s = this.e[i] / r;
+c = p / r;
+p = c * this.d[i] - s * g;
+this.d[i + 1] = h + s * (c * g + s * this.d[i]);
+for (var k = 0; k < this.n; k++) {
+h = this.V[k][i + 1];
+this.V[k][i + 1] = s * this.V[k][i] + c * h;
+this.V[k][i] = c * this.V[k][i] - s * h;
+}
+}
+p = -s * s2 * c3 * el1 * this.e[l] / dl1;
+this.e[l] = s * p;
+this.d[l] = c * p;
+} while (Math.abs (this.e[l]) > eps * tst1);
+}this.d[l] = this.d[l] + f;
+this.e[l] = 0.0;
+}
+for (var i = 0; i < this.n - 1; i++) {
+var k = i;
+var p = this.d[i];
+for (var j = i + 1; j < this.n; j++) {
+if (this.d[j] < p) {
+k = j;
+p = this.d[j];
+}}
+if (k != i) {
+this.d[k] = this.d[i];
+this.d[i] = p;
+for (var j = 0; j < this.n; j++) {
+p = this.V[j][i];
+this.V[j][i] = this.V[j][k];
+this.V[j][k] = p;
+}
+}}
+});
+c$.hypot = Clazz.defineMethod (c$, "hypot", 
+ function (a, b) {
+var r;
+if (Math.abs (a) > Math.abs (b)) {
+r = b / a;
+r = Math.abs (a) * Math.sqrt (1 + r * r);
+} else if (b != 0) {
+r = a / b;
+r = Math.abs (b) * Math.sqrt (1 + r * r);
+} else {
+r = 0.0;
+}return r;
+}, "~N,~N");
+});