@zushah/chalkboard 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -2
- package/README.md +7 -7
- package/dist/Chalkboard.d.ts +56 -12
- package/dist/Chalkboard.d.ts.map +1 -1
- package/dist/Chalkboard.js +1977 -571
- package/dist/Chalkboard.js.map +1 -1
- package/package.json +7 -6
- package/examples/README.md +0 -12
- package/examples/fluid.js +0 -80
- package/examples/hyperbolics.js +0 -90
- package/examples/mandelbrot.js +0 -54
- package/examples/matr-donut.js +0 -51
- package/examples/newton.js +0 -50
- package/examples/quat-donut.js +0 -52
package/dist/Chalkboard.js
CHANGED
|
@@ -54,7 +54,7 @@ var Chalkboard;
|
|
|
54
54
|
return Chalkboard.vect.init(callback(vect.x), callback(vect.y), callback(vect.z), callback(vect.w));
|
|
55
55
|
}
|
|
56
56
|
else {
|
|
57
|
-
throw new TypeError(
|
|
57
|
+
throw new TypeError('Parameter "object" must be of type "ChalkboardComplex", "ChalkboardMatrix", "ChalkboardQuaternion", "ChalkboardTensor", or "ChalkboardVector".');
|
|
58
58
|
}
|
|
59
59
|
};
|
|
60
60
|
Chalkboard.CONTEXT = typeof window !== "undefined" ? "ctx" : "0";
|
|
@@ -62,14 +62,14 @@ var Chalkboard;
|
|
|
62
62
|
if (exponent === void 0) { exponent = 1; }
|
|
63
63
|
return Math.pow(Math.pow(10, 1 / Math.log(10)), exponent);
|
|
64
64
|
};
|
|
65
|
-
Chalkboard.LOGO = function (x, y,
|
|
65
|
+
Chalkboard.LOGO = function (x, y, size, context) {
|
|
66
66
|
if (x === void 0) { x = Chalkboard.real.parse(Chalkboard.CONTEXT).canvas.width / 2; }
|
|
67
67
|
if (y === void 0) { y = Chalkboard.real.parse(Chalkboard.CONTEXT).canvas.height / 2; }
|
|
68
|
-
if (
|
|
68
|
+
if (size === void 0) { size = 1; }
|
|
69
69
|
if (context === void 0) { context = Chalkboard.real.parse(Chalkboard.CONTEXT); }
|
|
70
70
|
context.save();
|
|
71
71
|
context.translate(x, y);
|
|
72
|
-
context.scale(
|
|
72
|
+
context.scale(size, size);
|
|
73
73
|
context.fillStyle = "rgb(25, 25, 25)";
|
|
74
74
|
context.beginPath();
|
|
75
75
|
context.ellipse(0, 0, 50, 50, 0, 0, Chalkboard.PI(2));
|
|
@@ -105,10 +105,10 @@ var Chalkboard;
|
|
|
105
105
|
Chalkboard.VERSION +
|
|
106
106
|
" " +
|
|
107
107
|
Chalkboard.VERSIONALIAS +
|
|
108
|
-
" released 01/
|
|
108
|
+
" released 01/22/2024\nAuthored by Zushah ===> https://www.github.com/Zushah\nAvailable under the MIT License ===> https://www.opensource.org/license/mit/\n\nThe Chalkboard library is a JavaScript namespace that provides a plethora of both practical and abstract mathematical functionalities for its user.\n\nRepository ===> https://www.github.com/Zushah/Chalkboard\nWebsite ===> https://zushah.github.io/Chalkboard");
|
|
109
109
|
};
|
|
110
|
-
Chalkboard.VERSION = "2.
|
|
111
|
-
Chalkboard.VERSIONALIAS = "
|
|
110
|
+
Chalkboard.VERSION = "2.1.0";
|
|
111
|
+
Chalkboard.VERSIONALIAS = "Seki";
|
|
112
112
|
})(Chalkboard || (Chalkboard = {}));
|
|
113
113
|
if (typeof window === "undefined") {
|
|
114
114
|
module.exports = Chalkboard;
|
|
@@ -319,8 +319,8 @@ var Chalkboard;
|
|
|
319
319
|
var dt = (tsup - tinf) / 100, ds = (ssup - sinf) / 100;
|
|
320
320
|
for (var s = sinf; s <= ssup; s += ds) {
|
|
321
321
|
for (var t = tinf; t <= tsup; t += dt) {
|
|
322
|
-
drds = Chalkboard.matr.toVector(Chalkboard.calc.grad(func, Chalkboard.vect.init(s, t)), 3,
|
|
323
|
-
drdt = Chalkboard.matr.toVector(Chalkboard.calc.grad(func, Chalkboard.vect.init(s, t)), 3,
|
|
322
|
+
drds = Chalkboard.matr.toVector(Chalkboard.calc.grad(func, Chalkboard.vect.init(s, t)), 3, 0, 0);
|
|
323
|
+
drdt = Chalkboard.matr.toVector(Chalkboard.calc.grad(func, Chalkboard.vect.init(s, t)), 3, 1, 0);
|
|
324
324
|
result += Chalkboard.vect.mag(Chalkboard.vect.cross(drds, drdt));
|
|
325
325
|
}
|
|
326
326
|
}
|
|
@@ -357,8 +357,8 @@ var Chalkboard;
|
|
|
357
357
|
var dt = (tsup - tinf) / 100, ds = (ssup - sinf) / 100;
|
|
358
358
|
for (var s = sinf; s <= ssup; s += ds) {
|
|
359
359
|
for (var t = tinf; t <= tsup; t += dt) {
|
|
360
|
-
drds = Chalkboard.matr.toVector(Chalkboard.calc.grad(func, Chalkboard.vect.init(s, t)), 3,
|
|
361
|
-
drdt = Chalkboard.matr.toVector(Chalkboard.calc.grad(func, Chalkboard.vect.init(s, t)), 3,
|
|
360
|
+
drds = Chalkboard.matr.toVector(Chalkboard.calc.grad(func, Chalkboard.vect.init(s, t)), 3, 0, 0);
|
|
361
|
+
drdt = Chalkboard.matr.toVector(Chalkboard.calc.grad(func, Chalkboard.vect.init(s, t)), 3, 1, 0);
|
|
362
362
|
result += Chalkboard.vect.scalarTriple(Chalkboard.vect.fromField(vectfield, Chalkboard.real.val(func, Chalkboard.vect.init(s, t))), drds, drdt);
|
|
363
363
|
}
|
|
364
364
|
}
|
|
@@ -670,6 +670,9 @@ var Chalkboard;
|
|
|
670
670
|
comp_1.arg = function (comp) {
|
|
671
671
|
return Chalkboard.trig.arctan2(comp.b, comp.a);
|
|
672
672
|
};
|
|
673
|
+
comp_1.argBetween = function (comp1, comp2) {
|
|
674
|
+
return Chalkboard.vect.angBetween(Chalkboard.comp.toVector(comp1), Chalkboard.comp.toVector(comp2));
|
|
675
|
+
};
|
|
673
676
|
comp_1.conjugate = function (comp) {
|
|
674
677
|
return Chalkboard.comp.init(comp.a, -comp.b);
|
|
675
678
|
};
|
|
@@ -810,6 +813,9 @@ var Chalkboard;
|
|
|
810
813
|
comp_1.toArray = function (comp) {
|
|
811
814
|
return [comp.a, comp.b];
|
|
812
815
|
};
|
|
816
|
+
comp_1.toMatrix = function (comp) {
|
|
817
|
+
return Chalkboard.matr.init([comp.a, -comp.b], [comp.b, comp.a]);
|
|
818
|
+
};
|
|
813
819
|
comp_1.toString = function (comp) {
|
|
814
820
|
if (comp.b >= 0) {
|
|
815
821
|
return comp.a.toString() + " + " + comp.b.toString() + "i";
|
|
@@ -995,32 +1001,54 @@ var Chalkboard;
|
|
|
995
1001
|
var matr;
|
|
996
1002
|
(function (matr_1) {
|
|
997
1003
|
matr_1.absolute = function (matr) {
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
result[i] = [];
|
|
1001
|
-
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
1002
|
-
result[i][j] = Math.abs(matr[i][j]);
|
|
1003
|
-
}
|
|
1004
|
+
if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
1005
|
+
return Chalkboard.matr.init([Math.abs(matr[0][0]), Math.abs(matr[0][1])], [Math.abs(matr[1][0]), Math.abs(matr[1][1])]);
|
|
1004
1006
|
}
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
if (Chalkboard.matr.
|
|
1007
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
1008
|
+
return Chalkboard.matr.init([Math.abs(matr[0][0]), Math.abs(matr[0][1]), Math.abs(matr[0][2])], [Math.abs(matr[1][0]), Math.abs(matr[1][1]), Math.abs(matr[1][2])], [Math.abs(matr[2][0]), Math.abs(matr[2][1]), Math.abs(matr[2][2])]);
|
|
1009
|
+
}
|
|
1010
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
1011
|
+
return Chalkboard.matr.init([Math.abs(matr[0][0]), Math.abs(matr[0][1]), Math.abs(matr[0][2]), Math.abs(matr[0][3])], [Math.abs(matr[1][0]), Math.abs(matr[1][1]), Math.abs(matr[1][2]), Math.abs(matr[1][3])], [Math.abs(matr[2][0]), Math.abs(matr[2][1]), Math.abs(matr[2][2]), Math.abs(matr[2][3])], [Math.abs(matr[3][0]), Math.abs(matr[3][1]), Math.abs(matr[3][2]), Math.abs(matr[3][3])]);
|
|
1012
|
+
}
|
|
1013
|
+
else {
|
|
1009
1014
|
var result = Chalkboard.matr.init();
|
|
1010
|
-
for (var i = 0; i < Chalkboard.matr.rows(
|
|
1015
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
1011
1016
|
result[i] = [];
|
|
1012
|
-
for (var j = 0; j < Chalkboard.matr.cols(
|
|
1013
|
-
result[i][j] =
|
|
1017
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
1018
|
+
result[i][j] = Math.abs(matr[i][j]);
|
|
1014
1019
|
}
|
|
1015
1020
|
}
|
|
1016
1021
|
return result;
|
|
1017
1022
|
}
|
|
1023
|
+
};
|
|
1024
|
+
matr_1.add = function (matr1, matr2) {
|
|
1025
|
+
if (Chalkboard.matr.isSizeEqual(matr1, matr2)) {
|
|
1026
|
+
if (Chalkboard.matr.isSizeOf(matr1, 2)) {
|
|
1027
|
+
return Chalkboard.matr.init([matr1[0][0] + matr2[0][0], matr1[0][1] + matr2[0][1]], [matr1[1][0] + matr2[1][0], matr1[1][1] + matr2[1][1]]);
|
|
1028
|
+
}
|
|
1029
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 3)) {
|
|
1030
|
+
return Chalkboard.matr.init([matr1[0][0] + matr2[0][0], matr1[0][1] + matr2[0][1], matr1[0][2] + matr2[0][2]], [matr1[1][0] + matr2[1][0], matr1[1][1] + matr2[1][1], matr1[1][2] + matr2[1][2]], [matr1[2][0] + matr2[2][0], matr1[2][1] + matr2[2][1], matr1[2][2] + matr2[2][2]]);
|
|
1031
|
+
}
|
|
1032
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 4)) {
|
|
1033
|
+
return Chalkboard.matr.init([matr1[0][0] + matr2[0][0], matr1[0][1] + matr2[0][1], matr1[0][2] + matr2[0][2], matr1[0][3] + matr2[0][3]], [matr1[1][0] + matr2[1][0], matr1[1][1] + matr2[1][1], matr1[1][2] + matr2[1][2], matr1[1][3] + matr2[1][3]], [matr1[2][0] + matr2[2][0], matr1[2][1] + matr2[2][1], matr1[2][2] + matr2[2][2], matr1[2][3] + matr2[2][3]], [matr1[3][0] + matr2[3][0], matr1[3][1] + matr2[3][1], matr1[3][2] + matr2[3][2], matr1[3][3] + matr2[3][3]]);
|
|
1034
|
+
}
|
|
1035
|
+
else {
|
|
1036
|
+
var result = Chalkboard.matr.init();
|
|
1037
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr1); i++) {
|
|
1038
|
+
result[i] = [];
|
|
1039
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr1); j++) {
|
|
1040
|
+
result[i][j] = matr1[i][j] + matr2[i][j];
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
return result;
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1018
1046
|
else {
|
|
1019
1047
|
throw new TypeError('Parameters "matr1" and "matr2" must be of type "ChalkboardMatrix" with equivalent numbers of rows and columns.');
|
|
1020
1048
|
}
|
|
1021
1049
|
};
|
|
1022
1050
|
matr_1.addKronecker = function (matr1, matr2) {
|
|
1023
|
-
if (Chalkboard.matr.
|
|
1051
|
+
if (Chalkboard.matr.isSquare(matr1) && Chalkboard.matr.isSquare(matr2)) {
|
|
1024
1052
|
return Chalkboard.matr.add(Chalkboard.matr.mulKronecker(matr1, Chalkboard.matr.identity(Chalkboard.matr.rows(matr1))), Chalkboard.matr.mulKronecker(Chalkboard.matr.identity(Chalkboard.matr.rows(matr2)), matr2));
|
|
1025
1053
|
}
|
|
1026
1054
|
else {
|
|
@@ -1030,33 +1058,12 @@ var Chalkboard;
|
|
|
1030
1058
|
matr_1.adjugate = function (matr, row, col) {
|
|
1031
1059
|
return Chalkboard.matr.transpose(Chalkboard.matr.cofactor(matr, row, col));
|
|
1032
1060
|
};
|
|
1033
|
-
matr_1.binomial = function (size, type) {
|
|
1034
|
-
if (type === void 0) { type = "lower"; }
|
|
1035
|
-
var result = Chalkboard.matr.init();
|
|
1036
|
-
for (var i = 0; i < size; i++) {
|
|
1037
|
-
result.push([]);
|
|
1038
|
-
for (var j = 0; j < size; j++) {
|
|
1039
|
-
if (type === "lower") {
|
|
1040
|
-
result[i].push(Chalkboard.numb.binomial(i, j));
|
|
1041
|
-
}
|
|
1042
|
-
else if (type === "upper") {
|
|
1043
|
-
result[i].push(Chalkboard.numb.binomial(j, i));
|
|
1044
|
-
}
|
|
1045
|
-
}
|
|
1046
|
-
}
|
|
1047
|
-
if (type === "symmetric") {
|
|
1048
|
-
return Chalkboard.matr.mul(Chalkboard.matr.binomial(size, "lower"), Chalkboard.matr.binomial(size, "upper"));
|
|
1049
|
-
}
|
|
1050
|
-
else {
|
|
1051
|
-
return result;
|
|
1052
|
-
}
|
|
1053
|
-
};
|
|
1054
1061
|
matr_1.cofactor = function (matr, row, col) {
|
|
1055
1062
|
return matr
|
|
1056
|
-
.slice(0, row
|
|
1057
|
-
.concat(matr.slice(row))
|
|
1063
|
+
.slice(0, row)
|
|
1064
|
+
.concat(matr.slice(row + 1))
|
|
1058
1065
|
.map(function (row) {
|
|
1059
|
-
return row.slice(0, col
|
|
1066
|
+
return row.slice(0, col).concat(row.slice(col + 1));
|
|
1060
1067
|
});
|
|
1061
1068
|
};
|
|
1062
1069
|
matr_1.cols = function (matr) {
|
|
@@ -1065,65 +1072,152 @@ var Chalkboard;
|
|
|
1065
1072
|
matr_1.colspace = function (matr) {
|
|
1066
1073
|
return Chalkboard.matr.transpose(Chalkboard.matr.rowspace(Chalkboard.matr.transpose(matr)));
|
|
1067
1074
|
};
|
|
1068
|
-
matr_1.concat = function (matr1, matr2,
|
|
1069
|
-
if (
|
|
1070
|
-
if (
|
|
1071
|
-
if (Chalkboard.matr.
|
|
1072
|
-
|
|
1075
|
+
matr_1.concat = function (matr1, matr2, axis) {
|
|
1076
|
+
if (axis === void 0) { axis = 0; }
|
|
1077
|
+
if (axis === 0) {
|
|
1078
|
+
if (Chalkboard.matr.cols(matr1) === Chalkboard.matr.cols(matr2)) {
|
|
1079
|
+
if (Chalkboard.matr.isSizeOf(matr1, 2) && Chalkboard.matr.rows(matr2) === 2) {
|
|
1080
|
+
return Chalkboard.matr.init([matr1[0][0], matr1[0][1]], [matr1[1][0], matr1[1][1]], [matr2[0][0], matr2[0][1]], [matr2[1][0], matr2[1][1]]);
|
|
1081
|
+
}
|
|
1082
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 3) && Chalkboard.matr.rows(matr2) === 3) {
|
|
1083
|
+
return Chalkboard.matr.init([matr1[0][0], matr1[0][1], matr1[0][2]], [matr1[1][0], matr1[1][1], matr1[1][2]], [matr1[2][0], matr1[2][1], matr1[2][2]], [matr2[0][0], matr2[0][1], matr2[0][2]], [matr2[1][0], matr2[1][1], matr2[1][2]], [matr2[2][0], matr2[2][1], matr2[2][2]]);
|
|
1084
|
+
}
|
|
1085
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 4) && Chalkboard.matr.rows(matr2) === 4) {
|
|
1086
|
+
return Chalkboard.matr.init([matr1[0][0], matr1[0][1], matr1[0][2], matr1[0][3]], [matr1[1][0], matr1[1][1], matr1[1][2], matr1[1][3]], [matr1[2][0], matr1[2][1], matr1[2][2], matr1[2][3]], [matr1[3][0], matr1[3][1], matr1[3][2], matr1[3][3]], [matr2[0][0], matr2[0][1], matr2[0][2], matr2[0][3]], [matr2[1][0], matr2[1][1], matr2[1][2], matr2[1][3]], [matr2[2][0], matr2[2][1], matr2[2][2], matr2[2][3]], [matr2[3][0], matr2[3][1], matr2[3][2], matr2[3][3]]);
|
|
1087
|
+
}
|
|
1088
|
+
else {
|
|
1089
|
+
return Chalkboard.matr.init(matr1.concat(matr2));
|
|
1090
|
+
}
|
|
1073
1091
|
}
|
|
1074
1092
|
else {
|
|
1075
|
-
throw new TypeError('Parameters "matr1" and "matr2" must be of type "ChalkboardMatrix" with equivalent numbers of
|
|
1093
|
+
throw new TypeError('Parameters "matr1" and "matr2" must be of type "ChalkboardMatrix" with equivalent numbers of columns.');
|
|
1076
1094
|
}
|
|
1077
1095
|
}
|
|
1078
|
-
else if (
|
|
1079
|
-
if (Chalkboard.matr.
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1096
|
+
else if (axis === 1) {
|
|
1097
|
+
if (Chalkboard.matr.rows(matr1) === Chalkboard.matr.rows(matr2)) {
|
|
1098
|
+
if (Chalkboard.matr.isSizeOf(matr1, 2) && Chalkboard.matr.cols(matr2) === 2) {
|
|
1099
|
+
return Chalkboard.matr.init([matr1[0][0], matr1[0][1], matr2[0][0], matr2[0][1]], [matr1[1][0], matr1[1][1], matr2[1][0], matr2[1][1]]);
|
|
1100
|
+
}
|
|
1101
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 3) && Chalkboard.matr.cols(matr2) === 3) {
|
|
1102
|
+
return Chalkboard.matr.init([matr1[0][0], matr1[0][1], matr1[0][2], matr2[0][0], matr2[0][1], matr2[0][2]], [matr1[1][0], matr1[1][1], matr1[1][2], matr2[1][0], matr2[1][1], matr2[1][2]], [matr1[2][0], matr1[2][1], matr1[2][2], matr2[2][0], matr2[2][1], matr2[2][2]]);
|
|
1103
|
+
}
|
|
1104
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 4) && Chalkboard.matr.cols(matr2) === 4) {
|
|
1105
|
+
return Chalkboard.matr.init([matr1[0][0], matr1[0][1], matr1[0][2], matr1[0][3], matr2[0][0], matr2[0][1], matr2[0][2], matr2[0][3]], [matr1[1][0], matr1[1][1], matr1[1][2], matr1[1][3], matr2[1][0], matr2[1][1], matr2[1][2], matr2[1][3]], [matr1[2][0], matr1[2][1], matr1[2][2], matr1[2][3], matr2[2][0], matr2[2][1], matr2[2][2], matr2[2][3]], [matr1[3][0], matr1[3][1], matr1[3][2], matr1[3][3], matr2[3][0], matr2[3][1], matr2[3][2], matr2[3][3]]);
|
|
1106
|
+
}
|
|
1107
|
+
else {
|
|
1108
|
+
var result = Chalkboard.matr.init();
|
|
1109
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr1); i++) {
|
|
1110
|
+
result.push(matr1[i].concat(matr2[i]));
|
|
1111
|
+
}
|
|
1112
|
+
return result;
|
|
1083
1113
|
}
|
|
1084
|
-
return result;
|
|
1085
1114
|
}
|
|
1086
1115
|
else {
|
|
1087
|
-
throw new TypeError('Parameters "matr1" and "matr2" must be of type "ChalkboardMatrix" with equivalent numbers of
|
|
1116
|
+
throw new TypeError('Parameters "matr1" and "matr2" must be of type "ChalkboardMatrix" with equivalent numbers of rows.');
|
|
1088
1117
|
}
|
|
1089
1118
|
}
|
|
1090
1119
|
else {
|
|
1091
|
-
throw new TypeError('Parameter "
|
|
1120
|
+
throw new TypeError('Parameter "axis" must be 0 or 1.');
|
|
1092
1121
|
}
|
|
1093
1122
|
};
|
|
1094
1123
|
matr_1.constrain = function (matr, range) {
|
|
1095
1124
|
if (range === void 0) { range = [0, 1]; }
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1125
|
+
if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
1126
|
+
return Chalkboard.matr.init([Chalkboard.numb.constrain(matr[0][0], range), Chalkboard.numb.constrain(matr[0][1], range)], [Chalkboard.numb.constrain(matr[1][0], range), Chalkboard.numb.constrain(matr[1][1], range)]);
|
|
1127
|
+
}
|
|
1128
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
1129
|
+
return Chalkboard.matr.init([Chalkboard.numb.constrain(matr[0][0], range), Chalkboard.numb.constrain(matr[0][1], range), Chalkboard.numb.constrain(matr[0][2], range)], [Chalkboard.numb.constrain(matr[1][0], range), Chalkboard.numb.constrain(matr[1][1], range), Chalkboard.numb.constrain(matr[1][2], range)], [Chalkboard.numb.constrain(matr[2][0], range), Chalkboard.numb.constrain(matr[2][1], range), Chalkboard.numb.constrain(matr[2][2], range)]);
|
|
1130
|
+
}
|
|
1131
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
1132
|
+
return Chalkboard.matr.init([
|
|
1133
|
+
Chalkboard.numb.constrain(matr[0][0], range),
|
|
1134
|
+
Chalkboard.numb.constrain(matr[0][1], range),
|
|
1135
|
+
Chalkboard.numb.constrain(matr[0][2], range),
|
|
1136
|
+
Chalkboard.numb.constrain(matr[0][3], range)
|
|
1137
|
+
], [
|
|
1138
|
+
Chalkboard.numb.constrain(matr[1][0], range),
|
|
1139
|
+
Chalkboard.numb.constrain(matr[1][1], range),
|
|
1140
|
+
Chalkboard.numb.constrain(matr[1][2], range),
|
|
1141
|
+
Chalkboard.numb.constrain(matr[1][3], range)
|
|
1142
|
+
], [
|
|
1143
|
+
Chalkboard.numb.constrain(matr[2][0], range),
|
|
1144
|
+
Chalkboard.numb.constrain(matr[2][1], range),
|
|
1145
|
+
Chalkboard.numb.constrain(matr[2][2], range),
|
|
1146
|
+
Chalkboard.numb.constrain(matr[2][3], range)
|
|
1147
|
+
], [
|
|
1148
|
+
Chalkboard.numb.constrain(matr[3][0], range),
|
|
1149
|
+
Chalkboard.numb.constrain(matr[3][1], range),
|
|
1150
|
+
Chalkboard.numb.constrain(matr[3][2], range),
|
|
1151
|
+
Chalkboard.numb.constrain(matr[3][3], range)
|
|
1152
|
+
]);
|
|
1153
|
+
}
|
|
1154
|
+
else {
|
|
1155
|
+
var result = Chalkboard.matr.init();
|
|
1156
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
1157
|
+
result[i] = [];
|
|
1158
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
1159
|
+
result[i][j] = Chalkboard.numb.constrain(matr[i][j], range);
|
|
1160
|
+
}
|
|
1101
1161
|
}
|
|
1162
|
+
return result;
|
|
1102
1163
|
}
|
|
1103
|
-
return result;
|
|
1104
1164
|
};
|
|
1105
1165
|
matr_1.copy = function (matr) {
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1166
|
+
if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
1167
|
+
return Chalkboard.matr.init([matr[0][0], matr[0][1]], [matr[1][0], matr[1][1]]);
|
|
1168
|
+
}
|
|
1169
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
1170
|
+
return Chalkboard.matr.init([matr[0][0], matr[0][1], matr[0][2]], [matr[1][0], matr[1][1], matr[1][2]], [matr[2][0], matr[2][1], matr[2][2]]);
|
|
1171
|
+
}
|
|
1172
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
1173
|
+
return Chalkboard.matr.init([matr[0][0], matr[0][1], matr[0][2], matr[0][3]], [matr[1][0], matr[1][1], matr[1][2], matr[1][3]], [matr[2][0], matr[2][1], matr[2][2], matr[2][3]], [matr[3][0], matr[3][1], matr[3][2], matr[3][3]]);
|
|
1174
|
+
}
|
|
1175
|
+
else {
|
|
1176
|
+
var result = Chalkboard.matr.init();
|
|
1177
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
1178
|
+
result.push([]);
|
|
1179
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
1180
|
+
result[i].push(matr[i][j]);
|
|
1181
|
+
}
|
|
1111
1182
|
}
|
|
1183
|
+
return result;
|
|
1112
1184
|
}
|
|
1113
|
-
return result;
|
|
1114
1185
|
};
|
|
1115
1186
|
matr_1.det = function (matr) {
|
|
1116
|
-
if (Chalkboard.matr.
|
|
1117
|
-
var result = 0;
|
|
1187
|
+
if (Chalkboard.matr.isSquare(matr)) {
|
|
1118
1188
|
if (Chalkboard.matr.rows(matr) === 1) {
|
|
1119
1189
|
return matr[0][0];
|
|
1120
1190
|
}
|
|
1121
1191
|
else if (Chalkboard.matr.rows(matr) === 2) {
|
|
1122
1192
|
return matr[0][0] * matr[1][1] - matr[0][1] * matr[1][0];
|
|
1123
1193
|
}
|
|
1194
|
+
else if (Chalkboard.matr.rows(matr) === 3) {
|
|
1195
|
+
return (matr[0][0] * (matr[1][1] * matr[2][2] - matr[1][2] * matr[2][1]) -
|
|
1196
|
+
matr[0][1] * (matr[1][0] * matr[2][2] - matr[1][2] * matr[2][0]) +
|
|
1197
|
+
matr[0][2] * (matr[1][0] * matr[2][1] - matr[1][1] * matr[2][0]));
|
|
1198
|
+
}
|
|
1199
|
+
else if (Chalkboard.matr.rows(matr) === 4) {
|
|
1200
|
+
return (matr[0][0] *
|
|
1201
|
+
(matr[1][1] * (matr[2][2] * matr[3][3] - matr[2][3] * matr[3][2]) -
|
|
1202
|
+
matr[1][2] * (matr[2][1] * matr[3][3] - matr[2][3] * matr[3][1]) +
|
|
1203
|
+
matr[1][3] * (matr[2][1] * matr[3][2] - matr[2][2] * matr[3][1])) -
|
|
1204
|
+
matr[0][1] *
|
|
1205
|
+
(matr[1][0] * (matr[2][2] * matr[3][3] - matr[2][3] * matr[3][2]) -
|
|
1206
|
+
matr[1][2] * (matr[2][0] * matr[3][3] - matr[2][3] * matr[3][0]) +
|
|
1207
|
+
matr[1][3] * (matr[2][0] * matr[3][2] - matr[2][2] * matr[3][0])) +
|
|
1208
|
+
matr[0][2] *
|
|
1209
|
+
(matr[1][0] * (matr[2][1] * matr[3][3] - matr[2][3] * matr[3][1]) -
|
|
1210
|
+
matr[1][1] * (matr[2][0] * matr[3][3] - matr[2][3] * matr[3][0]) +
|
|
1211
|
+
matr[1][3] * (matr[2][0] * matr[3][1] - matr[2][1] * matr[3][0])) -
|
|
1212
|
+
matr[0][3] *
|
|
1213
|
+
(matr[1][0] * (matr[2][1] * matr[3][2] - matr[2][2] * matr[3][1]) -
|
|
1214
|
+
matr[1][1] * (matr[2][0] * matr[3][2] - matr[2][2] * matr[3][0]) +
|
|
1215
|
+
matr[1][2] * (matr[2][0] * matr[3][1] - matr[2][1] * matr[3][0])));
|
|
1216
|
+
}
|
|
1124
1217
|
else {
|
|
1218
|
+
var result = 0;
|
|
1125
1219
|
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
1126
|
-
var cofactor_1 = matr[0][i] * Chalkboard.matr.det(Chalkboard.matr.cofactor(matr,
|
|
1220
|
+
var cofactor_1 = matr[0][i] * Chalkboard.matr.det(Chalkboard.matr.cofactor(matr, 0, i));
|
|
1127
1221
|
result += i % 2 === 0 ? cofactor_1 : -cofactor_1;
|
|
1128
1222
|
}
|
|
1129
1223
|
return result;
|
|
@@ -1133,56 +1227,211 @@ var Chalkboard;
|
|
|
1133
1227
|
throw new TypeError('Parameter "matr" must be of type "ChalkboardMatrix" that is square.');
|
|
1134
1228
|
}
|
|
1135
1229
|
};
|
|
1230
|
+
matr_1.diagonal = function (size) {
|
|
1231
|
+
var elements = [];
|
|
1232
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
1233
|
+
elements[_i - 1] = arguments[_i];
|
|
1234
|
+
}
|
|
1235
|
+
if (size === 2) {
|
|
1236
|
+
return Chalkboard.matr.init([elements[0] || 0, 0], [0, elements[1] || 0]);
|
|
1237
|
+
}
|
|
1238
|
+
else if (size === 3) {
|
|
1239
|
+
return Chalkboard.matr.init([elements[0] || 0, 0, 0], [0, elements[1] || 0, 0], [0, 0, elements[2] || 0]);
|
|
1240
|
+
}
|
|
1241
|
+
else if (size === 4) {
|
|
1242
|
+
return Chalkboard.matr.init([elements[0] || 0, 0, 0, 0], [0, elements[1] || 0, 0, 0], [0, 0, elements[2] || 0, 0], [0, 0, 0, elements[3] || 0]);
|
|
1243
|
+
}
|
|
1244
|
+
else {
|
|
1245
|
+
elements = Array.isArray(elements[0]) ? elements[0] : elements;
|
|
1246
|
+
var result = Chalkboard.matr.init();
|
|
1247
|
+
for (var i = 0; i < size; i++) {
|
|
1248
|
+
result.push(Array(size).fill(0));
|
|
1249
|
+
result[i][i] = elements[i] || 0;
|
|
1250
|
+
}
|
|
1251
|
+
return result;
|
|
1252
|
+
}
|
|
1253
|
+
};
|
|
1254
|
+
matr_1.eigenvalue = function (matr, maxIterations) {
|
|
1255
|
+
if (maxIterations === void 0) { maxIterations = 100; }
|
|
1256
|
+
var v = Chalkboard.matr.fill(1, Chalkboard.matr.rows(matr), 1);
|
|
1257
|
+
var _loop_1 = function (i) {
|
|
1258
|
+
var matrv = Chalkboard.matr.mul(matr, v);
|
|
1259
|
+
var max = Chalkboard.stat.max(Chalkboard.matr.toArray(Chalkboard.matr.absolute(matrv)));
|
|
1260
|
+
v = Chalkboard.stat.toMatrix(Chalkboard.matr.toArray(matrv).map(function (i) {
|
|
1261
|
+
return i / max;
|
|
1262
|
+
}), Chalkboard.matr.rows(matr), 1);
|
|
1263
|
+
};
|
|
1264
|
+
for (var i = 0; i < maxIterations; i++) {
|
|
1265
|
+
_loop_1(i);
|
|
1266
|
+
}
|
|
1267
|
+
var dot = function (v1, v2) {
|
|
1268
|
+
var result = 0;
|
|
1269
|
+
for (var i = 0; i < v1.length; i++) {
|
|
1270
|
+
result += v1[i] * v2[i];
|
|
1271
|
+
}
|
|
1272
|
+
return result;
|
|
1273
|
+
};
|
|
1274
|
+
return (dot(Chalkboard.matr.toArray(Chalkboard.matr.transpose(v)), Chalkboard.matr.toArray(Chalkboard.matr.mul(matr, v))) /
|
|
1275
|
+
dot(Chalkboard.matr.toArray(Chalkboard.matr.transpose(v)), Chalkboard.matr.toArray(v)));
|
|
1276
|
+
};
|
|
1277
|
+
matr_1.eigenvector = function (matr, maxIterations) {
|
|
1278
|
+
if (maxIterations === void 0) { maxIterations = 100; }
|
|
1279
|
+
var v = Chalkboard.matr.fill(1, Chalkboard.matr.rows(matr), 1);
|
|
1280
|
+
var _loop_2 = function (i) {
|
|
1281
|
+
var matrv = Chalkboard.matr.mul(matr, v);
|
|
1282
|
+
var max = Chalkboard.stat.max(Chalkboard.matr.toArray(Chalkboard.matr.absolute(matrv)));
|
|
1283
|
+
v = Chalkboard.stat.toMatrix(Chalkboard.matr.toArray(matrv).map(function (i) {
|
|
1284
|
+
return i / max;
|
|
1285
|
+
}), Chalkboard.matr.rows(matr), 1);
|
|
1286
|
+
};
|
|
1287
|
+
for (var i = 0; i < maxIterations; i++) {
|
|
1288
|
+
_loop_2(i);
|
|
1289
|
+
}
|
|
1290
|
+
var result = Chalkboard.matr.toArray(v);
|
|
1291
|
+
return result;
|
|
1292
|
+
};
|
|
1136
1293
|
matr_1.empty = function (rows, cols) {
|
|
1137
1294
|
if (cols === void 0) { cols = rows; }
|
|
1138
|
-
var
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1295
|
+
var _null = null;
|
|
1296
|
+
if (rows === 2 && cols === 2) {
|
|
1297
|
+
return Chalkboard.matr.init([_null, _null], [_null, _null]);
|
|
1298
|
+
}
|
|
1299
|
+
else if (rows === 3 && cols === 3) {
|
|
1300
|
+
return Chalkboard.matr.init([_null, _null, _null], [_null, _null, _null], [_null, _null, _null]);
|
|
1301
|
+
}
|
|
1302
|
+
else if (rows === 4 && cols === 4) {
|
|
1303
|
+
return Chalkboard.matr.init([_null, _null, _null, _null], [_null, _null, _null, _null], [_null, _null, _null, _null], [_null, _null, _null, _null]);
|
|
1304
|
+
}
|
|
1305
|
+
else {
|
|
1306
|
+
var result = Chalkboard.matr.init();
|
|
1307
|
+
for (var i = 0; i < rows; i++) {
|
|
1308
|
+
result.push([]);
|
|
1309
|
+
for (var j = 0; j < cols; j++) {
|
|
1310
|
+
result[i].push(_null);
|
|
1311
|
+
}
|
|
1143
1312
|
}
|
|
1313
|
+
return result;
|
|
1144
1314
|
}
|
|
1145
|
-
return result;
|
|
1146
1315
|
};
|
|
1147
1316
|
matr_1.exchange = function (size) {
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1317
|
+
if (size === 2) {
|
|
1318
|
+
return Chalkboard.matr.init([0, 1], [1, 0]);
|
|
1319
|
+
}
|
|
1320
|
+
else if (size === 3) {
|
|
1321
|
+
return Chalkboard.matr.init([0, 0, 1], [0, 1, 0], [1, 0, 0]);
|
|
1322
|
+
}
|
|
1323
|
+
else if (size === 4) {
|
|
1324
|
+
return Chalkboard.matr.init([0, 0, 0, 1], [0, 0, 1, 0], [0, 1, 0, 0], [1, 0, 0, 0]);
|
|
1325
|
+
}
|
|
1326
|
+
else {
|
|
1327
|
+
var result = Chalkboard.matr.fill(0, size, size);
|
|
1328
|
+
for (var i = 0; i < size; i++) {
|
|
1329
|
+
for (var j = 0; j < size; j++) {
|
|
1330
|
+
if (i + j === size - 1) {
|
|
1331
|
+
result[i][j] = 1;
|
|
1332
|
+
}
|
|
1153
1333
|
}
|
|
1154
1334
|
}
|
|
1335
|
+
return result;
|
|
1155
1336
|
}
|
|
1156
|
-
return result;
|
|
1157
1337
|
};
|
|
1158
1338
|
matr_1.fill = function (element, rows, cols) {
|
|
1159
1339
|
if (cols === void 0) { cols = rows; }
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1340
|
+
if (rows === 2 && cols === 2) {
|
|
1341
|
+
return Chalkboard.matr.init([element, element], [element, element]);
|
|
1342
|
+
}
|
|
1343
|
+
else if (rows === 3 && cols === 3) {
|
|
1344
|
+
return Chalkboard.matr.init([element, element, element], [element, element, element], [element, element, element]);
|
|
1345
|
+
}
|
|
1346
|
+
else if (rows === 4 && cols === 4) {
|
|
1347
|
+
return Chalkboard.matr.init([element, element, element, element], [element, element, element, element], [element, element, element, element], [element, element, element, element]);
|
|
1348
|
+
}
|
|
1349
|
+
else {
|
|
1350
|
+
var result = Chalkboard.matr.init();
|
|
1351
|
+
for (var i = 0; i < rows; i++) {
|
|
1352
|
+
result.push([]);
|
|
1353
|
+
for (var j = 0; j < cols; j++) {
|
|
1354
|
+
result[i].push(element);
|
|
1355
|
+
}
|
|
1165
1356
|
}
|
|
1357
|
+
return result;
|
|
1166
1358
|
}
|
|
1167
|
-
|
|
1359
|
+
};
|
|
1360
|
+
matr_1.Gaussian = function (matr) {
|
|
1361
|
+
var lead = 0;
|
|
1362
|
+
for (var row = 0; row < Chalkboard.matr.rows(matr); row++) {
|
|
1363
|
+
if (lead >= Chalkboard.matr.cols(matr)) {
|
|
1364
|
+
break;
|
|
1365
|
+
}
|
|
1366
|
+
var i = row;
|
|
1367
|
+
while (matr[i][lead] === 0) {
|
|
1368
|
+
i++;
|
|
1369
|
+
if (i === Chalkboard.matr.rows(matr)) {
|
|
1370
|
+
i = row;
|
|
1371
|
+
lead++;
|
|
1372
|
+
if (Chalkboard.matr.cols(matr) === lead) {
|
|
1373
|
+
return matr;
|
|
1374
|
+
}
|
|
1375
|
+
}
|
|
1376
|
+
}
|
|
1377
|
+
var temp = matr[i];
|
|
1378
|
+
matr[i] = matr[row];
|
|
1379
|
+
matr[row] = temp;
|
|
1380
|
+
var scl_1 = matr[row][lead];
|
|
1381
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
1382
|
+
matr[row][j] /= scl_1;
|
|
1383
|
+
}
|
|
1384
|
+
for (var i_1 = 0; i_1 < Chalkboard.matr.rows(matr); i_1++) {
|
|
1385
|
+
if (i_1 !== row) {
|
|
1386
|
+
var coeff = matr[i_1][lead];
|
|
1387
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
1388
|
+
matr[i_1][j] -= coeff * matr[row][j];
|
|
1389
|
+
}
|
|
1390
|
+
}
|
|
1391
|
+
}
|
|
1392
|
+
lead++;
|
|
1393
|
+
}
|
|
1394
|
+
return matr;
|
|
1168
1395
|
};
|
|
1169
1396
|
matr_1.Hilbert = function (size) {
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1397
|
+
if (size === 2) {
|
|
1398
|
+
return Chalkboard.matr.init([1 / 1, 1 / 2], [1 / 2, 1 / 3]);
|
|
1399
|
+
}
|
|
1400
|
+
else if (size === 3) {
|
|
1401
|
+
return Chalkboard.matr.init([1 / 1, 1 / 2, 1 / 3], [1 / 2, 1 / 3, 1 / 4], [1 / 3, 1 / 4, 1 / 5]);
|
|
1402
|
+
}
|
|
1403
|
+
else if (size === 4) {
|
|
1404
|
+
return Chalkboard.matr.init([1 / 1, 1 / 2, 1 / 3, 1 / 4], [1 / 2, 1 / 3, 1 / 4, 1 / 5], [1 / 3, 1 / 4, 1 / 5, 1 / 6], [1 / 4, 1 / 5, 1 / 6, 1 / 7]);
|
|
1405
|
+
}
|
|
1406
|
+
else {
|
|
1407
|
+
var result = Chalkboard.matr.init();
|
|
1408
|
+
for (var i = 0; i < size; i++) {
|
|
1409
|
+
result.push([]);
|
|
1410
|
+
for (var j = 0; j < size; j++) {
|
|
1411
|
+
result[i].push(1 / (i + j + 1));
|
|
1412
|
+
}
|
|
1175
1413
|
}
|
|
1414
|
+
return result;
|
|
1176
1415
|
}
|
|
1177
|
-
return result;
|
|
1178
1416
|
};
|
|
1179
1417
|
matr_1.identity = function (size) {
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1418
|
+
if (size === 2) {
|
|
1419
|
+
return Chalkboard.matr.init([1, 0], [0, 1]);
|
|
1420
|
+
}
|
|
1421
|
+
else if (size === 3) {
|
|
1422
|
+
return Chalkboard.matr.init([1, 0, 0], [0, 1, 0], [0, 0, 1]);
|
|
1423
|
+
}
|
|
1424
|
+
else if (size === 4) {
|
|
1425
|
+
return Chalkboard.matr.init([1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]);
|
|
1426
|
+
}
|
|
1427
|
+
else {
|
|
1428
|
+
var result = Chalkboard.matr.init();
|
|
1429
|
+
for (var i = 0; i < size; i++) {
|
|
1430
|
+
result.push(Array(size).fill(0));
|
|
1431
|
+
result[i][i] = 1;
|
|
1432
|
+
}
|
|
1433
|
+
return result;
|
|
1184
1434
|
}
|
|
1185
|
-
return result;
|
|
1186
1435
|
};
|
|
1187
1436
|
matr_1.init = function () {
|
|
1188
1437
|
var matrix = [];
|
|
@@ -1200,60 +1449,379 @@ var Chalkboard;
|
|
|
1200
1449
|
}
|
|
1201
1450
|
};
|
|
1202
1451
|
matr_1.invert = function (matr) {
|
|
1203
|
-
if (Chalkboard.matr.
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1452
|
+
if (Chalkboard.matr.isInvertible(matr)) {
|
|
1453
|
+
if (Chalkboard.matr.rows(matr) === 2) {
|
|
1454
|
+
var det_1 = Chalkboard.matr.det(matr);
|
|
1455
|
+
return Chalkboard.matr.init([matr[1][1] / det_1, -matr[0][1] / det_1], [-matr[1][0] / det_1, matr[0][0] / det_1]);
|
|
1456
|
+
}
|
|
1457
|
+
else if (Chalkboard.matr.rows(matr) === 3) {
|
|
1458
|
+
var det_2 = Chalkboard.matr.det(matr);
|
|
1459
|
+
return Chalkboard.matr.init([
|
|
1460
|
+
(matr[1][1] * matr[2][2] - matr[1][2] * matr[2][1]) / det_2,
|
|
1461
|
+
(matr[0][2] * matr[2][1] - matr[0][1] * matr[2][2]) / det_2,
|
|
1462
|
+
(matr[0][1] * matr[1][2] - matr[0][2] * matr[1][1]) / det_2
|
|
1463
|
+
], [
|
|
1464
|
+
(matr[1][2] * matr[2][0] - matr[1][0] * matr[2][2]) / det_2,
|
|
1465
|
+
(matr[0][0] * matr[2][2] - matr[0][2] * matr[2][0]) / det_2,
|
|
1466
|
+
(matr[0][2] * matr[1][0] - matr[0][0] * matr[1][2]) / det_2
|
|
1467
|
+
], [
|
|
1468
|
+
(matr[1][0] * matr[2][1] - matr[1][1] * matr[2][0]) / det_2,
|
|
1469
|
+
(matr[0][1] * matr[2][0] - matr[0][0] * matr[2][1]) / det_2,
|
|
1470
|
+
(matr[0][0] * matr[1][1] - matr[0][1] * matr[1][0]) / det_2
|
|
1471
|
+
]);
|
|
1472
|
+
}
|
|
1473
|
+
else if (Chalkboard.matr.rows(matr) === 4) {
|
|
1474
|
+
var det_3 = Chalkboard.matr.det(matr);
|
|
1475
|
+
var adj00 = matr[0][0] * matr[1][1] - matr[0][1] * matr[1][0], adj01 = matr[0][0] * matr[1][2] - matr[0][2] * matr[1][0], adj02 = matr[0][0] * matr[1][3] - matr[0][3] * matr[1][0], adj03 = matr[0][1] * matr[1][2] - matr[0][2] * matr[1][1], adj04 = matr[0][1] * matr[1][3] - matr[0][3] * matr[1][1], adj05 = matr[0][2] * matr[1][3] - matr[0][3] * matr[1][2], adj06 = matr[2][0] * matr[3][1] - matr[2][1] * matr[3][0], adj07 = matr[2][0] * matr[3][2] - matr[2][2] * matr[3][0], adj08 = matr[2][0] * matr[3][3] - matr[2][3] * matr[3][0], adj09 = matr[2][1] * matr[3][2] - matr[2][2] * matr[3][1], adj10 = matr[2][1] * matr[3][3] - matr[2][3] * matr[3][1], adj11 = matr[2][2] * matr[3][3] - matr[2][3] * matr[3][2];
|
|
1476
|
+
return Chalkboard.matr.init([
|
|
1477
|
+
(matr[1][1] * adj11 - matr[1][2] * adj10 + matr[1][3] * adj09) / det_3,
|
|
1478
|
+
(matr[0][2] * adj10 - matr[0][1] * adj11 - matr[0][3] * adj09) / det_3,
|
|
1479
|
+
(matr[3][1] * adj05 - matr[3][2] * adj04 + matr[3][3] * adj03) / det_3,
|
|
1480
|
+
(matr[2][2] * adj04 - matr[2][1] * adj05 - matr[2][3] * adj03) / det_3
|
|
1481
|
+
], [
|
|
1482
|
+
(matr[1][2] * adj08 - matr[1][0] * adj11 - matr[1][3] * adj07) / det_3,
|
|
1483
|
+
(matr[0][0] * adj11 - matr[0][2] * adj08 + matr[0][3] * adj07) / det_3,
|
|
1484
|
+
(matr[3][2] * adj02 - matr[3][0] * adj05 - matr[3][3] * adj01) / det_3,
|
|
1485
|
+
(matr[2][0] * adj05 - matr[2][2] * adj02 + matr[2][3] * adj01) / det_3
|
|
1486
|
+
], [
|
|
1487
|
+
(matr[1][0] * adj10 - matr[1][1] * adj08 + matr[1][3] * adj06) / det_3,
|
|
1488
|
+
(matr[0][1] * adj08 - matr[0][0] * adj10 - matr[0][3] * adj06) / det_3,
|
|
1489
|
+
(matr[3][0] * adj04 - matr[3][1] * adj02 + matr[3][3] * adj00) / det_3,
|
|
1490
|
+
(matr[2][1] * adj02 - matr[2][0] * adj04 - matr[2][3] * adj00) / det_3
|
|
1491
|
+
], [
|
|
1492
|
+
(matr[1][1] * adj07 - matr[1][0] * adj09 - matr[1][2] * adj06) / det_3,
|
|
1493
|
+
(matr[0][0] * adj09 - matr[0][1] * adj07 + matr[0][2] * adj06) / det_3,
|
|
1494
|
+
(matr[3][1] * adj01 - matr[3][0] * adj03 - matr[3][2] * adj00) / det_3,
|
|
1495
|
+
(matr[2][0] * adj03 - matr[2][1] * adj01 + matr[2][2] * adj00) / det_3
|
|
1496
|
+
]);
|
|
1497
|
+
}
|
|
1498
|
+
else {
|
|
1499
|
+
var result = Chalkboard.matr.init();
|
|
1500
|
+
var augmented = Chalkboard.matr.init();
|
|
1501
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
1502
|
+
augmented.push(matr[i].concat(Array(Chalkboard.matr.rows(matr)).fill(0)));
|
|
1503
|
+
augmented[i][Chalkboard.matr.cols(matr) + i] = 1;
|
|
1504
|
+
}
|
|
1505
|
+
for (var row = 0; row < Chalkboard.matr.rows(matr); row++) {
|
|
1506
|
+
var diagonal_1 = augmented[row][row];
|
|
1507
|
+
if (diagonal_1 === 0) {
|
|
1508
|
+
var max = row;
|
|
1509
|
+
for (var i = row + 1; i < Chalkboard.matr.rows(matr); i++) {
|
|
1510
|
+
if (Math.abs(augmented[i][row]) > Math.abs(augmented[max][row])) {
|
|
1511
|
+
max = i;
|
|
1512
|
+
}
|
|
1513
|
+
}
|
|
1514
|
+
var temp = augmented[row];
|
|
1515
|
+
augmented[row] = augmented[max];
|
|
1516
|
+
augmented[max] = temp;
|
|
1517
|
+
diagonal_1 = augmented[row][row];
|
|
1518
|
+
}
|
|
1519
|
+
for (var col = 0; col < 2 * Chalkboard.matr.cols(matr); col++) {
|
|
1520
|
+
augmented[row][col] /= diagonal_1;
|
|
1521
|
+
}
|
|
1522
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
1523
|
+
if (i !== row) {
|
|
1524
|
+
var coeff = augmented[i][row];
|
|
1525
|
+
for (var j = 0; j < 2 * Chalkboard.matr.cols(matr); j++) {
|
|
1526
|
+
augmented[i][j] -= coeff * augmented[row][j];
|
|
1527
|
+
}
|
|
1217
1528
|
}
|
|
1218
1529
|
}
|
|
1219
|
-
var temp = augmented[row];
|
|
1220
|
-
augmented[row] = augmented[max];
|
|
1221
|
-
augmented[max] = temp;
|
|
1222
|
-
diagonal = augmented[row][row];
|
|
1223
1530
|
}
|
|
1224
|
-
for (var
|
|
1225
|
-
augmented[
|
|
1531
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
1532
|
+
result.push(augmented[i].slice(Chalkboard.matr.cols(matr), 2 * Chalkboard.matr.cols(matr)));
|
|
1226
1533
|
}
|
|
1534
|
+
return result;
|
|
1535
|
+
}
|
|
1536
|
+
}
|
|
1537
|
+
else {
|
|
1538
|
+
throw new TypeError('Parameter "matr" must be of type "ChalkboardMatrix" that is square and has a non-zero determinant.');
|
|
1539
|
+
}
|
|
1540
|
+
};
|
|
1541
|
+
matr_1.isDiagonal = function (matr) {
|
|
1542
|
+
if (Chalkboard.matr.isSquare(matr)) {
|
|
1543
|
+
if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
1544
|
+
return matr[0][1] !== 0 && matr[1][0] !== 0;
|
|
1545
|
+
}
|
|
1546
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
1547
|
+
return matr[0][1] !== 0 && matr[0][2] !== 0 && matr[1][0] !== 0 && matr[1][2] !== 0 && matr[2][0] !== 0 && matr[2][1] !== 0;
|
|
1548
|
+
}
|
|
1549
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
1550
|
+
return (matr[0][1] !== 0 &&
|
|
1551
|
+
matr[0][2] !== 0 &&
|
|
1552
|
+
matr[0][3] !== 0 &&
|
|
1553
|
+
matr[1][0] !== 0 &&
|
|
1554
|
+
matr[1][2] !== 0 &&
|
|
1555
|
+
matr[1][3] !== 0 &&
|
|
1556
|
+
matr[2][0] !== 0 &&
|
|
1557
|
+
matr[2][1] !== 0 &&
|
|
1558
|
+
matr[2][3] !== 0 &&
|
|
1559
|
+
matr[3][0] !== 0 &&
|
|
1560
|
+
matr[3][1] !== 0 &&
|
|
1561
|
+
matr[3][2] !== 0);
|
|
1562
|
+
}
|
|
1563
|
+
else {
|
|
1564
|
+
var score = 0;
|
|
1227
1565
|
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
augmented[i][j] -= coeff * augmented[row][j];
|
|
1232
|
-
}
|
|
1566
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
1567
|
+
if (i !== j && matr[i][j] !== 0)
|
|
1568
|
+
score++;
|
|
1233
1569
|
}
|
|
1234
1570
|
}
|
|
1571
|
+
return score === 0;
|
|
1572
|
+
}
|
|
1573
|
+
}
|
|
1574
|
+
else {
|
|
1575
|
+
return false;
|
|
1576
|
+
}
|
|
1577
|
+
};
|
|
1578
|
+
matr_1.isEqual = function (matr1, matr2) {
|
|
1579
|
+
if (Chalkboard.matr.isSizeEqual(matr1, matr2)) {
|
|
1580
|
+
if (Chalkboard.matr.isSizeOf(matr1, 2)) {
|
|
1581
|
+
return matr1[0][0] === matr2[0][0] && matr1[0][1] === matr2[0][1] && matr1[1][0] === matr2[1][0] && matr1[1][1] === matr2[1][1];
|
|
1582
|
+
}
|
|
1583
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 3)) {
|
|
1584
|
+
return (matr1[0][0] === matr2[0][0] &&
|
|
1585
|
+
matr1[0][1] === matr2[0][1] &&
|
|
1586
|
+
matr1[0][2] === matr2[0][2] &&
|
|
1587
|
+
matr1[1][0] === matr2[1][0] &&
|
|
1588
|
+
matr1[1][1] === matr2[1][1] &&
|
|
1589
|
+
matr1[1][2] === matr2[1][2] &&
|
|
1590
|
+
matr1[2][0] === matr2[2][0] &&
|
|
1591
|
+
matr1[2][1] === matr2[2][1] &&
|
|
1592
|
+
matr1[2][2] === matr2[2][2]);
|
|
1593
|
+
}
|
|
1594
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 4)) {
|
|
1595
|
+
return (matr1[0][0] === matr2[0][0] &&
|
|
1596
|
+
matr1[0][1] === matr2[0][1] &&
|
|
1597
|
+
matr1[0][2] === matr2[0][2] &&
|
|
1598
|
+
matr1[0][3] === matr2[0][3] &&
|
|
1599
|
+
matr1[1][0] === matr2[1][0] &&
|
|
1600
|
+
matr1[1][1] === matr2[1][1] &&
|
|
1601
|
+
matr1[1][2] === matr2[1][2] &&
|
|
1602
|
+
matr1[1][3] === matr2[1][3] &&
|
|
1603
|
+
matr1[2][0] === matr2[2][0] &&
|
|
1604
|
+
matr1[2][1] === matr2[2][1] &&
|
|
1605
|
+
matr1[2][2] === matr2[2][2] &&
|
|
1606
|
+
matr1[2][3] === matr2[2][3] &&
|
|
1607
|
+
matr1[3][0] === matr2[3][0] &&
|
|
1608
|
+
matr1[3][1] === matr2[3][1] &&
|
|
1609
|
+
matr1[3][2] === matr2[3][2] &&
|
|
1610
|
+
matr1[3][3] === matr2[3][3]);
|
|
1235
1611
|
}
|
|
1236
|
-
|
|
1237
|
-
|
|
1612
|
+
else {
|
|
1613
|
+
var score = Chalkboard.matr.rows(matr1) * Chalkboard.matr.cols(matr2);
|
|
1614
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr1); i++) {
|
|
1615
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr2); j++) {
|
|
1616
|
+
if (matr1[i][j] === matr2[i][j])
|
|
1617
|
+
score--;
|
|
1618
|
+
}
|
|
1619
|
+
}
|
|
1620
|
+
return score === 0;
|
|
1238
1621
|
}
|
|
1239
|
-
return result;
|
|
1240
1622
|
}
|
|
1241
1623
|
else {
|
|
1242
|
-
|
|
1624
|
+
return false;
|
|
1243
1625
|
}
|
|
1244
1626
|
};
|
|
1627
|
+
matr_1.isIdentity = function (matr) {
|
|
1628
|
+
if (Chalkboard.matr.isDiagonal(matr)) {
|
|
1629
|
+
if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
1630
|
+
return matr[0][0] === 1 && matr[1][1] === 1;
|
|
1631
|
+
}
|
|
1632
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
1633
|
+
return matr[0][0] === 1 && matr[1][1] === 1 && matr[2][2] === 1;
|
|
1634
|
+
}
|
|
1635
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
1636
|
+
return matr[0][0] === 1 && matr[1][1] === 1 && matr[2][2] === 1 && matr[3][3] === 1;
|
|
1637
|
+
}
|
|
1638
|
+
else {
|
|
1639
|
+
var score = 0;
|
|
1640
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
1641
|
+
if (matr[i][i] !== 1)
|
|
1642
|
+
score++;
|
|
1643
|
+
}
|
|
1644
|
+
return score === 0;
|
|
1645
|
+
}
|
|
1646
|
+
}
|
|
1647
|
+
else {
|
|
1648
|
+
return false;
|
|
1649
|
+
}
|
|
1650
|
+
};
|
|
1651
|
+
matr_1.isInvertible = function (matr) {
|
|
1652
|
+
return Chalkboard.matr.isSquare(matr) && Chalkboard.matr.det(matr) !== 0;
|
|
1653
|
+
};
|
|
1654
|
+
matr_1.isLowerTriangular = function (matr) {
|
|
1655
|
+
if (Chalkboard.matr.isSquare(matr)) {
|
|
1656
|
+
if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
1657
|
+
return matr[0][1] === 0;
|
|
1658
|
+
}
|
|
1659
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
1660
|
+
return matr[0][1] === 0 && matr[0][2] === 0 && matr[1][2] === 0;
|
|
1661
|
+
}
|
|
1662
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
1663
|
+
return matr[0][1] === 0 && matr[0][2] === 0 && matr[0][3] === 0 && matr[1][2] === 0 && matr[1][3] === 0 && matr[2][3] === 0;
|
|
1664
|
+
}
|
|
1665
|
+
else {
|
|
1666
|
+
var score = 0;
|
|
1667
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
1668
|
+
for (var j = i + 1; j < Chalkboard.matr.cols(matr); j++) {
|
|
1669
|
+
if (matr[i][j] !== 0)
|
|
1670
|
+
score++;
|
|
1671
|
+
}
|
|
1672
|
+
}
|
|
1673
|
+
return score === 0;
|
|
1674
|
+
}
|
|
1675
|
+
}
|
|
1676
|
+
else {
|
|
1677
|
+
return false;
|
|
1678
|
+
}
|
|
1679
|
+
};
|
|
1680
|
+
matr_1.isOrthogonal = function (matr) {
|
|
1681
|
+
if (Chalkboard.matr.isInvertible(matr)) {
|
|
1682
|
+
return Chalkboard.matr.isEqual(Chalkboard.matr.transpose(matr), Chalkboard.matr.invert(matr));
|
|
1683
|
+
}
|
|
1684
|
+
else {
|
|
1685
|
+
return false;
|
|
1686
|
+
}
|
|
1687
|
+
};
|
|
1688
|
+
matr_1.isSizeEqual = function (matr1, matr2) {
|
|
1689
|
+
return Chalkboard.matr.rows(matr1) === Chalkboard.matr.rows(matr2) && Chalkboard.matr.cols(matr1) === Chalkboard.matr.cols(matr2);
|
|
1690
|
+
};
|
|
1691
|
+
matr_1.isSizeOf = function (matr, rows, cols) {
|
|
1692
|
+
if (cols === void 0) { cols = rows; }
|
|
1693
|
+
return Chalkboard.matr.rows(matr) === rows && Chalkboard.matr.cols(matr) === cols;
|
|
1694
|
+
};
|
|
1695
|
+
matr_1.isSkewSymmetric = function (matr) {
|
|
1696
|
+
return Chalkboard.matr.isEqual(Chalkboard.matr.transpose(matr), Chalkboard.matr.negate(matr));
|
|
1697
|
+
};
|
|
1698
|
+
matr_1.isSquare = function (matr) {
|
|
1699
|
+
return Chalkboard.matr.rows(matr) === Chalkboard.matr.cols(matr);
|
|
1700
|
+
};
|
|
1701
|
+
matr_1.isSymmetric = function (matr) {
|
|
1702
|
+
return Chalkboard.matr.isEqual(matr, Chalkboard.matr.transpose(matr));
|
|
1703
|
+
};
|
|
1704
|
+
matr_1.isUpperTriangular = function (matr) {
|
|
1705
|
+
if (Chalkboard.matr.isSquare(matr)) {
|
|
1706
|
+
if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
1707
|
+
return matr[1][0] === 0;
|
|
1708
|
+
}
|
|
1709
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
1710
|
+
return matr[1][0] === 0 && matr[2][0] === 0 && matr[2][1] === 0;
|
|
1711
|
+
}
|
|
1712
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
1713
|
+
return matr[1][0] === 0 && matr[2][0] === 0 && matr[2][1] === 0 && matr[3][0] === 0 && matr[3][1] === 0 && matr[3][2] === 0;
|
|
1714
|
+
}
|
|
1715
|
+
else {
|
|
1716
|
+
var score = 0;
|
|
1717
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
1718
|
+
for (var j = 0; j < i; j++) {
|
|
1719
|
+
if (matr[i][j] !== 0)
|
|
1720
|
+
score++;
|
|
1721
|
+
}
|
|
1722
|
+
}
|
|
1723
|
+
return score === 0;
|
|
1724
|
+
}
|
|
1725
|
+
}
|
|
1726
|
+
else {
|
|
1727
|
+
return false;
|
|
1728
|
+
}
|
|
1729
|
+
};
|
|
1730
|
+
matr_1.isZero = function (matr) {
|
|
1731
|
+
return Chalkboard.matr.isEqual(matr, Chalkboard.matr.zero(matr));
|
|
1732
|
+
};
|
|
1245
1733
|
matr_1.Lehmer = function (size) {
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1734
|
+
if (size === 2) {
|
|
1735
|
+
return Chalkboard.matr.init([1 / 1, 1 / 2], [1 / 2, 1 / 1]);
|
|
1736
|
+
}
|
|
1737
|
+
else if (size === 3) {
|
|
1738
|
+
return Chalkboard.matr.init([1 / 1, 1 / 2, 1 / 3], [1 / 2, 1 / 1, 2 / 3], [1 / 3, 2 / 3, 1 / 1]);
|
|
1739
|
+
}
|
|
1740
|
+
else if (size === 4) {
|
|
1741
|
+
return Chalkboard.matr.init([1 / 1, 1 / 2, 1 / 3, 1 / 4], [1 / 2, 1 / 1, 2 / 3, 1 / 2], [1 / 3, 2 / 3, 1 / 1, 3 / 4], [1 / 4, 1 / 1, 3 / 4, 1 / 1]);
|
|
1742
|
+
}
|
|
1743
|
+
else {
|
|
1744
|
+
var result = Chalkboard.matr.init();
|
|
1745
|
+
for (var i = 0; i < size; i++) {
|
|
1746
|
+
result.push([]);
|
|
1747
|
+
for (var j = 0; j < size; j++) {
|
|
1748
|
+
result[i].push(Math.min(i + 1, j + 1) / Math.max(i + 1, j + 1));
|
|
1749
|
+
}
|
|
1251
1750
|
}
|
|
1751
|
+
return result;
|
|
1752
|
+
}
|
|
1753
|
+
};
|
|
1754
|
+
matr_1.lowerBinomial = function (size) {
|
|
1755
|
+
if (size === 2) {
|
|
1756
|
+
return Chalkboard.matr.init([1, 0], [1, 1]);
|
|
1757
|
+
}
|
|
1758
|
+
else if (size === 3) {
|
|
1759
|
+
return Chalkboard.matr.init([1, 0, 0], [1, 1, 0], [1, 2, 1]);
|
|
1760
|
+
}
|
|
1761
|
+
else if (size === 4) {
|
|
1762
|
+
return Chalkboard.matr.init([1, 0, 0, 0], [1, 1, 0, 0], [1, 2, 1, 0], [1, 3, 3, 1]);
|
|
1763
|
+
}
|
|
1764
|
+
else {
|
|
1765
|
+
var result = Chalkboard.matr.init();
|
|
1766
|
+
for (var i = 0; i < size; i++) {
|
|
1767
|
+
result.push([]);
|
|
1768
|
+
for (var j = 0; j < size; j++) {
|
|
1769
|
+
result[i].push(Chalkboard.numb.binomial(i, j));
|
|
1770
|
+
}
|
|
1771
|
+
}
|
|
1772
|
+
return result;
|
|
1773
|
+
}
|
|
1774
|
+
};
|
|
1775
|
+
matr_1.lowerShift = function (size) {
|
|
1776
|
+
if (size === 2) {
|
|
1777
|
+
return Chalkboard.matr.init([0, 0], [1, 0]);
|
|
1778
|
+
}
|
|
1779
|
+
else if (size === 3) {
|
|
1780
|
+
return Chalkboard.matr.init([0, 0, 0], [1, 0, 0], [0, 1, 0]);
|
|
1781
|
+
}
|
|
1782
|
+
else if (size === 4) {
|
|
1783
|
+
return Chalkboard.matr.init([0, 0, 0, 0], [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]);
|
|
1784
|
+
}
|
|
1785
|
+
else {
|
|
1786
|
+
var result = Chalkboard.matr.init();
|
|
1787
|
+
for (var i = 0; i < size; i++) {
|
|
1788
|
+
result[i] = [];
|
|
1789
|
+
for (var j = 0; j < size; j++) {
|
|
1790
|
+
result[i][j] = Chalkboard.numb.Kronecker(i, j + 1);
|
|
1791
|
+
}
|
|
1792
|
+
}
|
|
1793
|
+
return result;
|
|
1794
|
+
}
|
|
1795
|
+
};
|
|
1796
|
+
matr_1.lowerTriangular = function (size) {
|
|
1797
|
+
var elements = [];
|
|
1798
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
1799
|
+
elements[_i - 1] = arguments[_i];
|
|
1800
|
+
}
|
|
1801
|
+
if (size === 2) {
|
|
1802
|
+
return Chalkboard.matr.init([elements[0] || 0, 0], [elements[1] || 0, elements[2] || 0]);
|
|
1803
|
+
}
|
|
1804
|
+
else if (size === 3) {
|
|
1805
|
+
return Chalkboard.matr.init([elements[0] || 0, 0, 0], [elements[1] || 0, elements[2] || 0, 0], [elements[3] || 0, elements[4] || 0, elements[5] || 0]);
|
|
1806
|
+
}
|
|
1807
|
+
else if (size === 4) {
|
|
1808
|
+
return Chalkboard.matr.init([elements[0] || 0, 0, 0, 0], [elements[1] || 0, elements[2] || 0, 0, 0], [elements[3] || 0, elements[4] || 0, elements[5] || 0, 0], [elements[6] || 0, elements[7] || 0, elements[8] || 0, elements[9] || 0]);
|
|
1809
|
+
}
|
|
1810
|
+
else {
|
|
1811
|
+
elements = Array.isArray(elements[0]) ? elements[0] : elements;
|
|
1812
|
+
var result = Chalkboard.matr.init();
|
|
1813
|
+
var index = 0;
|
|
1814
|
+
for (var i = 0; i < size; i++) {
|
|
1815
|
+
result[i] = [];
|
|
1816
|
+
for (var j = 0; j < size; j++) {
|
|
1817
|
+
result[i][j] = j <= i ? elements[index++] || 0 : 0;
|
|
1818
|
+
}
|
|
1819
|
+
}
|
|
1820
|
+
return result;
|
|
1252
1821
|
}
|
|
1253
|
-
return result;
|
|
1254
1822
|
};
|
|
1255
1823
|
matr_1.LUdecomp = function (matr) {
|
|
1256
|
-
if (Chalkboard.matr.
|
|
1824
|
+
if (Chalkboard.matr.isSquare(matr)) {
|
|
1257
1825
|
var L = Chalkboard.matr.identity(Chalkboard.matr.rows(matr)), U = Chalkboard.matr.fill(0, Chalkboard.matr.rows(matr));
|
|
1258
1826
|
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
1259
1827
|
for (var i = 0; i <= j; i++) {
|
|
@@ -1279,40 +1847,465 @@ var Chalkboard;
|
|
|
1279
1847
|
};
|
|
1280
1848
|
matr_1.mul = function (matr1, matr2) {
|
|
1281
1849
|
if (Chalkboard.matr.cols(matr1) === Chalkboard.matr.rows(matr2)) {
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1850
|
+
if (Chalkboard.matr.isSizeOf(matr1, 2) && Chalkboard.matr.isSizeOf(matr2, 2, 1)) {
|
|
1851
|
+
return Chalkboard.matr.init([matr1[0][0] * matr2[0][0] + matr1[0][1] * matr2[1][0]], [matr1[1][0] * matr2[0][0] + matr1[1][1] * matr2[1][0]]);
|
|
1852
|
+
}
|
|
1853
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 2) && Chalkboard.matr.isSizeOf(matr2, 2)) {
|
|
1854
|
+
return Chalkboard.matr.init([matr1[0][0] * matr2[0][0] + matr1[0][1] * matr2[1][0], matr1[0][0] * matr2[0][1] + matr1[0][1] * matr2[1][1]], [matr1[1][0] * matr2[0][0] + matr1[1][1] * matr2[1][0], matr1[1][0] * matr2[0][1] + matr1[1][1] * matr2[1][1]]);
|
|
1855
|
+
}
|
|
1856
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 3) && Chalkboard.matr.isSizeOf(matr2, 3, 1)) {
|
|
1857
|
+
return Chalkboard.matr.init([matr1[0][0] * matr2[0][0] + matr1[0][1] * matr2[1][0] + matr1[0][2] * matr2[2][0]], [matr1[1][0] * matr2[0][0] + matr1[1][1] * matr2[1][0] + matr1[1][2] * matr2[2][0]], [matr1[2][0] * matr2[0][0] + matr1[2][1] * matr2[1][0] + matr1[2][2] * matr2[2][0]]);
|
|
1858
|
+
}
|
|
1859
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 3) && Chalkboard.matr.isSizeOf(matr2, 3)) {
|
|
1860
|
+
return Chalkboard.matr.init([
|
|
1861
|
+
matr1[0][0] * matr2[0][0] + matr1[0][1] * matr2[1][0] + matr1[0][2] * matr2[2][0],
|
|
1862
|
+
matr1[0][0] * matr2[0][1] + matr1[0][1] * matr2[1][1] + matr1[0][2] * matr2[2][1],
|
|
1863
|
+
matr1[0][0] * matr2[0][2] + matr1[0][1] * matr2[1][2] + matr1[0][2] * matr2[2][2]
|
|
1864
|
+
], [
|
|
1865
|
+
matr1[1][0] * matr2[0][0] + matr1[1][1] * matr2[1][0] + matr1[1][2] * matr2[2][0],
|
|
1866
|
+
matr1[1][0] * matr2[0][1] + matr1[1][1] * matr2[1][1] + matr1[1][2] * matr2[2][1],
|
|
1867
|
+
matr1[1][0] * matr2[0][2] + matr1[1][1] * matr2[1][2] + matr1[1][2] * matr2[2][2]
|
|
1868
|
+
], [
|
|
1869
|
+
matr1[2][0] * matr2[0][0] + matr1[2][1] * matr2[1][0] + matr1[2][2] * matr2[2][0],
|
|
1870
|
+
matr1[2][0] * matr2[0][1] + matr1[2][1] * matr2[1][1] + matr1[2][2] * matr2[2][1],
|
|
1871
|
+
matr1[2][0] * matr2[0][2] + matr1[2][1] * matr2[1][2] + matr1[2][2] * matr2[2][2]
|
|
1872
|
+
]);
|
|
1873
|
+
}
|
|
1874
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 4) && Chalkboard.matr.isSizeOf(matr2, 4, 1)) {
|
|
1875
|
+
return Chalkboard.matr.init([matr1[0][0] * matr2[0][0] + matr1[0][1] * matr2[1][0] + matr1[0][2] * matr2[2][0] + matr1[0][3] * matr2[3][0]], [matr1[1][0] * matr2[0][0] + matr1[1][1] * matr2[1][0] + matr1[1][2] * matr2[2][0] + matr1[1][3] * matr2[3][0]], [matr1[2][0] * matr2[0][0] + matr1[2][1] * matr2[1][0] + matr1[2][2] * matr2[2][0] + matr1[2][3] * matr2[3][0]], [matr1[3][0] * matr2[0][0] + matr1[3][1] * matr2[1][0] + matr1[3][2] * matr2[2][0] + matr1[3][3] * matr2[3][0]]);
|
|
1876
|
+
}
|
|
1877
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 4) && Chalkboard.matr.isSizeOf(matr2, 4)) {
|
|
1878
|
+
return Chalkboard.matr.init([
|
|
1879
|
+
matr1[0][0] * matr2[0][0] + matr1[0][1] * matr2[1][0] + matr1[0][2] * matr2[2][0] + matr1[0][3] * matr2[3][0],
|
|
1880
|
+
matr1[0][0] * matr2[0][1] + matr1[0][1] * matr2[1][1] + matr1[0][2] * matr2[2][1] + matr1[0][3] * matr2[3][1],
|
|
1881
|
+
matr1[0][0] * matr2[0][2] + matr1[0][1] * matr2[1][2] + matr1[0][2] * matr2[2][2] + matr1[0][3] * matr2[3][2],
|
|
1882
|
+
matr1[0][0] * matr2[0][3] + matr1[0][1] * matr2[1][3] + matr1[0][2] * matr2[2][3] + matr1[0][3] * matr2[3][3]
|
|
1883
|
+
], [
|
|
1884
|
+
matr1[1][0] * matr2[0][0] + matr1[1][1] * matr2[1][0] + matr1[1][2] * matr2[2][0] + matr1[1][3] * matr2[3][0],
|
|
1885
|
+
matr1[1][0] * matr2[0][1] + matr1[1][1] * matr2[1][1] + matr1[1][2] * matr2[2][1] + matr1[1][3] * matr2[3][1],
|
|
1886
|
+
matr1[1][0] * matr2[0][2] + matr1[1][1] * matr2[1][2] + matr1[1][2] * matr2[2][2] + matr1[1][3] * matr2[3][2],
|
|
1887
|
+
matr1[1][0] * matr2[0][3] + matr1[1][1] * matr2[1][3] + matr1[1][2] * matr2[2][3] + matr1[1][3] * matr2[3][3]
|
|
1888
|
+
], [
|
|
1889
|
+
matr1[2][0] * matr2[0][0] + matr1[2][1] * matr2[1][0] + matr1[2][2] * matr2[2][0] + matr1[2][3] * matr2[3][0],
|
|
1890
|
+
matr1[2][0] * matr2[0][1] + matr1[2][1] * matr2[1][1] + matr1[2][2] * matr2[2][1] + matr1[2][3] * matr2[3][1],
|
|
1891
|
+
matr1[2][0] * matr2[0][2] + matr1[2][1] * matr2[1][2] + matr1[2][2] * matr2[2][2] + matr1[2][3] * matr2[3][2],
|
|
1892
|
+
matr1[2][0] * matr2[0][3] + matr1[2][1] * matr2[1][3] + matr1[2][2] * matr2[2][3] + matr1[2][3] * matr2[3][3]
|
|
1893
|
+
], [
|
|
1894
|
+
matr1[3][0] * matr2[0][0] + matr1[3][1] * matr2[1][0] + matr1[3][2] * matr2[2][0] + matr1[3][3] * matr2[3][0],
|
|
1895
|
+
matr1[3][0] * matr2[0][1] + matr1[3][1] * matr2[1][1] + matr1[3][2] * matr2[2][1] + matr1[3][3] * matr2[3][1],
|
|
1896
|
+
matr1[3][0] * matr2[0][2] + matr1[3][1] * matr2[1][2] + matr1[3][2] * matr2[2][2] + matr1[3][3] * matr2[3][2],
|
|
1897
|
+
matr1[3][0] * matr2[0][3] + matr1[3][1] * matr2[1][3] + matr1[3][2] * matr2[2][3] + matr1[3][3] * matr2[3][3]
|
|
1898
|
+
]);
|
|
1899
|
+
}
|
|
1900
|
+
else {
|
|
1901
|
+
var result = Chalkboard.matr.init();
|
|
1902
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr1); i++) {
|
|
1903
|
+
result[i] = [];
|
|
1904
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr2); j++) {
|
|
1905
|
+
result[i][j] = 0;
|
|
1906
|
+
for (var k = 0; k < Chalkboard.matr.cols(matr1); k++) {
|
|
1907
|
+
result[i][j] += matr1[i][k] * matr2[k][j];
|
|
1908
|
+
}
|
|
1289
1909
|
}
|
|
1290
1910
|
}
|
|
1911
|
+
return result;
|
|
1291
1912
|
}
|
|
1292
|
-
return result;
|
|
1293
1913
|
}
|
|
1294
1914
|
else {
|
|
1295
1915
|
throw new TypeError('Parameters "matr1" and "matr2" must be of type "ChalkboardMatrix" where the numbers of columns of "matr1" must be equivalent to the number of rows of "matr2".');
|
|
1296
1916
|
}
|
|
1297
1917
|
};
|
|
1298
1918
|
matr_1.mulKronecker = function (matr1, matr2) {
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1919
|
+
if (Chalkboard.matr.isSizeOf(matr1, 2) && Chalkboard.matr.isSizeOf(matr2, 2)) {
|
|
1920
|
+
return Chalkboard.matr.init([matr1[0][0] * matr2[0][0], matr1[0][0] * matr2[0][1], matr1[0][1] * matr2[0][0], matr1[0][1] * matr2[0][1]], [matr1[0][0] * matr2[1][0], matr1[0][0] * matr2[1][1], matr1[0][1] * matr2[1][0], matr1[0][1] * matr2[1][1]], [matr1[1][0] * matr2[0][0], matr1[1][0] * matr2[0][1], matr1[1][1] * matr2[0][0], matr1[1][1] * matr2[0][1]], [matr1[1][0] * matr2[1][0], matr1[1][0] * matr2[1][1], matr1[1][1] * matr2[1][0], matr1[1][1] * matr2[1][1]]);
|
|
1921
|
+
}
|
|
1922
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 3) && Chalkboard.matr.isSizeOf(matr2, 3)) {
|
|
1923
|
+
return Chalkboard.matr.init([
|
|
1924
|
+
matr1[0][0] * matr2[0][0],
|
|
1925
|
+
matr1[0][0] * matr2[0][1],
|
|
1926
|
+
matr1[0][0] * matr2[0][2],
|
|
1927
|
+
matr1[0][1] * matr2[0][0],
|
|
1928
|
+
matr1[0][1] * matr2[0][1],
|
|
1929
|
+
matr1[0][1] * matr2[0][2],
|
|
1930
|
+
matr1[0][2] * matr2[0][0],
|
|
1931
|
+
matr1[0][2] * matr2[0][1],
|
|
1932
|
+
matr1[0][2] * matr2[0][2]
|
|
1933
|
+
], [
|
|
1934
|
+
matr1[0][0] * matr2[1][0],
|
|
1935
|
+
matr1[0][0] * matr2[1][1],
|
|
1936
|
+
matr1[0][0] * matr2[1][2],
|
|
1937
|
+
matr1[0][1] * matr2[1][0],
|
|
1938
|
+
matr1[0][1] * matr2[1][1],
|
|
1939
|
+
matr1[0][1] * matr2[1][2],
|
|
1940
|
+
matr1[0][2] * matr2[1][0],
|
|
1941
|
+
matr1[0][2] * matr2[1][1],
|
|
1942
|
+
matr1[0][2] * matr2[1][2]
|
|
1943
|
+
], [
|
|
1944
|
+
matr1[0][0] * matr2[2][0],
|
|
1945
|
+
matr1[0][0] * matr2[2][1],
|
|
1946
|
+
matr1[0][0] * matr2[2][2],
|
|
1947
|
+
matr1[0][1] * matr2[2][0],
|
|
1948
|
+
matr1[0][1] * matr2[2][1],
|
|
1949
|
+
matr1[0][1] * matr2[2][2],
|
|
1950
|
+
matr1[0][2] * matr2[2][0],
|
|
1951
|
+
matr1[0][2] * matr2[2][1],
|
|
1952
|
+
matr1[0][2] * matr2[2][2]
|
|
1953
|
+
], [
|
|
1954
|
+
matr1[1][0] * matr2[0][0],
|
|
1955
|
+
matr1[1][0] * matr2[0][1],
|
|
1956
|
+
matr1[1][0] * matr2[0][2],
|
|
1957
|
+
matr1[1][1] * matr2[0][0],
|
|
1958
|
+
matr1[1][1] * matr2[0][1],
|
|
1959
|
+
matr1[1][1] * matr2[0][2],
|
|
1960
|
+
matr1[1][2] * matr2[0][0],
|
|
1961
|
+
matr1[1][2] * matr2[0][1],
|
|
1962
|
+
matr1[1][2] * matr2[0][2]
|
|
1963
|
+
], [
|
|
1964
|
+
matr1[1][0] * matr2[1][0],
|
|
1965
|
+
matr1[1][0] * matr2[1][1],
|
|
1966
|
+
matr1[1][0] * matr2[1][2],
|
|
1967
|
+
matr1[1][1] * matr2[1][0],
|
|
1968
|
+
matr1[1][1] * matr2[1][1],
|
|
1969
|
+
matr1[1][1] * matr2[1][2],
|
|
1970
|
+
matr1[1][2] * matr2[1][0],
|
|
1971
|
+
matr1[1][2] * matr2[1][1],
|
|
1972
|
+
matr1[1][2] * matr2[1][2]
|
|
1973
|
+
], [
|
|
1974
|
+
matr1[1][0] * matr2[2][0],
|
|
1975
|
+
matr1[1][0] * matr2[2][1],
|
|
1976
|
+
matr1[1][0] * matr2[2][2],
|
|
1977
|
+
matr1[1][1] * matr2[2][0],
|
|
1978
|
+
matr1[1][1] * matr2[2][1],
|
|
1979
|
+
matr1[1][1] * matr2[2][2],
|
|
1980
|
+
matr1[1][2] * matr2[2][0],
|
|
1981
|
+
matr1[1][2] * matr2[2][1],
|
|
1982
|
+
matr1[1][2] * matr2[2][2]
|
|
1983
|
+
], [
|
|
1984
|
+
matr1[2][0] * matr2[0][0],
|
|
1985
|
+
matr1[2][0] * matr2[0][1],
|
|
1986
|
+
matr1[2][0] * matr2[0][2],
|
|
1987
|
+
matr1[2][1] * matr2[0][0],
|
|
1988
|
+
matr1[2][1] * matr2[0][1],
|
|
1989
|
+
matr1[2][1] * matr2[0][2],
|
|
1990
|
+
matr1[2][2] * matr2[0][0],
|
|
1991
|
+
matr1[2][2] * matr2[0][1],
|
|
1992
|
+
matr1[2][2] * matr2[0][2]
|
|
1993
|
+
], [
|
|
1994
|
+
matr1[2][0] * matr2[1][0],
|
|
1995
|
+
matr1[2][0] * matr2[1][1],
|
|
1996
|
+
matr1[2][0] * matr2[1][2],
|
|
1997
|
+
matr1[2][1] * matr2[1][0],
|
|
1998
|
+
matr1[2][1] * matr2[1][1],
|
|
1999
|
+
matr1[2][1] * matr2[1][2],
|
|
2000
|
+
matr1[2][2] * matr2[1][0],
|
|
2001
|
+
matr1[2][2] * matr2[1][1],
|
|
2002
|
+
matr1[2][2] * matr2[1][2]
|
|
2003
|
+
], [
|
|
2004
|
+
matr1[2][0] * matr2[2][0],
|
|
2005
|
+
matr1[2][0] * matr2[2][1],
|
|
2006
|
+
matr1[2][0] * matr2[2][2],
|
|
2007
|
+
matr1[2][1] * matr2[2][0],
|
|
2008
|
+
matr1[2][1] * matr2[2][1],
|
|
2009
|
+
matr1[2][1] * matr2[2][2],
|
|
2010
|
+
matr1[2][2] * matr2[2][0],
|
|
2011
|
+
matr1[2][2] * matr2[2][1],
|
|
2012
|
+
matr1[2][2] * matr2[2][2]
|
|
2013
|
+
]);
|
|
2014
|
+
}
|
|
2015
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 4) && Chalkboard.matr.isSizeOf(matr2, 4)) {
|
|
2016
|
+
return Chalkboard.matr.init([
|
|
2017
|
+
matr1[0][0] * matr2[0][0],
|
|
2018
|
+
matr1[0][0] * matr2[0][1],
|
|
2019
|
+
matr1[0][0] * matr2[0][2],
|
|
2020
|
+
matr1[0][0] * matr2[0][3],
|
|
2021
|
+
matr1[0][1] * matr2[0][0],
|
|
2022
|
+
matr1[0][1] * matr2[0][1],
|
|
2023
|
+
matr1[0][1] * matr2[0][2],
|
|
2024
|
+
matr1[0][1] * matr2[0][3],
|
|
2025
|
+
matr1[0][2] * matr2[0][0],
|
|
2026
|
+
matr1[0][2] * matr2[0][1],
|
|
2027
|
+
matr1[0][2] * matr2[0][2],
|
|
2028
|
+
matr1[0][2] * matr2[0][3],
|
|
2029
|
+
matr1[0][3] * matr2[0][0],
|
|
2030
|
+
matr1[0][3] * matr2[0][1],
|
|
2031
|
+
matr1[0][3] * matr2[0][2],
|
|
2032
|
+
matr1[0][3] * matr2[0][3]
|
|
2033
|
+
], [
|
|
2034
|
+
matr1[0][0] * matr2[1][0],
|
|
2035
|
+
matr1[0][0] * matr2[1][1],
|
|
2036
|
+
matr1[0][0] * matr2[1][2],
|
|
2037
|
+
matr1[0][0] * matr2[1][3],
|
|
2038
|
+
matr1[0][1] * matr2[1][0],
|
|
2039
|
+
matr1[0][1] * matr2[1][1],
|
|
2040
|
+
matr1[0][1] * matr2[1][2],
|
|
2041
|
+
matr1[0][1] * matr2[1][3],
|
|
2042
|
+
matr1[0][2] * matr2[1][0],
|
|
2043
|
+
matr1[0][2] * matr2[1][1],
|
|
2044
|
+
matr1[0][2] * matr2[1][2],
|
|
2045
|
+
matr1[0][2] * matr2[1][3],
|
|
2046
|
+
matr1[0][3] * matr2[1][0],
|
|
2047
|
+
matr1[0][3] * matr2[1][1],
|
|
2048
|
+
matr1[0][3] * matr2[1][2],
|
|
2049
|
+
matr1[0][3] * matr2[1][3]
|
|
2050
|
+
], [
|
|
2051
|
+
matr1[0][0] * matr2[2][0],
|
|
2052
|
+
matr1[0][0] * matr2[2][1],
|
|
2053
|
+
matr1[0][0] * matr2[2][2],
|
|
2054
|
+
matr1[0][0] * matr2[2][3],
|
|
2055
|
+
matr1[0][1] * matr2[2][0],
|
|
2056
|
+
matr1[0][1] * matr2[2][1],
|
|
2057
|
+
matr1[0][1] * matr2[2][2],
|
|
2058
|
+
matr1[0][1] * matr2[2][3],
|
|
2059
|
+
matr1[0][2] * matr2[2][0],
|
|
2060
|
+
matr1[0][2] * matr2[2][1],
|
|
2061
|
+
matr1[0][2] * matr2[2][2],
|
|
2062
|
+
matr1[0][2] * matr2[2][3],
|
|
2063
|
+
matr1[0][3] * matr2[2][0],
|
|
2064
|
+
matr1[0][3] * matr2[2][1],
|
|
2065
|
+
matr1[0][3] * matr2[2][2],
|
|
2066
|
+
matr1[0][3] * matr2[2][3]
|
|
2067
|
+
], [
|
|
2068
|
+
matr1[0][0] * matr2[3][0],
|
|
2069
|
+
matr1[0][0] * matr2[3][1],
|
|
2070
|
+
matr1[0][0] * matr2[3][2],
|
|
2071
|
+
matr1[0][0] * matr2[3][3],
|
|
2072
|
+
matr1[0][1] * matr2[3][0],
|
|
2073
|
+
matr1[0][1] * matr2[3][1],
|
|
2074
|
+
matr1[0][1] * matr2[3][2],
|
|
2075
|
+
matr1[0][1] * matr2[3][3],
|
|
2076
|
+
matr1[0][2] * matr2[3][0],
|
|
2077
|
+
matr1[0][2] * matr2[3][1],
|
|
2078
|
+
matr1[0][2] * matr2[3][2],
|
|
2079
|
+
matr1[0][2] * matr2[3][3],
|
|
2080
|
+
matr1[0][3] * matr2[3][0],
|
|
2081
|
+
matr1[0][3] * matr2[3][1],
|
|
2082
|
+
matr1[0][3] * matr2[3][2],
|
|
2083
|
+
matr1[0][3] * matr2[3][3]
|
|
2084
|
+
], [
|
|
2085
|
+
matr1[1][0] * matr2[0][0],
|
|
2086
|
+
matr1[1][0] * matr2[0][1],
|
|
2087
|
+
matr1[1][0] * matr2[0][2],
|
|
2088
|
+
matr1[1][0] * matr2[0][3],
|
|
2089
|
+
matr1[1][1] * matr2[0][0],
|
|
2090
|
+
matr1[1][1] * matr2[0][1],
|
|
2091
|
+
matr1[1][1] * matr2[0][2],
|
|
2092
|
+
matr1[1][1] * matr2[0][3],
|
|
2093
|
+
matr1[1][2] * matr2[0][0],
|
|
2094
|
+
matr1[1][2] * matr2[0][1],
|
|
2095
|
+
matr1[1][2] * matr2[0][2],
|
|
2096
|
+
matr1[1][2] * matr2[0][3],
|
|
2097
|
+
matr1[1][3] * matr2[0][0],
|
|
2098
|
+
matr1[1][3] * matr2[0][1],
|
|
2099
|
+
matr1[1][3] * matr2[0][2],
|
|
2100
|
+
matr1[1][3] * matr2[0][3]
|
|
2101
|
+
], [
|
|
2102
|
+
matr1[1][0] * matr2[1][0],
|
|
2103
|
+
matr1[1][0] * matr2[1][1],
|
|
2104
|
+
matr1[1][0] * matr2[1][2],
|
|
2105
|
+
matr1[1][0] * matr2[1][3],
|
|
2106
|
+
matr1[1][1] * matr2[1][0],
|
|
2107
|
+
matr1[1][1] * matr2[1][1],
|
|
2108
|
+
matr1[1][1] * matr2[1][2],
|
|
2109
|
+
matr1[1][1] * matr2[1][3],
|
|
2110
|
+
matr1[1][2] * matr2[1][0],
|
|
2111
|
+
matr1[1][2] * matr2[1][1],
|
|
2112
|
+
matr1[1][2] * matr2[1][2],
|
|
2113
|
+
matr1[1][2] * matr2[1][3],
|
|
2114
|
+
matr1[1][3] * matr2[1][0],
|
|
2115
|
+
matr1[1][3] * matr2[1][1],
|
|
2116
|
+
matr1[1][3] * matr2[1][2],
|
|
2117
|
+
matr1[1][3] * matr2[1][3]
|
|
2118
|
+
], [
|
|
2119
|
+
matr1[1][0] * matr2[2][0],
|
|
2120
|
+
matr1[1][0] * matr2[2][1],
|
|
2121
|
+
matr1[1][0] * matr2[2][2],
|
|
2122
|
+
matr1[1][0] * matr2[2][3],
|
|
2123
|
+
matr1[1][1] * matr2[2][0],
|
|
2124
|
+
matr1[1][1] * matr2[2][1],
|
|
2125
|
+
matr1[1][1] * matr2[2][2],
|
|
2126
|
+
matr1[1][1] * matr2[2][3],
|
|
2127
|
+
matr1[1][2] * matr2[2][0],
|
|
2128
|
+
matr1[1][2] * matr2[2][1],
|
|
2129
|
+
matr1[1][2] * matr2[2][2],
|
|
2130
|
+
matr1[1][2] * matr2[2][3],
|
|
2131
|
+
matr1[1][3] * matr2[2][0],
|
|
2132
|
+
matr1[1][3] * matr2[2][1],
|
|
2133
|
+
matr1[1][3] * matr2[2][2],
|
|
2134
|
+
matr1[1][3] * matr2[2][3]
|
|
2135
|
+
], [
|
|
2136
|
+
matr1[1][0] * matr2[3][0],
|
|
2137
|
+
matr1[1][0] * matr2[3][1],
|
|
2138
|
+
matr1[1][0] * matr2[3][2],
|
|
2139
|
+
matr1[1][0] * matr2[3][3],
|
|
2140
|
+
matr1[1][1] * matr2[3][0],
|
|
2141
|
+
matr1[1][1] * matr2[3][1],
|
|
2142
|
+
matr1[1][1] * matr2[3][2],
|
|
2143
|
+
matr1[1][1] * matr2[3][3],
|
|
2144
|
+
matr1[1][2] * matr2[3][0],
|
|
2145
|
+
matr1[1][2] * matr2[3][1],
|
|
2146
|
+
matr1[1][2] * matr2[3][2],
|
|
2147
|
+
matr1[1][2] * matr2[3][3],
|
|
2148
|
+
matr1[1][3] * matr2[3][0],
|
|
2149
|
+
matr1[1][3] * matr2[3][1],
|
|
2150
|
+
matr1[1][3] * matr2[3][2],
|
|
2151
|
+
matr1[1][3] * matr2[3][3]
|
|
2152
|
+
], [
|
|
2153
|
+
matr1[2][0] * matr2[0][0],
|
|
2154
|
+
matr1[2][0] * matr2[0][1],
|
|
2155
|
+
matr1[2][0] * matr2[0][2],
|
|
2156
|
+
matr1[2][0] * matr2[0][3],
|
|
2157
|
+
matr1[2][1] * matr2[0][0],
|
|
2158
|
+
matr1[2][1] * matr2[0][1],
|
|
2159
|
+
matr1[2][1] * matr2[0][2],
|
|
2160
|
+
matr1[2][1] * matr2[0][3],
|
|
2161
|
+
matr1[2][2] * matr2[0][0],
|
|
2162
|
+
matr1[2][2] * matr2[0][1],
|
|
2163
|
+
matr1[2][2] * matr2[0][2],
|
|
2164
|
+
matr1[2][2] * matr2[0][3],
|
|
2165
|
+
matr1[2][3] * matr2[0][0],
|
|
2166
|
+
matr1[2][3] * matr2[0][1],
|
|
2167
|
+
matr1[2][3] * matr2[0][2],
|
|
2168
|
+
matr1[2][3] * matr2[0][3]
|
|
2169
|
+
], [
|
|
2170
|
+
matr1[2][0] * matr2[1][0],
|
|
2171
|
+
matr1[2][0] * matr2[1][1],
|
|
2172
|
+
matr1[2][0] * matr2[1][2],
|
|
2173
|
+
matr1[2][0] * matr2[1][3],
|
|
2174
|
+
matr1[2][1] * matr2[1][0],
|
|
2175
|
+
matr1[2][1] * matr2[1][1],
|
|
2176
|
+
matr1[2][1] * matr2[1][2],
|
|
2177
|
+
matr1[2][1] * matr2[1][3],
|
|
2178
|
+
matr1[2][2] * matr2[1][0],
|
|
2179
|
+
matr1[2][2] * matr2[1][1],
|
|
2180
|
+
matr1[2][2] * matr2[1][2],
|
|
2181
|
+
matr1[2][2] * matr2[1][3],
|
|
2182
|
+
matr1[2][3] * matr2[1][0],
|
|
2183
|
+
matr1[2][3] * matr2[1][1],
|
|
2184
|
+
matr1[2][3] * matr2[1][2],
|
|
2185
|
+
matr1[2][3] * matr2[1][3]
|
|
2186
|
+
], [
|
|
2187
|
+
matr1[2][0] * matr2[2][0],
|
|
2188
|
+
matr1[2][0] * matr2[2][1],
|
|
2189
|
+
matr1[2][0] * matr2[2][2],
|
|
2190
|
+
matr1[2][0] * matr2[2][3],
|
|
2191
|
+
matr1[2][1] * matr2[2][0],
|
|
2192
|
+
matr1[2][1] * matr2[2][1],
|
|
2193
|
+
matr1[2][1] * matr2[2][2],
|
|
2194
|
+
matr1[2][1] * matr2[2][3],
|
|
2195
|
+
matr1[2][2] * matr2[2][0],
|
|
2196
|
+
matr1[2][2] * matr2[2][1],
|
|
2197
|
+
matr1[2][2] * matr2[2][2],
|
|
2198
|
+
matr1[2][2] * matr2[2][3],
|
|
2199
|
+
matr1[2][3] * matr2[2][0],
|
|
2200
|
+
matr1[2][3] * matr2[2][1],
|
|
2201
|
+
matr1[2][3] * matr2[2][2],
|
|
2202
|
+
matr1[2][3] * matr2[2][3]
|
|
2203
|
+
], [
|
|
2204
|
+
matr1[2][0] * matr2[3][0],
|
|
2205
|
+
matr1[2][0] * matr2[3][1],
|
|
2206
|
+
matr1[2][0] * matr2[3][2],
|
|
2207
|
+
matr1[2][0] * matr2[3][3],
|
|
2208
|
+
matr1[2][1] * matr2[3][0],
|
|
2209
|
+
matr1[2][1] * matr2[3][1],
|
|
2210
|
+
matr1[2][1] * matr2[3][2],
|
|
2211
|
+
matr1[2][1] * matr2[3][3],
|
|
2212
|
+
matr1[2][2] * matr2[3][0],
|
|
2213
|
+
matr1[2][2] * matr2[3][1],
|
|
2214
|
+
matr1[2][2] * matr2[3][2],
|
|
2215
|
+
matr1[2][2] * matr2[3][3],
|
|
2216
|
+
matr1[2][3] * matr2[3][0],
|
|
2217
|
+
matr1[2][3] * matr2[3][1],
|
|
2218
|
+
matr1[2][3] * matr2[3][2],
|
|
2219
|
+
matr1[2][3] * matr2[3][3]
|
|
2220
|
+
], [
|
|
2221
|
+
matr1[3][0] * matr2[0][0],
|
|
2222
|
+
matr1[3][0] * matr2[0][1],
|
|
2223
|
+
matr1[3][0] * matr2[0][2],
|
|
2224
|
+
matr1[3][0] * matr2[0][3],
|
|
2225
|
+
matr1[3][1] * matr2[0][0],
|
|
2226
|
+
matr1[3][1] * matr2[0][1],
|
|
2227
|
+
matr1[3][1] * matr2[0][2],
|
|
2228
|
+
matr1[3][1] * matr2[0][3],
|
|
2229
|
+
matr1[3][2] * matr2[0][0],
|
|
2230
|
+
matr1[3][2] * matr2[0][1],
|
|
2231
|
+
matr1[3][2] * matr2[0][2],
|
|
2232
|
+
matr1[3][2] * matr2[0][3],
|
|
2233
|
+
matr1[3][3] * matr2[0][0],
|
|
2234
|
+
matr1[3][3] * matr2[0][1],
|
|
2235
|
+
matr1[3][3] * matr2[0][2],
|
|
2236
|
+
matr1[3][3] * matr2[0][3]
|
|
2237
|
+
], [
|
|
2238
|
+
matr1[3][0] * matr2[1][0],
|
|
2239
|
+
matr1[3][0] * matr2[1][1],
|
|
2240
|
+
matr1[3][0] * matr2[1][2],
|
|
2241
|
+
matr1[3][0] * matr2[1][3],
|
|
2242
|
+
matr1[3][1] * matr2[1][0],
|
|
2243
|
+
matr1[3][1] * matr2[1][1],
|
|
2244
|
+
matr1[3][1] * matr2[1][2],
|
|
2245
|
+
matr1[3][1] * matr2[1][3],
|
|
2246
|
+
matr1[3][2] * matr2[1][0],
|
|
2247
|
+
matr1[3][2] * matr2[1][1],
|
|
2248
|
+
matr1[3][2] * matr2[1][2],
|
|
2249
|
+
matr1[3][2] * matr2[1][3],
|
|
2250
|
+
matr1[3][3] * matr2[1][0],
|
|
2251
|
+
matr1[3][3] * matr2[1][1],
|
|
2252
|
+
matr1[3][3] * matr2[1][2],
|
|
2253
|
+
matr1[3][3] * matr2[1][3]
|
|
2254
|
+
], [
|
|
2255
|
+
matr1[3][0] * matr2[2][0],
|
|
2256
|
+
matr1[3][0] * matr2[2][1],
|
|
2257
|
+
matr1[3][0] * matr2[2][2],
|
|
2258
|
+
matr1[3][0] * matr2[2][3],
|
|
2259
|
+
matr1[3][1] * matr2[2][0],
|
|
2260
|
+
matr1[3][1] * matr2[2][1],
|
|
2261
|
+
matr1[3][1] * matr2[2][2],
|
|
2262
|
+
matr1[3][1] * matr2[2][3],
|
|
2263
|
+
matr1[3][2] * matr2[2][0],
|
|
2264
|
+
matr1[3][2] * matr2[2][1],
|
|
2265
|
+
matr1[3][2] * matr2[2][2],
|
|
2266
|
+
matr1[3][2] * matr2[2][3],
|
|
2267
|
+
matr1[3][3] * matr2[2][0],
|
|
2268
|
+
matr1[3][3] * matr2[2][1],
|
|
2269
|
+
matr1[3][3] * matr2[2][2],
|
|
2270
|
+
matr1[3][3] * matr2[2][3]
|
|
2271
|
+
], [
|
|
2272
|
+
matr1[3][0] * matr2[3][0],
|
|
2273
|
+
matr1[3][0] * matr2[3][1],
|
|
2274
|
+
matr1[3][0] * matr2[3][2],
|
|
2275
|
+
matr1[3][0] * matr2[3][3],
|
|
2276
|
+
matr1[3][1] * matr2[3][0],
|
|
2277
|
+
matr1[3][1] * matr2[3][1],
|
|
2278
|
+
matr1[3][1] * matr2[3][2],
|
|
2279
|
+
matr1[3][1] * matr2[3][3],
|
|
2280
|
+
matr1[3][2] * matr2[3][0],
|
|
2281
|
+
matr1[3][2] * matr2[3][1],
|
|
2282
|
+
matr1[3][2] * matr2[3][2],
|
|
2283
|
+
matr1[3][2] * matr2[3][3],
|
|
2284
|
+
matr1[3][3] * matr2[3][0],
|
|
2285
|
+
matr1[3][3] * matr2[3][1],
|
|
2286
|
+
matr1[3][3] * matr2[3][2],
|
|
2287
|
+
matr1[3][3] * matr2[3][3]
|
|
2288
|
+
]);
|
|
2289
|
+
}
|
|
2290
|
+
else {
|
|
2291
|
+
var result = Chalkboard.matr.init();
|
|
2292
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr1); i++) {
|
|
2293
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr1); j++) {
|
|
2294
|
+
for (var k = 0; k < Chalkboard.matr.rows(matr2); k++) {
|
|
2295
|
+
for (var l = 0; l < Chalkboard.matr.cols(matr2); l++) {
|
|
2296
|
+
if (!result[i * Chalkboard.matr.rows(matr2) + k]) {
|
|
2297
|
+
result[i * Chalkboard.matr.rows(matr2) + k] = [];
|
|
2298
|
+
}
|
|
2299
|
+
result[i * Chalkboard.matr.rows(matr2) + k][j * Chalkboard.matr.cols(matr2) + l] = matr1[i][j] * matr2[k][l];
|
|
1306
2300
|
}
|
|
1307
|
-
result[i * Chalkboard.matr.rows(matr2) + k][j * Chalkboard.matr.cols(matr2) + l] = matr1[i][j] * matr2[k][l];
|
|
1308
2301
|
}
|
|
1309
2302
|
}
|
|
1310
2303
|
}
|
|
2304
|
+
return result;
|
|
1311
2305
|
}
|
|
1312
|
-
return result;
|
|
1313
2306
|
};
|
|
1314
2307
|
matr_1.mulVector = function (matr, vect) {
|
|
1315
|
-
if (
|
|
2308
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
1316
2309
|
if (Chalkboard.matr.rows(matr) === 2) {
|
|
1317
2310
|
return Chalkboard.matr.toVector(Chalkboard.matr.mul(matr, Chalkboard.vect.toMatrix(vect)), 2);
|
|
1318
2311
|
}
|
|
@@ -1320,7 +2313,7 @@ var Chalkboard;
|
|
|
1320
2313
|
return Chalkboard.matr.mul(matr, Chalkboard.vect.toMatrix(vect));
|
|
1321
2314
|
}
|
|
1322
2315
|
}
|
|
1323
|
-
else if (
|
|
2316
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
1324
2317
|
if (Chalkboard.matr.rows(matr) === 3) {
|
|
1325
2318
|
return Chalkboard.matr.toVector(Chalkboard.matr.mul(matr, Chalkboard.vect.toMatrix(vect)), 3);
|
|
1326
2319
|
}
|
|
@@ -1328,7 +2321,7 @@ var Chalkboard;
|
|
|
1328
2321
|
return Chalkboard.matr.mul(matr, Chalkboard.vect.toMatrix(vect));
|
|
1329
2322
|
}
|
|
1330
2323
|
}
|
|
1331
|
-
else if (
|
|
2324
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
1332
2325
|
if (Chalkboard.matr.rows(matr) === 4) {
|
|
1333
2326
|
return Chalkboard.matr.toVector(Chalkboard.matr.mul(matr, Chalkboard.vect.toMatrix(vect)), 4);
|
|
1334
2327
|
}
|
|
@@ -1341,21 +2334,169 @@ var Chalkboard;
|
|
|
1341
2334
|
}
|
|
1342
2335
|
};
|
|
1343
2336
|
matr_1.negate = function (matr) {
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
2337
|
+
if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
2338
|
+
return Chalkboard.matr.init([-matr[0][0], -matr[0][1]], [-matr[1][0], -matr[1][1]]);
|
|
2339
|
+
}
|
|
2340
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
2341
|
+
return Chalkboard.matr.init([-matr[0][0], -matr[0][1], -matr[0][2]], [-matr[1][0], -matr[1][1], -matr[1][2]], [-matr[2][0], -matr[2][1], -matr[2][2]]);
|
|
2342
|
+
}
|
|
2343
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
2344
|
+
return Chalkboard.matr.init([-matr[0][0], -matr[0][1], -matr[0][2], -matr[0][3]], [-matr[1][0], -matr[1][1], -matr[1][2], -matr[1][3]], [-matr[2][0], -matr[2][1], -matr[2][2], -matr[2][3]], [-matr[3][0], -matr[3][1], -matr[3][2], -matr[3][3]]);
|
|
2345
|
+
}
|
|
2346
|
+
else {
|
|
2347
|
+
var result = Chalkboard.matr.init();
|
|
2348
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
2349
|
+
result[i] = [];
|
|
2350
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
2351
|
+
result[i][j] = -matr[i][j];
|
|
2352
|
+
}
|
|
1349
2353
|
}
|
|
2354
|
+
return result;
|
|
2355
|
+
}
|
|
2356
|
+
};
|
|
2357
|
+
matr_1.norm = function (matr, p, q) {
|
|
2358
|
+
if (p === void 0) { p = 2; }
|
|
2359
|
+
if (q === void 0) { q = 2; }
|
|
2360
|
+
if (Chalkboard.matr.isSizeOf(matr, 2) && p === 2 && q === 2) {
|
|
2361
|
+
return Chalkboard.real.sqrt(matr[0][0] * matr[0][0] + matr[0][1] * matr[0][1] + matr[1][0] * matr[1][0] + matr[1][1] * matr[1][1]);
|
|
2362
|
+
}
|
|
2363
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3) && p === 2 && q === 2) {
|
|
2364
|
+
return Chalkboard.real.sqrt(matr[0][0] * matr[0][0] +
|
|
2365
|
+
matr[0][1] * matr[0][1] +
|
|
2366
|
+
matr[0][2] * matr[0][2] +
|
|
2367
|
+
matr[1][0] * matr[1][0] +
|
|
2368
|
+
matr[1][1] * matr[1][1] +
|
|
2369
|
+
matr[1][2] * matr[1][2] +
|
|
2370
|
+
matr[2][0] * matr[2][0] +
|
|
2371
|
+
matr[2][1] * matr[2][1] +
|
|
2372
|
+
matr[2][2] * matr[2][2]);
|
|
2373
|
+
}
|
|
2374
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4) && p === 2 && q === 2) {
|
|
2375
|
+
return Chalkboard.real.sqrt(matr[0][0] * matr[0][0] +
|
|
2376
|
+
matr[0][1] * matr[0][1] +
|
|
2377
|
+
matr[0][2] * matr[0][2] +
|
|
2378
|
+
matr[0][3] * matr[0][3] +
|
|
2379
|
+
matr[1][0] * matr[1][0] +
|
|
2380
|
+
matr[1][1] * matr[1][1] +
|
|
2381
|
+
matr[1][2] * matr[1][2] +
|
|
2382
|
+
matr[1][3] * matr[1][3] +
|
|
2383
|
+
matr[2][0] * matr[2][0] +
|
|
2384
|
+
matr[2][1] * matr[2][1] +
|
|
2385
|
+
matr[2][2] * matr[2][2] +
|
|
2386
|
+
matr[2][3] * matr[2][3] +
|
|
2387
|
+
matr[3][0] * matr[3][0] +
|
|
2388
|
+
matr[3][1] * matr[3][1] +
|
|
2389
|
+
matr[3][2] * matr[3][2] +
|
|
2390
|
+
matr[3][3] * matr[3][3]);
|
|
2391
|
+
}
|
|
2392
|
+
else {
|
|
2393
|
+
var result = 0;
|
|
2394
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
2395
|
+
var rowResult = 0;
|
|
2396
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
2397
|
+
rowResult += Chalkboard.real.pow(matr[i][j], p);
|
|
2398
|
+
}
|
|
2399
|
+
result += Chalkboard.real.pow(rowResult, q / p);
|
|
2400
|
+
}
|
|
2401
|
+
return Chalkboard.real.pow(result, 1 / q);
|
|
2402
|
+
}
|
|
2403
|
+
};
|
|
2404
|
+
matr_1.normalize = function (matr, p, q) {
|
|
2405
|
+
if (p === void 0) { p = 2; }
|
|
2406
|
+
if (q === void 0) { q = 2; }
|
|
2407
|
+
if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
2408
|
+
return Chalkboard.matr.init([matr[0][0] / Chalkboard.matr.norm(matr, p, q), matr[0][1] / Chalkboard.matr.norm(matr, p, q)], [matr[1][0] / Chalkboard.matr.norm(matr, p, q), matr[1][1] / Chalkboard.matr.norm(matr, p, q)]);
|
|
2409
|
+
}
|
|
2410
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
2411
|
+
return Chalkboard.matr.init([matr[0][0] / Chalkboard.matr.norm(matr, p, q), matr[0][1] / Chalkboard.matr.norm(matr, p, q), matr[0][2] / Chalkboard.matr.norm(matr, p, q)], [matr[1][0] / Chalkboard.matr.norm(matr, p, q), matr[1][1] / Chalkboard.matr.norm(matr, p, q), matr[1][2] / Chalkboard.matr.norm(matr, p, q)], [matr[2][0] / Chalkboard.matr.norm(matr, p, q), matr[2][1] / Chalkboard.matr.norm(matr, p, q), matr[2][2] / Chalkboard.matr.norm(matr, p, q)]);
|
|
2412
|
+
}
|
|
2413
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
2414
|
+
return Chalkboard.matr.init([
|
|
2415
|
+
matr[0][0] / Chalkboard.matr.norm(matr, p, q),
|
|
2416
|
+
matr[0][1] / Chalkboard.matr.norm(matr, p, q),
|
|
2417
|
+
matr[0][2] / Chalkboard.matr.norm(matr, p, q),
|
|
2418
|
+
matr[0][3] / Chalkboard.matr.norm(matr, p, q)
|
|
2419
|
+
], [
|
|
2420
|
+
matr[1][0] / Chalkboard.matr.norm(matr, p, q),
|
|
2421
|
+
matr[1][1] / Chalkboard.matr.norm(matr, p, q),
|
|
2422
|
+
matr[1][2] / Chalkboard.matr.norm(matr, p, q),
|
|
2423
|
+
matr[1][3] / Chalkboard.matr.norm(matr, p, q)
|
|
2424
|
+
], [
|
|
2425
|
+
matr[2][0] / Chalkboard.matr.norm(matr, p, q),
|
|
2426
|
+
matr[2][1] / Chalkboard.matr.norm(matr, p, q),
|
|
2427
|
+
matr[2][2] / Chalkboard.matr.norm(matr, p, q),
|
|
2428
|
+
matr[2][3] / Chalkboard.matr.norm(matr, p, q)
|
|
2429
|
+
], [
|
|
2430
|
+
matr[3][0] / Chalkboard.matr.norm(matr, p, q),
|
|
2431
|
+
matr[3][1] / Chalkboard.matr.norm(matr, p, q),
|
|
2432
|
+
matr[3][2] / Chalkboard.matr.norm(matr, p, q),
|
|
2433
|
+
matr[3][3] / Chalkboard.matr.norm(matr, p, q)
|
|
2434
|
+
]);
|
|
2435
|
+
}
|
|
2436
|
+
else {
|
|
2437
|
+
var result = Chalkboard.matr.init();
|
|
2438
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
2439
|
+
result[i] = [];
|
|
2440
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
2441
|
+
result[i][j] = matr[i][j] / Chalkboard.matr.norm(matr, p, q);
|
|
2442
|
+
}
|
|
2443
|
+
}
|
|
2444
|
+
return result;
|
|
2445
|
+
}
|
|
2446
|
+
};
|
|
2447
|
+
matr_1.normsq = function (matr, p, q) {
|
|
2448
|
+
if (p === void 0) { p = 2; }
|
|
2449
|
+
if (q === void 0) { q = 2; }
|
|
2450
|
+
if (Chalkboard.matr.isSizeOf(matr, 2) && p === 2 && q === 2) {
|
|
2451
|
+
return matr[0][0] * matr[0][0] + matr[0][1] * matr[0][1] + matr[1][0] * matr[1][0] + matr[1][1] * matr[1][1];
|
|
2452
|
+
}
|
|
2453
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3) && p === 2 && q === 2) {
|
|
2454
|
+
return (matr[0][0] * matr[0][0] +
|
|
2455
|
+
matr[0][1] * matr[0][1] +
|
|
2456
|
+
matr[0][2] * matr[0][2] +
|
|
2457
|
+
matr[1][0] * matr[1][0] +
|
|
2458
|
+
matr[1][1] * matr[1][1] +
|
|
2459
|
+
matr[1][2] * matr[1][2] +
|
|
2460
|
+
matr[2][0] * matr[2][0] +
|
|
2461
|
+
matr[2][1] * matr[2][1] +
|
|
2462
|
+
matr[2][2] * matr[2][2]);
|
|
2463
|
+
}
|
|
2464
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4) && p === 2 && q === 2) {
|
|
2465
|
+
return (matr[0][0] * matr[0][0] +
|
|
2466
|
+
matr[0][1] * matr[0][1] +
|
|
2467
|
+
matr[0][2] * matr[0][2] +
|
|
2468
|
+
matr[0][3] * matr[0][3] +
|
|
2469
|
+
matr[1][0] * matr[1][0] +
|
|
2470
|
+
matr[1][1] * matr[1][1] +
|
|
2471
|
+
matr[1][2] * matr[1][2] +
|
|
2472
|
+
matr[1][3] * matr[1][3] +
|
|
2473
|
+
matr[2][0] * matr[2][0] +
|
|
2474
|
+
matr[2][1] * matr[2][1] +
|
|
2475
|
+
matr[2][2] * matr[2][2] +
|
|
2476
|
+
matr[2][3] * matr[2][3] +
|
|
2477
|
+
matr[3][0] * matr[3][0] +
|
|
2478
|
+
matr[3][1] * matr[3][1] +
|
|
2479
|
+
matr[3][2] * matr[3][2] +
|
|
2480
|
+
matr[3][3] * matr[3][3]);
|
|
2481
|
+
}
|
|
2482
|
+
else {
|
|
2483
|
+
var result = 0;
|
|
2484
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
2485
|
+
var rowResult = 0;
|
|
2486
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
2487
|
+
rowResult += Chalkboard.real.pow(matr[i][j], p);
|
|
2488
|
+
}
|
|
2489
|
+
result += Chalkboard.real.pow(rowResult, q / p);
|
|
2490
|
+
}
|
|
2491
|
+
return result;
|
|
1350
2492
|
}
|
|
1351
|
-
return result;
|
|
1352
2493
|
};
|
|
1353
2494
|
matr_1.nullspace = function (matr) {
|
|
1354
2495
|
var augmented = matr.map(function (row) {
|
|
1355
2496
|
return row.slice().concat(Array(Chalkboard.matr.rows(matr)).fill(0));
|
|
1356
2497
|
});
|
|
1357
|
-
var
|
|
1358
|
-
return
|
|
2498
|
+
var rowEchelonForm = Chalkboard.matr.Gaussian(augmented);
|
|
2499
|
+
return rowEchelonForm
|
|
1359
2500
|
.filter(function (row) {
|
|
1360
2501
|
return row.slice(0, Chalkboard.matr.rows(matr)).every(function (element) {
|
|
1361
2502
|
return element === 0;
|
|
@@ -1365,8 +2506,52 @@ var Chalkboard;
|
|
|
1365
2506
|
return row.slice(Chalkboard.matr.rows(matr));
|
|
1366
2507
|
});
|
|
1367
2508
|
};
|
|
2509
|
+
matr_1.perm = function (matr) {
|
|
2510
|
+
if (Chalkboard.matr.isSquare(matr)) {
|
|
2511
|
+
if (Chalkboard.matr.rows(matr) === 1) {
|
|
2512
|
+
return matr[0][0];
|
|
2513
|
+
}
|
|
2514
|
+
else if (Chalkboard.matr.rows(matr) === 2) {
|
|
2515
|
+
return matr[0][0] * matr[1][1] + matr[0][1] * matr[1][0];
|
|
2516
|
+
}
|
|
2517
|
+
else if (Chalkboard.matr.rows(matr) === 3) {
|
|
2518
|
+
return (matr[0][0] * (matr[1][1] * matr[2][2] + matr[1][2] * matr[2][1]) +
|
|
2519
|
+
matr[0][1] * (matr[1][0] * matr[2][2] + matr[1][2] * matr[2][0]) +
|
|
2520
|
+
matr[0][2] * (matr[1][0] * matr[2][1] + matr[1][1] * matr[2][0]));
|
|
2521
|
+
}
|
|
2522
|
+
else if (Chalkboard.matr.rows(matr) === 4) {
|
|
2523
|
+
return (matr[0][0] *
|
|
2524
|
+
(matr[1][1] * (matr[2][2] * matr[3][3] + matr[2][3] * matr[3][2]) +
|
|
2525
|
+
matr[1][2] * (matr[2][1] * matr[3][3] + matr[2][3] * matr[3][1]) +
|
|
2526
|
+
matr[1][3] * (matr[2][1] * matr[3][2] + matr[2][2] * matr[3][1])) +
|
|
2527
|
+
matr[0][1] *
|
|
2528
|
+
(matr[1][0] * (matr[2][2] * matr[3][3] + matr[2][3] * matr[3][2]) +
|
|
2529
|
+
matr[1][2] * (matr[2][0] * matr[3][3] + matr[2][3] * matr[3][0]) +
|
|
2530
|
+
matr[1][3] * (matr[2][0] * matr[3][2] + matr[2][2] * matr[3][0])) +
|
|
2531
|
+
matr[0][2] *
|
|
2532
|
+
(matr[1][0] * (matr[2][1] * matr[3][3] + matr[2][3] * matr[3][1]) +
|
|
2533
|
+
matr[1][1] * (matr[2][0] * matr[3][3] + matr[2][3] * matr[3][0]) +
|
|
2534
|
+
matr[1][3] * (matr[2][0] * matr[3][1] + matr[2][1] * matr[3][0])) +
|
|
2535
|
+
matr[0][3] *
|
|
2536
|
+
(matr[1][0] * (matr[2][1] * matr[3][2] + matr[2][2] * matr[3][1]) +
|
|
2537
|
+
matr[1][1] * (matr[2][0] * matr[3][2] + matr[2][2] * matr[3][0]) +
|
|
2538
|
+
matr[1][2] * (matr[2][0] * matr[3][1] + matr[2][1] * matr[3][0])));
|
|
2539
|
+
}
|
|
2540
|
+
else {
|
|
2541
|
+
var result = 0;
|
|
2542
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
2543
|
+
var cofactor_2 = matr[0][i] * Chalkboard.matr.perm(Chalkboard.matr.cofactor(matr, 0, i));
|
|
2544
|
+
result += Math.abs(cofactor_2);
|
|
2545
|
+
}
|
|
2546
|
+
return result;
|
|
2547
|
+
}
|
|
2548
|
+
}
|
|
2549
|
+
else {
|
|
2550
|
+
throw new TypeError('Parameter "matr" must be of type "ChalkboardMatrix" that is square.');
|
|
2551
|
+
}
|
|
2552
|
+
};
|
|
1368
2553
|
matr_1.pow = function (matr, num) {
|
|
1369
|
-
if (Chalkboard.matr.
|
|
2554
|
+
if (Chalkboard.matr.isSquare(matr)) {
|
|
1370
2555
|
if (num === 0) {
|
|
1371
2556
|
return Chalkboard.matr.identity(Chalkboard.matr.rows(matr));
|
|
1372
2557
|
}
|
|
@@ -1385,48 +2570,46 @@ var Chalkboard;
|
|
|
1385
2570
|
matr_1.print = function (matr) {
|
|
1386
2571
|
console.log(Chalkboard.matr.toString(matr));
|
|
1387
2572
|
};
|
|
1388
|
-
matr_1.pull = function (matr,
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
matr.splice(rowORcol, 1);
|
|
2573
|
+
matr_1.pull = function (matr, index, axis) {
|
|
2574
|
+
if (axis === 0) {
|
|
2575
|
+
matr.splice(index, 1);
|
|
1392
2576
|
return matr;
|
|
1393
2577
|
}
|
|
1394
|
-
else if (
|
|
2578
|
+
else if (axis === 1) {
|
|
1395
2579
|
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
1396
|
-
matr[i].splice(
|
|
2580
|
+
matr[i].splice(index, 1);
|
|
1397
2581
|
}
|
|
1398
2582
|
return matr;
|
|
1399
2583
|
}
|
|
1400
2584
|
else {
|
|
1401
|
-
throw new TypeError('Parameter "
|
|
2585
|
+
throw new TypeError('Parameter "axis" must be 0 or 1.');
|
|
1402
2586
|
}
|
|
1403
2587
|
};
|
|
1404
|
-
matr_1.push = function (matr,
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
matr.splice(rowORcol, 0, elements);
|
|
2588
|
+
matr_1.push = function (matr, index, axis, elements) {
|
|
2589
|
+
if (axis === 0) {
|
|
2590
|
+
matr.splice(index, 0, elements);
|
|
1408
2591
|
return matr;
|
|
1409
2592
|
}
|
|
1410
|
-
else if (
|
|
2593
|
+
else if (axis === 1) {
|
|
1411
2594
|
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
1412
|
-
matr[i].splice(
|
|
2595
|
+
matr[i].splice(index, 0, elements[i]);
|
|
1413
2596
|
}
|
|
1414
2597
|
return matr;
|
|
1415
2598
|
}
|
|
1416
2599
|
else {
|
|
1417
|
-
throw new TypeError('Parameter "
|
|
2600
|
+
throw new TypeError('Parameter "axis" must be 0 or 1.');
|
|
1418
2601
|
}
|
|
1419
2602
|
};
|
|
1420
2603
|
matr_1.QRdecomp = function (matr) {
|
|
1421
2604
|
var Q = Chalkboard.matr.identity(Chalkboard.matr.rows(matr)), R = Chalkboard.matr.copy(matr);
|
|
1422
2605
|
for (var j = 0; j < Math.min(Chalkboard.matr.rows(matr), Chalkboard.matr.cols(matr)) - (Chalkboard.matr.rows(matr) > Chalkboard.matr.cols(matr) ? 0 : 1); j++) {
|
|
1423
|
-
var
|
|
2606
|
+
var norm_1 = 0;
|
|
1424
2607
|
for (var i = j; i < Chalkboard.matr.rows(matr); i++) {
|
|
1425
|
-
|
|
2608
|
+
norm_1 += R[i][j] * R[i][j];
|
|
1426
2609
|
}
|
|
1427
|
-
|
|
2610
|
+
norm_1 = Chalkboard.real.sqrt(norm_1);
|
|
1428
2611
|
var v = [];
|
|
1429
|
-
v[0] =
|
|
2612
|
+
v[0] = norm_1 - R[j][j];
|
|
1430
2613
|
var normalizer = v[0] * v[0];
|
|
1431
2614
|
for (var i = 1; i < Chalkboard.matr.rows(matr) - j; i++) {
|
|
1432
2615
|
v[i] = -R[i + j][j];
|
|
@@ -1436,7 +2619,7 @@ var Chalkboard;
|
|
|
1436
2619
|
for (var i = 0; i < v.length; i++) {
|
|
1437
2620
|
v[i] *= normalizer;
|
|
1438
2621
|
}
|
|
1439
|
-
R[j][j] =
|
|
2622
|
+
R[j][j] = norm_1;
|
|
1440
2623
|
for (var i = j + 1; i < Chalkboard.matr.rows(R); i++) {
|
|
1441
2624
|
R[i][j] = 0;
|
|
1442
2625
|
}
|
|
@@ -1465,72 +2648,56 @@ var Chalkboard;
|
|
|
1465
2648
|
};
|
|
1466
2649
|
matr_1.random = function (inf, sup, rows, cols) {
|
|
1467
2650
|
if (cols === void 0) { cols = rows; }
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
2651
|
+
if (rows === 2 && cols === 2) {
|
|
2652
|
+
return Chalkboard.matr.init([Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup)], [Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup)]);
|
|
2653
|
+
}
|
|
2654
|
+
else if (rows === 3 && cols === 3) {
|
|
2655
|
+
return Chalkboard.matr.init([Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup)], [Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup)], [Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup)]);
|
|
2656
|
+
}
|
|
2657
|
+
else if (rows === 4 && cols === 4) {
|
|
2658
|
+
return Chalkboard.matr.init([Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup)], [Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup)], [Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup)], [Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup), Chalkboard.numb.random(inf, sup)]);
|
|
2659
|
+
}
|
|
2660
|
+
else {
|
|
2661
|
+
var result = Chalkboard.matr.init();
|
|
2662
|
+
for (var i = 0; i < rows; i++) {
|
|
2663
|
+
result.push([]);
|
|
2664
|
+
for (var j = 0; j < cols; j++) {
|
|
2665
|
+
result[i].push(Chalkboard.numb.random(inf, sup));
|
|
2666
|
+
}
|
|
1473
2667
|
}
|
|
2668
|
+
return result;
|
|
1474
2669
|
}
|
|
1475
|
-
return result;
|
|
1476
2670
|
};
|
|
1477
2671
|
matr_1.rank = function (matr) {
|
|
1478
|
-
return Chalkboard.matr.
|
|
2672
|
+
return Chalkboard.matr.Gaussian(matr).filter(function (row) {
|
|
1479
2673
|
return row.some(function (element) {
|
|
1480
2674
|
return element !== 0;
|
|
1481
2675
|
});
|
|
1482
2676
|
}).length;
|
|
1483
2677
|
};
|
|
1484
2678
|
matr_1.reciprocate = function (matr) {
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
result[i] = [];
|
|
1488
|
-
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
1489
|
-
result[i][j] = 1 / matr[i][j];
|
|
1490
|
-
}
|
|
2679
|
+
if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
2680
|
+
return Chalkboard.matr.init([1 / matr[0][0], 1 / matr[0][1]], [1 / matr[1][0], 1 / matr[1][1]]);
|
|
1491
2681
|
}
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
var i =
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
i = row;
|
|
1505
|
-
lead++;
|
|
1506
|
-
if (Chalkboard.matr.cols(matr) === lead) {
|
|
1507
|
-
return matr;
|
|
1508
|
-
}
|
|
1509
|
-
}
|
|
1510
|
-
}
|
|
1511
|
-
var temp = matr[i];
|
|
1512
|
-
matr[i] = matr[row];
|
|
1513
|
-
matr[row] = temp;
|
|
1514
|
-
var scl_1 = matr[row][lead];
|
|
1515
|
-
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
1516
|
-
matr[row][j] /= scl_1;
|
|
1517
|
-
}
|
|
1518
|
-
for (var i_1 = 0; i_1 < Chalkboard.matr.rows(matr); i_1++) {
|
|
1519
|
-
if (i_1 !== row) {
|
|
1520
|
-
var coeff = matr[i_1][lead];
|
|
1521
|
-
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
1522
|
-
matr[i_1][j] -= coeff * matr[row][j];
|
|
1523
|
-
}
|
|
2682
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
2683
|
+
return Chalkboard.matr.init([1 / matr[0][0], 1 / matr[0][1], 1 / matr[0][2]], [1 / matr[1][0], 1 / matr[1][1], 1 / matr[1][2]], [1 / matr[2][0], 1 / matr[2][1], 1 / matr[2][2]]);
|
|
2684
|
+
}
|
|
2685
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
2686
|
+
return Chalkboard.matr.init([1 / matr[0][0], 1 / matr[0][1], 1 / matr[0][2], 1 / matr[0][3]], [1 / matr[1][0], 1 / matr[1][1], 1 / matr[1][2], 1 / matr[1][3]], [1 / matr[2][0], 1 / matr[2][1], 1 / matr[2][2], 1 / matr[2][3]], [1 / matr[3][0], 1 / matr[3][1], 1 / matr[3][2], 1 / matr[3][3]]);
|
|
2687
|
+
}
|
|
2688
|
+
else {
|
|
2689
|
+
var result = Chalkboard.matr.init();
|
|
2690
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
2691
|
+
result[i] = [];
|
|
2692
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
2693
|
+
result[i][j] = 1 / matr[i][j];
|
|
1524
2694
|
}
|
|
1525
2695
|
}
|
|
1526
|
-
|
|
2696
|
+
return result;
|
|
1527
2697
|
}
|
|
1528
|
-
return matr;
|
|
1529
2698
|
};
|
|
1530
2699
|
matr_1.resize = function (matr, rows, cols) {
|
|
1531
|
-
if (cols ===
|
|
1532
|
-
cols = rows;
|
|
1533
|
-
}
|
|
2700
|
+
if (cols === void 0) { cols = rows; }
|
|
1534
2701
|
var result = Chalkboard.matr.init();
|
|
1535
2702
|
var flat = Chalkboard.matr.toArray(matr);
|
|
1536
2703
|
var index = 0;
|
|
@@ -1552,20 +2719,31 @@ var Chalkboard;
|
|
|
1552
2719
|
}
|
|
1553
2720
|
};
|
|
1554
2721
|
matr_1.round = function (matr) {
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
2722
|
+
if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
2723
|
+
return Chalkboard.matr.init([Math.round(matr[0][0]), Math.round(matr[0][1])], [Math.round(matr[1][0]), Math.round(matr[1][1])]);
|
|
2724
|
+
}
|
|
2725
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
2726
|
+
return Chalkboard.matr.init([Math.round(matr[0][0]), Math.round(matr[0][1]), Math.round(matr[0][2])], [Math.round(matr[1][0]), Math.round(matr[1][1]), Math.round(matr[1][2])], [Math.round(matr[2][0]), Math.round(matr[2][1]), Math.round(matr[2][2])]);
|
|
2727
|
+
}
|
|
2728
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
2729
|
+
return Chalkboard.matr.init([Math.round(matr[0][0]), Math.round(matr[0][1]), Math.round(matr[0][2]), Math.round(matr[0][3])], [Math.round(matr[1][0]), Math.round(matr[1][1]), Math.round(matr[1][2]), Math.round(matr[1][3])], [Math.round(matr[2][0]), Math.round(matr[2][1]), Math.round(matr[2][2]), Math.round(matr[2][3])], [Math.round(matr[3][0]), Math.round(matr[3][1]), Math.round(matr[3][2]), Math.round(matr[3][3])]);
|
|
2730
|
+
}
|
|
2731
|
+
else {
|
|
2732
|
+
var result = Chalkboard.matr.init();
|
|
2733
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
2734
|
+
result[i] = [];
|
|
2735
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
2736
|
+
result[i][j] = Math.round(matr[i][j]);
|
|
2737
|
+
}
|
|
1560
2738
|
}
|
|
2739
|
+
return result;
|
|
1561
2740
|
}
|
|
1562
|
-
return result;
|
|
1563
2741
|
};
|
|
1564
2742
|
matr_1.rows = function (matr) {
|
|
1565
2743
|
return matr.length;
|
|
1566
2744
|
};
|
|
1567
2745
|
matr_1.rowspace = function (matr) {
|
|
1568
|
-
return Chalkboard.matr.
|
|
2746
|
+
return Chalkboard.matr.Gaussian(matr).filter(function (row) {
|
|
1569
2747
|
return row.some(function (element) {
|
|
1570
2748
|
return element !== 0;
|
|
1571
2749
|
});
|
|
@@ -1586,34 +2764,43 @@ var Chalkboard;
|
|
|
1586
2764
|
}
|
|
1587
2765
|
};
|
|
1588
2766
|
matr_1.scl = function (matr, num) {
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
result[i] = [];
|
|
1592
|
-
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
1593
|
-
result[i][j] = matr[i][j] * num;
|
|
1594
|
-
}
|
|
2767
|
+
if (Chalkboard.matr.isSizeOf(matr, 2, 1)) {
|
|
2768
|
+
return Chalkboard.matr.init([matr[0][0] * num], [matr[1][0] * num]);
|
|
1595
2769
|
}
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
if (
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
2770
|
+
else if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
2771
|
+
return Chalkboard.matr.init([matr[0][0] * num, matr[0][1] * num], [matr[1][0] * num, matr[1][1] * num]);
|
|
2772
|
+
}
|
|
2773
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3, 1)) {
|
|
2774
|
+
return Chalkboard.matr.init([matr[0][0] * num], [matr[1][0] * num], [matr[2][0] * num]);
|
|
2775
|
+
}
|
|
2776
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
2777
|
+
return Chalkboard.matr.init([matr[0][0] * num, matr[0][1] * num, matr[0][2] * num], [matr[1][0] * num, matr[1][1] * num, matr[1][2] * num], [matr[2][0] * num, matr[2][1] * num, matr[2][2] * num]);
|
|
2778
|
+
}
|
|
2779
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4, 1)) {
|
|
2780
|
+
return Chalkboard.matr.init([matr[0][0] * num], [matr[1][0] * num], [matr[2][0] * num], [matr[3][0] * num]);
|
|
2781
|
+
}
|
|
2782
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
2783
|
+
return Chalkboard.matr.init([matr[0][0] * num, matr[0][1] * num, matr[0][2] * num, matr[0][3] * num], [matr[1][0] * num, matr[1][1] * num, matr[1][2] * num, matr[1][3] * num], [matr[2][0] * num, matr[2][1] * num, matr[2][2] * num, matr[2][3] * num], [matr[3][0] * num, matr[3][1] * num, matr[3][2] * num, matr[3][3] * num]);
|
|
2784
|
+
}
|
|
2785
|
+
else {
|
|
2786
|
+
var result = Chalkboard.matr.init();
|
|
2787
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
2788
|
+
result[i] = [];
|
|
2789
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
2790
|
+
result[i][j] = matr[i][j] * num;
|
|
2791
|
+
}
|
|
1605
2792
|
}
|
|
2793
|
+
return result;
|
|
1606
2794
|
}
|
|
1607
|
-
return result;
|
|
1608
2795
|
};
|
|
1609
2796
|
matr_1.solve = function (matrA, matrB) {
|
|
1610
|
-
if (Chalkboard.matr.
|
|
2797
|
+
if (Chalkboard.matr.isSquare(matrA)) {
|
|
1611
2798
|
if (Chalkboard.matr.rows(matrA) === Chalkboard.matr.rows(matrB)) {
|
|
1612
2799
|
if (Chalkboard.matr.det(matrA) !== 0) {
|
|
1613
2800
|
return Chalkboard.matr.mul(Chalkboard.matr.invert(matrA), matrB);
|
|
1614
2801
|
}
|
|
1615
2802
|
else {
|
|
1616
|
-
throw new TypeError('Parameter "matrA" must be of type "ChalkboardMatrix" that
|
|
2803
|
+
throw new TypeError('Parameter "matrA" must be of type "ChalkboardMatrix" that has a non-zero determinant.');
|
|
1617
2804
|
}
|
|
1618
2805
|
}
|
|
1619
2806
|
else {
|
|
@@ -1621,53 +2808,190 @@ var Chalkboard;
|
|
|
1621
2808
|
}
|
|
1622
2809
|
}
|
|
1623
2810
|
else {
|
|
1624
|
-
throw new TypeError('
|
|
2811
|
+
throw new TypeError('Parameter "matrA" must be of type "ChalkboardMatrix" that is square.');
|
|
1625
2812
|
}
|
|
1626
2813
|
};
|
|
1627
2814
|
matr_1.sub = function (matr1, matr2) {
|
|
1628
|
-
if (Chalkboard.matr.
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
2815
|
+
if (Chalkboard.matr.isSizeEqual(matr1, matr2)) {
|
|
2816
|
+
if (Chalkboard.matr.isSizeOf(matr1, 2)) {
|
|
2817
|
+
return Chalkboard.matr.init([matr1[0][0] - matr2[0][0], matr1[0][1] - matr2[0][1]], [matr1[1][0] - matr2[1][0], matr1[1][1] - matr2[1][1]]);
|
|
2818
|
+
}
|
|
2819
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 3)) {
|
|
2820
|
+
return Chalkboard.matr.init([matr1[0][0] - matr2[0][0], matr1[0][1] - matr2[0][1], matr1[0][2] - matr2[0][2]], [matr1[1][0] - matr2[1][0], matr1[1][1] - matr2[1][1], matr1[1][2] - matr2[1][2]], [matr1[2][0] - matr2[2][0], matr1[2][1] - matr2[2][1], matr1[2][2] - matr2[2][2]]);
|
|
2821
|
+
}
|
|
2822
|
+
else if (Chalkboard.matr.isSizeOf(matr1, 4)) {
|
|
2823
|
+
return Chalkboard.matr.init([matr1[0][0] - matr2[0][0], matr1[0][1] - matr2[0][1], matr1[0][2] - matr2[0][2], matr1[0][3] - matr2[0][3]], [matr1[1][0] - matr2[1][0], matr1[1][1] - matr2[1][1], matr1[1][2] - matr2[1][2], matr1[1][3] - matr2[1][3]], [matr1[2][0] - matr2[2][0], matr1[2][1] - matr2[2][1], matr1[2][2] - matr2[2][2], matr1[2][3] - matr2[2][3]], [matr1[3][0] - matr2[3][0], matr1[3][1] - matr2[3][1], matr1[3][2] - matr2[3][2], matr1[3][3] - matr2[3][3]]);
|
|
2824
|
+
}
|
|
2825
|
+
else {
|
|
2826
|
+
var result = Chalkboard.matr.init();
|
|
2827
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr1); i++) {
|
|
2828
|
+
result[i] = [];
|
|
2829
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr1); j++) {
|
|
2830
|
+
result[i][j] = matr1[i][j] - matr2[i][j];
|
|
2831
|
+
}
|
|
1634
2832
|
}
|
|
2833
|
+
return result;
|
|
1635
2834
|
}
|
|
1636
|
-
return result;
|
|
1637
2835
|
}
|
|
1638
2836
|
else {
|
|
1639
2837
|
throw new TypeError('Parameters "matr1" and "matr2" must be of type "ChalkboardMatrix" with equivalent numbers of rows and columns.');
|
|
1640
2838
|
}
|
|
1641
2839
|
};
|
|
2840
|
+
matr_1.symmetricBinomial = function (size) {
|
|
2841
|
+
if (size === 2) {
|
|
2842
|
+
return Chalkboard.matr.init([1, 1], [1, 2]);
|
|
2843
|
+
}
|
|
2844
|
+
else if (size === 3) {
|
|
2845
|
+
return Chalkboard.matr.init([1, 1, 1], [1, 2, 3], [1, 3, 6]);
|
|
2846
|
+
}
|
|
2847
|
+
else if (size === 4) {
|
|
2848
|
+
return Chalkboard.matr.init([1, 1, 1, 1], [1, 2, 3, 4], [1, 3, 6, 10], [1, 4, 10, 20]);
|
|
2849
|
+
}
|
|
2850
|
+
else {
|
|
2851
|
+
return Chalkboard.matr.mul(Chalkboard.matr.lowerBinomial(size), Chalkboard.matr.upperBinomial(size));
|
|
2852
|
+
}
|
|
2853
|
+
};
|
|
1642
2854
|
matr_1.toArray = function (matr) {
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
2855
|
+
if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
2856
|
+
return [matr[0][0], matr[0][1], matr[1][0], matr[1][1]];
|
|
2857
|
+
}
|
|
2858
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
2859
|
+
return [matr[0][0], matr[0][1], matr[0][2], matr[1][0], matr[1][1], matr[1][2], matr[2][0], matr[2][1], matr[2][2]];
|
|
2860
|
+
}
|
|
2861
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
2862
|
+
return [
|
|
2863
|
+
matr[0][0],
|
|
2864
|
+
matr[0][1],
|
|
2865
|
+
matr[0][2],
|
|
2866
|
+
matr[0][3],
|
|
2867
|
+
matr[1][0],
|
|
2868
|
+
matr[1][1],
|
|
2869
|
+
matr[1][2],
|
|
2870
|
+
matr[1][3],
|
|
2871
|
+
matr[2][0],
|
|
2872
|
+
matr[2][1],
|
|
2873
|
+
matr[2][2],
|
|
2874
|
+
matr[2][3],
|
|
2875
|
+
matr[3][0],
|
|
2876
|
+
matr[3][1],
|
|
2877
|
+
matr[3][2],
|
|
2878
|
+
matr[3][3]
|
|
2879
|
+
];
|
|
2880
|
+
}
|
|
2881
|
+
else {
|
|
2882
|
+
var result = [];
|
|
2883
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
2884
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
2885
|
+
result.push(matr[i][j]);
|
|
2886
|
+
}
|
|
1647
2887
|
}
|
|
2888
|
+
return result;
|
|
1648
2889
|
}
|
|
1649
|
-
return result;
|
|
1650
2890
|
};
|
|
1651
2891
|
matr_1.toObject = function (matr) {
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
2892
|
+
if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
2893
|
+
return {
|
|
2894
|
+
i1: { j1: matr[0][0], j2: matr[0][1] },
|
|
2895
|
+
i2: { j1: matr[1][0], j2: matr[1][1] }
|
|
2896
|
+
};
|
|
2897
|
+
}
|
|
2898
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
2899
|
+
return {
|
|
2900
|
+
i1: { j1: matr[0][0], j2: matr[0][1], j3: matr[0][2] },
|
|
2901
|
+
i2: { j1: matr[1][0], j2: matr[1][1], j3: matr[1][2] },
|
|
2902
|
+
i3: { j1: matr[2][0], j2: matr[2][1], j3: matr[2][2] }
|
|
2903
|
+
};
|
|
2904
|
+
}
|
|
2905
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
2906
|
+
return {
|
|
2907
|
+
i1: { j1: matr[0][0], j2: matr[0][1], j3: matr[0][2], j4: matr[0][3] },
|
|
2908
|
+
i2: { j1: matr[1][0], j2: matr[1][1], j3: matr[1][2], j4: matr[1][3] },
|
|
2909
|
+
i3: { j1: matr[2][0], j2: matr[2][1], j3: matr[2][2], j4: matr[2][3] },
|
|
2910
|
+
i4: { j1: matr[3][0], j2: matr[3][1], j3: matr[3][2], j4: matr[3][3] }
|
|
2911
|
+
};
|
|
2912
|
+
}
|
|
2913
|
+
else {
|
|
2914
|
+
var result = {};
|
|
2915
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
2916
|
+
result["i" + (i + 1)] = {};
|
|
2917
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
2918
|
+
result["i" + (i + 1)]["j" + (j + 1)] = matr[i][j];
|
|
2919
|
+
}
|
|
1657
2920
|
}
|
|
2921
|
+
return result;
|
|
1658
2922
|
}
|
|
1659
|
-
return result;
|
|
1660
2923
|
};
|
|
1661
2924
|
matr_1.toString = function (matr) {
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
2925
|
+
if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
2926
|
+
return "[ " + matr[0][0].toString() + " " + matr[0][1].toString() + " ]\n[ " + matr[1][0].toString() + " " + matr[1][1].toString() + " ]";
|
|
2927
|
+
}
|
|
2928
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
2929
|
+
return ("[ " +
|
|
2930
|
+
matr[0][0].toString() +
|
|
2931
|
+
" " +
|
|
2932
|
+
matr[0][1].toString() +
|
|
2933
|
+
" " +
|
|
2934
|
+
matr[0][2].toString() +
|
|
2935
|
+
" ]\n[ " +
|
|
2936
|
+
matr[1][0].toString() +
|
|
2937
|
+
" " +
|
|
2938
|
+
matr[1][1].toString() +
|
|
2939
|
+
" " +
|
|
2940
|
+
matr[1][2].toString() +
|
|
2941
|
+
" ]\n[ " +
|
|
2942
|
+
matr[2][0].toString() +
|
|
2943
|
+
" " +
|
|
2944
|
+
matr[2][1].toString() +
|
|
2945
|
+
" " +
|
|
2946
|
+
matr[2][2].toString() +
|
|
2947
|
+
" ]");
|
|
2948
|
+
}
|
|
2949
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
2950
|
+
return ("[ " +
|
|
2951
|
+
matr[0][0].toString() +
|
|
2952
|
+
" " +
|
|
2953
|
+
matr[0][1].toString() +
|
|
2954
|
+
" " +
|
|
2955
|
+
matr[0][2].toString() +
|
|
2956
|
+
" " +
|
|
2957
|
+
matr[0][3].toString() +
|
|
2958
|
+
" ]\n[ " +
|
|
2959
|
+
matr[1][0].toString() +
|
|
2960
|
+
" " +
|
|
2961
|
+
matr[1][1].toString() +
|
|
2962
|
+
" " +
|
|
2963
|
+
matr[1][2].toString() +
|
|
2964
|
+
" " +
|
|
2965
|
+
matr[1][3].toString() +
|
|
2966
|
+
" ]\n[ " +
|
|
2967
|
+
matr[2][0].toString() +
|
|
2968
|
+
" " +
|
|
2969
|
+
matr[2][1].toString() +
|
|
2970
|
+
" " +
|
|
2971
|
+
matr[2][2].toString() +
|
|
2972
|
+
" " +
|
|
2973
|
+
matr[2][3].toString() +
|
|
2974
|
+
" ]\n[ " +
|
|
2975
|
+
matr[3][0].toString() +
|
|
2976
|
+
" " +
|
|
2977
|
+
matr[3][1].toString() +
|
|
2978
|
+
" " +
|
|
2979
|
+
matr[3][2].toString() +
|
|
2980
|
+
" " +
|
|
2981
|
+
matr[3][3].toString() +
|
|
2982
|
+
" ]");
|
|
2983
|
+
}
|
|
2984
|
+
else {
|
|
2985
|
+
var result = "";
|
|
2986
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
2987
|
+
result += "[ ";
|
|
2988
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
2989
|
+
result += matr[i][j].toString() + " ";
|
|
2990
|
+
}
|
|
2991
|
+
result = result.trimEnd() + " ]\n";
|
|
1667
2992
|
}
|
|
1668
|
-
|
|
2993
|
+
return result;
|
|
1669
2994
|
}
|
|
1670
|
-
return result;
|
|
1671
2995
|
};
|
|
1672
2996
|
matr_1.toTensor = function (matr) {
|
|
1673
2997
|
var _a;
|
|
@@ -1675,73 +2999,92 @@ var Chalkboard;
|
|
|
1675
2999
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
1676
3000
|
size[_i - 1] = arguments[_i];
|
|
1677
3001
|
}
|
|
1678
|
-
|
|
1679
|
-
size = size[0];
|
|
1680
|
-
}
|
|
3002
|
+
size = Array.isArray(size[0]) ? size[0] : size;
|
|
1681
3003
|
return (_a = Chalkboard.tens).resize.apply(_a, __spreadArray([matr], size, false));
|
|
1682
3004
|
};
|
|
1683
|
-
matr_1.toVector = function (matr, dimension,
|
|
1684
|
-
if (
|
|
1685
|
-
if (
|
|
1686
|
-
rowORcol -= 1;
|
|
3005
|
+
matr_1.toVector = function (matr, dimension, index, axis) {
|
|
3006
|
+
if (index === void 0) { index = 0; }
|
|
3007
|
+
if (axis === void 0) { axis = 0; }
|
|
1687
3008
|
if (dimension === 2) {
|
|
1688
|
-
if (
|
|
1689
|
-
return Chalkboard.vect.init(matr[0][
|
|
3009
|
+
if (axis === 0) {
|
|
3010
|
+
return Chalkboard.vect.init(matr[0][index], matr[1][index]);
|
|
1690
3011
|
}
|
|
1691
|
-
else if (
|
|
1692
|
-
return Chalkboard.vect.init(matr[
|
|
3012
|
+
else if (axis === 1) {
|
|
3013
|
+
return Chalkboard.vect.init(matr[index][0], matr[index][1]);
|
|
1693
3014
|
}
|
|
1694
3015
|
else {
|
|
1695
|
-
throw new TypeError('Parameter "
|
|
3016
|
+
throw new TypeError('Parameter "axis" must be 0 or 1.');
|
|
1696
3017
|
}
|
|
1697
3018
|
}
|
|
1698
3019
|
else if (dimension === 3) {
|
|
1699
|
-
if (
|
|
1700
|
-
return Chalkboard.vect.init(matr[0][
|
|
3020
|
+
if (axis === 0) {
|
|
3021
|
+
return Chalkboard.vect.init(matr[0][index], matr[1][index], matr[2][index]);
|
|
1701
3022
|
}
|
|
1702
|
-
else if (
|
|
1703
|
-
return Chalkboard.vect.init(matr[
|
|
3023
|
+
else if (axis === 1) {
|
|
3024
|
+
return Chalkboard.vect.init(matr[index][0], matr[index][1], matr[index][2]);
|
|
1704
3025
|
}
|
|
1705
3026
|
else {
|
|
1706
|
-
throw new TypeError('Parameter "
|
|
3027
|
+
throw new TypeError('Parameter "axis" must be 0 or 1.');
|
|
1707
3028
|
}
|
|
1708
3029
|
}
|
|
1709
3030
|
else if (dimension === 4) {
|
|
1710
|
-
if (
|
|
1711
|
-
return Chalkboard.vect.init(matr[0][
|
|
3031
|
+
if (axis === 0) {
|
|
3032
|
+
return Chalkboard.vect.init(matr[0][index], matr[1][index], matr[2][index], matr[3][index]);
|
|
1712
3033
|
}
|
|
1713
|
-
else if (
|
|
1714
|
-
return Chalkboard.vect.init(matr[
|
|
3034
|
+
else if (axis === 1) {
|
|
3035
|
+
return Chalkboard.vect.init(matr[index][0], matr[index][1], matr[index][2], matr[index][3]);
|
|
1715
3036
|
}
|
|
1716
3037
|
else {
|
|
1717
|
-
throw new TypeError('Parameter "
|
|
3038
|
+
throw new TypeError('Parameter "axis" must be 0 or 1.');
|
|
1718
3039
|
}
|
|
1719
3040
|
}
|
|
1720
3041
|
else {
|
|
1721
|
-
throw new TypeError('Parameter "
|
|
3042
|
+
throw new TypeError('Parameter "dimension" must be 2, 3, or 4.');
|
|
1722
3043
|
}
|
|
1723
3044
|
};
|
|
1724
3045
|
matr_1.trace = function (matr) {
|
|
1725
|
-
if (Chalkboard.matr.
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
3046
|
+
if (Chalkboard.matr.isSquare(matr)) {
|
|
3047
|
+
if (Chalkboard.matr.rows(matr) === 2) {
|
|
3048
|
+
return matr[0][0] + matr[1][1];
|
|
3049
|
+
}
|
|
3050
|
+
else if (Chalkboard.matr.rows(matr) === 3) {
|
|
3051
|
+
return matr[0][0] + matr[1][1] + matr[2][2];
|
|
3052
|
+
}
|
|
3053
|
+
else if (Chalkboard.matr.rows(matr) === 4) {
|
|
3054
|
+
return matr[0][0] + matr[1][1] + matr[2][2] + matr[3][3];
|
|
3055
|
+
}
|
|
3056
|
+
else {
|
|
3057
|
+
var result = 0;
|
|
3058
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
3059
|
+
result += matr[i][i];
|
|
3060
|
+
}
|
|
3061
|
+
return result;
|
|
1729
3062
|
}
|
|
1730
|
-
return result;
|
|
1731
3063
|
}
|
|
1732
3064
|
else {
|
|
1733
3065
|
throw new TypeError('Parameter "matr" must be of type "ChalkboardMatrix" that is square.');
|
|
1734
3066
|
}
|
|
1735
3067
|
};
|
|
1736
3068
|
matr_1.transpose = function (matr) {
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
3069
|
+
if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
3070
|
+
return Chalkboard.matr.init([matr[0][0], matr[1][0]], [matr[0][1], matr[1][1]]);
|
|
3071
|
+
}
|
|
3072
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
3073
|
+
return Chalkboard.matr.init([matr[0][0], matr[1][0], matr[2][0]], [matr[0][1], matr[1][1], matr[2][1]], [matr[0][2], matr[1][2], matr[2][2]]);
|
|
3074
|
+
}
|
|
3075
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
3076
|
+
return Chalkboard.matr.init([matr[0][0], matr[1][0], matr[2][0], matr[3][0]], [matr[0][1], matr[1][1], matr[2][1], matr[3][1]], [matr[0][2], matr[1][2], matr[2][2], matr[3][2]], [matr[0][3], matr[1][3], matr[2][3], matr[3][3]]);
|
|
3077
|
+
}
|
|
3078
|
+
else {
|
|
3079
|
+
var result = Chalkboard.matr.init();
|
|
3080
|
+
for (var i = 0; i < Chalkboard.matr.cols(matr); i++) {
|
|
3081
|
+
result[i] = [];
|
|
3082
|
+
for (var j = 0; j < Chalkboard.matr.rows(matr); j++) {
|
|
3083
|
+
result[i][j] = matr[j][i];
|
|
3084
|
+
}
|
|
1742
3085
|
}
|
|
3086
|
+
return result;
|
|
1743
3087
|
}
|
|
1744
|
-
return result;
|
|
1745
3088
|
};
|
|
1746
3089
|
matr_1.translator = function (vect) {
|
|
1747
3090
|
if (typeof vect.x === "number" && typeof vect.y === "number" && typeof vect.z === "undefined" && typeof vect.w === "undefined") {
|
|
@@ -1757,15 +3100,95 @@ var Chalkboard;
|
|
|
1757
3100
|
throw new TypeError('Parameter "vect" must be of type "ChalkboardVector" with 2, 3, or 4 dimensions.');
|
|
1758
3101
|
}
|
|
1759
3102
|
};
|
|
3103
|
+
matr_1.upperBinomial = function (size) {
|
|
3104
|
+
if (size === 2) {
|
|
3105
|
+
return Chalkboard.matr.init([1, 1], [0, 1]);
|
|
3106
|
+
}
|
|
3107
|
+
else if (size === 3) {
|
|
3108
|
+
return Chalkboard.matr.init([1, 2, 1], [0, 1, 1], [0, 0, 1]);
|
|
3109
|
+
}
|
|
3110
|
+
else if (size === 4) {
|
|
3111
|
+
return Chalkboard.matr.init([1, 3, 3, 1], [0, 1, 2, 1], [0, 0, 1, 1], [0, 0, 0, 1]);
|
|
3112
|
+
}
|
|
3113
|
+
else {
|
|
3114
|
+
var result = Chalkboard.matr.init();
|
|
3115
|
+
for (var i = 0; i < size; i++) {
|
|
3116
|
+
result.push([]);
|
|
3117
|
+
for (var j = 0; j < size; j++) {
|
|
3118
|
+
result[i].push(Chalkboard.numb.binomial(j, i));
|
|
3119
|
+
}
|
|
3120
|
+
}
|
|
3121
|
+
return result;
|
|
3122
|
+
}
|
|
3123
|
+
};
|
|
3124
|
+
matr_1.upperShift = function (size) {
|
|
3125
|
+
if (size === 2) {
|
|
3126
|
+
return Chalkboard.matr.init([0, 1], [0, 0]);
|
|
3127
|
+
}
|
|
3128
|
+
else if (size === 3) {
|
|
3129
|
+
return Chalkboard.matr.init([0, 1, 0], [0, 0, 1], [0, 0, 0]);
|
|
3130
|
+
}
|
|
3131
|
+
else if (size === 4) {
|
|
3132
|
+
return Chalkboard.matr.init([0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1], [0, 0, 0, 0]);
|
|
3133
|
+
}
|
|
3134
|
+
else {
|
|
3135
|
+
var result = Chalkboard.matr.init();
|
|
3136
|
+
for (var i = 0; i < size; i++) {
|
|
3137
|
+
result[i] = [];
|
|
3138
|
+
for (var j = 0; j < size; j++) {
|
|
3139
|
+
result[i][j] = Chalkboard.numb.Kronecker(i + 1, j);
|
|
3140
|
+
}
|
|
3141
|
+
}
|
|
3142
|
+
return result;
|
|
3143
|
+
}
|
|
3144
|
+
};
|
|
3145
|
+
matr_1.upperTriangular = function (size) {
|
|
3146
|
+
var elements = [];
|
|
3147
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
3148
|
+
elements[_i - 1] = arguments[_i];
|
|
3149
|
+
}
|
|
3150
|
+
if (size === 2) {
|
|
3151
|
+
return Chalkboard.matr.init([elements[0] || 0, elements[1] || 0], [0, elements[2] || 0]);
|
|
3152
|
+
}
|
|
3153
|
+
else if (size === 3) {
|
|
3154
|
+
return Chalkboard.matr.init([elements[0] || 0, elements[1] || 0, elements[2] || 0], [0, elements[3] || 0, elements[4] || 0], [0, 0, elements[5] || 0]);
|
|
3155
|
+
}
|
|
3156
|
+
else if (size === 4) {
|
|
3157
|
+
return Chalkboard.matr.init([elements[0] || 0, elements[1] || 0, elements[2] || 0, elements[3] || 0], [0, elements[4] || 0, elements[5] || 0, elements[6] || 0], [0, 0, elements[7] || 0, elements[8] || 0], [0, 0, 0, elements[9] || 0]);
|
|
3158
|
+
}
|
|
3159
|
+
else {
|
|
3160
|
+
elements = Array.isArray(elements[0]) ? elements[0] : elements;
|
|
3161
|
+
var result = Chalkboard.matr.init();
|
|
3162
|
+
var index = 0;
|
|
3163
|
+
for (var i = 0; i < size; i++) {
|
|
3164
|
+
result[i] = [];
|
|
3165
|
+
for (var j = 0; j < size; j++) {
|
|
3166
|
+
result[i][j] = j >= i ? elements[index++] || 0 : 0;
|
|
3167
|
+
}
|
|
3168
|
+
}
|
|
3169
|
+
return result;
|
|
3170
|
+
}
|
|
3171
|
+
};
|
|
1760
3172
|
matr_1.zero = function (matr) {
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
3173
|
+
if (Chalkboard.matr.isSizeOf(matr, 2)) {
|
|
3174
|
+
return Chalkboard.matr.init([matr[0][0] * 0, matr[0][1] * 0], [matr[1][0] * 0, matr[1][1] * 0]);
|
|
3175
|
+
}
|
|
3176
|
+
else if (Chalkboard.matr.isSizeOf(matr, 3)) {
|
|
3177
|
+
return Chalkboard.matr.init([matr[0][0] * 0, matr[0][1] * 0, matr[0][2] * 0], [matr[1][0] * 0, matr[1][1] * 0, matr[1][2] * 0], [matr[2][0] * 0, matr[2][1] * 0, matr[2][2] * 0]);
|
|
3178
|
+
}
|
|
3179
|
+
else if (Chalkboard.matr.isSizeOf(matr, 4)) {
|
|
3180
|
+
return Chalkboard.matr.init([matr[0][0] * 0, matr[0][1] * 0, matr[0][2] * 0, matr[0][3] * 0], [matr[1][0] * 0, matr[1][1] * 0, matr[1][2] * 0, matr[1][3] * 0], [matr[2][0] * 0, matr[2][1] * 0, matr[2][2] * 0, matr[2][3] * 0], [matr[3][0] * 0, matr[3][1] * 0, matr[3][2] * 0, matr[3][3] * 0]);
|
|
3181
|
+
}
|
|
3182
|
+
else {
|
|
3183
|
+
var result = Chalkboard.matr.init();
|
|
3184
|
+
for (var i = 0; i < Chalkboard.matr.rows(matr); i++) {
|
|
3185
|
+
result[i] = [];
|
|
3186
|
+
for (var j = 0; j < Chalkboard.matr.cols(matr); j++) {
|
|
3187
|
+
result[i][j] = matr[i][j] * 0;
|
|
3188
|
+
}
|
|
1766
3189
|
}
|
|
3190
|
+
return result;
|
|
1767
3191
|
}
|
|
1768
|
-
return result;
|
|
1769
3192
|
};
|
|
1770
3193
|
})(matr = Chalkboard.matr || (Chalkboard.matr = {}));
|
|
1771
3194
|
})(Chalkboard || (Chalkboard = {}));
|
|
@@ -1775,9 +3198,6 @@ var Chalkboard;
|
|
|
1775
3198
|
(function (numb) {
|
|
1776
3199
|
numb.Bernoullian = function (p) {
|
|
1777
3200
|
if (p === void 0) { p = 0.5; }
|
|
1778
|
-
if (p === undefined) {
|
|
1779
|
-
p = 0.5;
|
|
1780
|
-
}
|
|
1781
3201
|
return Math.random() < p ? 1 : 0;
|
|
1782
3202
|
};
|
|
1783
3203
|
numb.binomial = function (n, k) {
|
|
@@ -1914,6 +3334,10 @@ var Chalkboard;
|
|
|
1914
3334
|
return undefined;
|
|
1915
3335
|
}
|
|
1916
3336
|
};
|
|
3337
|
+
numb.isApproxEqual = function (a, b, precision) {
|
|
3338
|
+
if (precision === void 0) { precision = 0.000001; }
|
|
3339
|
+
return Math.abs(a - b) < precision;
|
|
3340
|
+
};
|
|
1917
3341
|
numb.isPrime = function (num) {
|
|
1918
3342
|
for (var i = 2; i <= Chalkboard.real.sqrt(num); i++) {
|
|
1919
3343
|
if (num % i === 0) {
|
|
@@ -1936,6 +3360,9 @@ var Chalkboard;
|
|
|
1936
3360
|
numb.map = function (num, range1, range2) {
|
|
1937
3361
|
return range2[0] + (range2[1] - range2[0]) * ((num - range1[0]) / (range1[1] - range1[0]));
|
|
1938
3362
|
};
|
|
3363
|
+
numb.mod = function (a, b) {
|
|
3364
|
+
return ((a % b) + b) % b;
|
|
3365
|
+
};
|
|
1939
3366
|
numb.mul = function (formula, inf, sup) {
|
|
1940
3367
|
var result = 1;
|
|
1941
3368
|
var f = Chalkboard.real.parse("n => " + formula);
|
|
@@ -2017,6 +3444,9 @@ var Chalkboard;
|
|
|
2017
3444
|
if (sup === void 0) { sup = 1; }
|
|
2018
3445
|
return inf + (sup - inf) * Math.random();
|
|
2019
3446
|
};
|
|
3447
|
+
numb.roundTo = function (num, positionalIndex) {
|
|
3448
|
+
return Math.round(num / positionalIndex) * positionalIndex;
|
|
3449
|
+
};
|
|
2020
3450
|
numb.sgn = function (num) {
|
|
2021
3451
|
if (num > 0) {
|
|
2022
3452
|
return 1;
|
|
@@ -2999,6 +4429,9 @@ var Chalkboard;
|
|
|
2999
4429
|
quat_1.toArray = function (quat) {
|
|
3000
4430
|
return [quat.a, quat.b, quat.c, quat.d];
|
|
3001
4431
|
};
|
|
4432
|
+
quat_1.toMatrix = function (quat) {
|
|
4433
|
+
return Chalkboard.matr.init([quat.a, -quat.b, -quat.c, -quat.d], [quat.b, quat.a, -quat.d, quat.c], [quat.c, quat.d, quat.a, -quat.b], [quat.d, -quat.c, quat.b, quat.a]);
|
|
4434
|
+
};
|
|
3002
4435
|
quat_1.toRotation = function (quat, vect) {
|
|
3003
4436
|
var vector = Chalkboard.vect.toQuaternion(vect);
|
|
3004
4437
|
var inverse = Chalkboard.quat.invert(quat);
|
|
@@ -3750,9 +5183,7 @@ var Chalkboard;
|
|
|
3750
5183
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
3751
5184
|
size[_i] = arguments[_i];
|
|
3752
5185
|
}
|
|
3753
|
-
|
|
3754
|
-
size = size[0];
|
|
3755
|
-
}
|
|
5186
|
+
size = Array.isArray(size[0]) ? size[0] : size;
|
|
3756
5187
|
var newNDArray = function (size) {
|
|
3757
5188
|
if (size.length === 0) {
|
|
3758
5189
|
return null;
|
|
@@ -3772,9 +5203,7 @@ var Chalkboard;
|
|
|
3772
5203
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
3773
5204
|
size[_i - 1] = arguments[_i];
|
|
3774
5205
|
}
|
|
3775
|
-
|
|
3776
|
-
size = size[0];
|
|
3777
|
-
}
|
|
5206
|
+
size = Array.isArray(size[0]) ? size[0] : size;
|
|
3778
5207
|
var newNDArray = function (size) {
|
|
3779
5208
|
if (size.length === 0) {
|
|
3780
5209
|
return element;
|
|
@@ -3815,6 +5244,61 @@ var Chalkboard;
|
|
|
3815
5244
|
};
|
|
3816
5245
|
return newNDArray(tensor);
|
|
3817
5246
|
};
|
|
5247
|
+
tens_1.isEqual = function (tens1, tens2) {
|
|
5248
|
+
if (Chalkboard.tens.isSizeEqual(tens1, tens2)) {
|
|
5249
|
+
(tens1 = tens1), (tens2 = tens2);
|
|
5250
|
+
for (var i = 0; i < tens1.length; i++) {
|
|
5251
|
+
if (Array.isArray(tens1[i]) && Array.isArray(tens2[i])) {
|
|
5252
|
+
if (!Chalkboard.tens.isEqual(tens1[i], tens2[i]))
|
|
5253
|
+
return false;
|
|
5254
|
+
}
|
|
5255
|
+
else {
|
|
5256
|
+
if (tens1[i] !== tens2[i])
|
|
5257
|
+
return false;
|
|
5258
|
+
}
|
|
5259
|
+
}
|
|
5260
|
+
return true;
|
|
5261
|
+
}
|
|
5262
|
+
else {
|
|
5263
|
+
return false;
|
|
5264
|
+
}
|
|
5265
|
+
};
|
|
5266
|
+
tens_1.isRankEqual = function (tens1, tens2) {
|
|
5267
|
+
return Chalkboard.tens.rank(tens1) === Chalkboard.tens.rank(tens2);
|
|
5268
|
+
};
|
|
5269
|
+
tens_1.isRankOf = function (tens, rank) {
|
|
5270
|
+
return Chalkboard.tens.rank(tens) === rank;
|
|
5271
|
+
};
|
|
5272
|
+
tens_1.isSizeEqual = function (tens1, tens2) {
|
|
5273
|
+
if (Chalkboard.tens.isRankEqual(tens1, tens2)) {
|
|
5274
|
+
var score = 0;
|
|
5275
|
+
for (var i = 0; i < Chalkboard.tens.rank(tens1); i++) {
|
|
5276
|
+
if (Chalkboard.tens.size(tens1)[i] !== Chalkboard.tens.size(tens2)[i])
|
|
5277
|
+
score++;
|
|
5278
|
+
}
|
|
5279
|
+
return score === 0;
|
|
5280
|
+
}
|
|
5281
|
+
else {
|
|
5282
|
+
return false;
|
|
5283
|
+
}
|
|
5284
|
+
};
|
|
5285
|
+
tens_1.isSizeOf = function (tens) {
|
|
5286
|
+
var _a;
|
|
5287
|
+
var size = [];
|
|
5288
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
5289
|
+
size[_i - 1] = arguments[_i];
|
|
5290
|
+
}
|
|
5291
|
+
size = Array.isArray(size[0]) ? size[0] : size;
|
|
5292
|
+
return Chalkboard.tens.isSizeEqual(tens, (_a = Chalkboard.tens).empty.apply(_a, size));
|
|
5293
|
+
};
|
|
5294
|
+
tens_1.isSizeUniform = function (tens) {
|
|
5295
|
+
var score = 0;
|
|
5296
|
+
for (var i = 0; i < Chalkboard.tens.rank(tens); i++) {
|
|
5297
|
+
if (Chalkboard.tens.size(tens)[i] !== Chalkboard.tens.size(tens)[0])
|
|
5298
|
+
score++;
|
|
5299
|
+
}
|
|
5300
|
+
return score === 0;
|
|
5301
|
+
};
|
|
3818
5302
|
tens_1.mul = function (tens1, tens2) {
|
|
3819
5303
|
var result = Chalkboard.tens.init();
|
|
3820
5304
|
if (Array.isArray(tens1) && Array.isArray(tens2)) {
|
|
@@ -3877,9 +5361,7 @@ var Chalkboard;
|
|
|
3877
5361
|
for (var _i = 2; _i < arguments.length; _i++) {
|
|
3878
5362
|
size[_i - 2] = arguments[_i];
|
|
3879
5363
|
}
|
|
3880
|
-
|
|
3881
|
-
size = size[0];
|
|
3882
|
-
}
|
|
5364
|
+
size = Array.isArray(size[0]) ? size[0] : size;
|
|
3883
5365
|
var newNDArray = function (size) {
|
|
3884
5366
|
if (size.length === 0) {
|
|
3885
5367
|
return Chalkboard.numb.random(inf, sup);
|
|
@@ -3895,16 +5377,7 @@ var Chalkboard;
|
|
|
3895
5377
|
return newNDArray(size);
|
|
3896
5378
|
};
|
|
3897
5379
|
tens_1.rank = function (tens) {
|
|
3898
|
-
|
|
3899
|
-
var result = 0;
|
|
3900
|
-
for (var i = 0; i < tens.length; i++) {
|
|
3901
|
-
result = Math.max(result, Chalkboard.tens.rank(tens[i]));
|
|
3902
|
-
}
|
|
3903
|
-
return result + 1;
|
|
3904
|
-
}
|
|
3905
|
-
else {
|
|
3906
|
-
return 0;
|
|
3907
|
-
}
|
|
5380
|
+
return Chalkboard.tens.size(tens).length;
|
|
3908
5381
|
};
|
|
3909
5382
|
tens_1.reciprocate = function (tens) {
|
|
3910
5383
|
var result = Chalkboard.tens.init();
|
|
@@ -3924,9 +5397,7 @@ var Chalkboard;
|
|
|
3924
5397
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
3925
5398
|
size[_i - 1] = arguments[_i];
|
|
3926
5399
|
}
|
|
3927
|
-
|
|
3928
|
-
size = size[0];
|
|
3929
|
-
}
|
|
5400
|
+
size = Array.isArray(size[0]) ? size[0] : size;
|
|
3930
5401
|
var result = (_a = Chalkboard.tens).fill.apply(_a, __spreadArray([0], size, false));
|
|
3931
5402
|
var refill = function (arr1, arr2) {
|
|
3932
5403
|
for (var i = 0; i < arr2.length; i++) {
|
|
@@ -4310,13 +5781,13 @@ var Chalkboard;
|
|
|
4310
5781
|
var vect;
|
|
4311
5782
|
(function (vect_3) {
|
|
4312
5783
|
vect_3.absolute = function (vect) {
|
|
4313
|
-
if (
|
|
5784
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4314
5785
|
return Chalkboard.vect.init(Math.abs(vect.x), Math.abs(vect.y));
|
|
4315
5786
|
}
|
|
4316
|
-
else if (
|
|
5787
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4317
5788
|
return Chalkboard.vect.init(Math.abs(vect.x), Math.abs(vect.y), Math.abs(vect.z));
|
|
4318
5789
|
}
|
|
4319
|
-
else if (
|
|
5790
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4320
5791
|
return Chalkboard.vect.init(Math.abs(vect.x), Math.abs(vect.y), Math.abs(vect.z), Math.abs(vect.w));
|
|
4321
5792
|
}
|
|
4322
5793
|
else {
|
|
@@ -4324,34 +5795,13 @@ var Chalkboard;
|
|
|
4324
5795
|
}
|
|
4325
5796
|
};
|
|
4326
5797
|
vect_3.add = function (vect1, vect2) {
|
|
4327
|
-
if (
|
|
4328
|
-
typeof vect1.y === "number" &&
|
|
4329
|
-
typeof vect1.z === "undefined" &&
|
|
4330
|
-
typeof vect1.w === "undefined" &&
|
|
4331
|
-
typeof vect2.x === "number" &&
|
|
4332
|
-
typeof vect2.y === "number" &&
|
|
4333
|
-
typeof vect2.z === "undefined" &&
|
|
4334
|
-
typeof vect2.w === "undefined") {
|
|
5798
|
+
if (Chalkboard.vect.isDimensionOf(vect1, 2) && Chalkboard.vect.isDimensionOf(vect2, 2)) {
|
|
4335
5799
|
return Chalkboard.vect.init(vect1.x + vect2.x, vect1.y + vect2.y);
|
|
4336
5800
|
}
|
|
4337
|
-
else if (
|
|
4338
|
-
typeof vect1.y === "number" &&
|
|
4339
|
-
typeof vect1.z === "number" &&
|
|
4340
|
-
typeof vect1.w === "undefined" &&
|
|
4341
|
-
typeof vect2.x === "number" &&
|
|
4342
|
-
typeof vect2.y === "number" &&
|
|
4343
|
-
typeof vect2.z === "number" &&
|
|
4344
|
-
typeof vect2.w === "undefined") {
|
|
5801
|
+
else if (Chalkboard.vect.isDimensionOf(vect1, 3) && Chalkboard.vect.isDimensionOf(vect2, 3)) {
|
|
4345
5802
|
return Chalkboard.vect.init(vect1.x + vect2.x, vect1.y + vect2.y, vect1.z + vect2.z);
|
|
4346
5803
|
}
|
|
4347
|
-
else if (
|
|
4348
|
-
typeof vect1.y === "number" &&
|
|
4349
|
-
typeof vect1.z === "number" &&
|
|
4350
|
-
typeof vect1.w === "number" &&
|
|
4351
|
-
typeof vect2.x === "number" &&
|
|
4352
|
-
typeof vect2.y === "number" &&
|
|
4353
|
-
typeof vect2.z === "number" &&
|
|
4354
|
-
typeof vect2.w === "number") {
|
|
5804
|
+
else if (Chalkboard.vect.isDimensionOf(vect1, 4) && Chalkboard.vect.isDimensionOf(vect2, 4)) {
|
|
4355
5805
|
return Chalkboard.vect.init(vect1.x + vect2.x, vect1.y + vect2.y, vect1.z + vect2.z, vect1.w + vect2.w);
|
|
4356
5806
|
}
|
|
4357
5807
|
else {
|
|
@@ -4359,13 +5809,13 @@ var Chalkboard;
|
|
|
4359
5809
|
}
|
|
4360
5810
|
};
|
|
4361
5811
|
vect_3.ang = function (vect) {
|
|
4362
|
-
if (
|
|
5812
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4363
5813
|
return Chalkboard.trig.arctan2(vect.y, vect.x);
|
|
4364
5814
|
}
|
|
4365
|
-
else if (
|
|
5815
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4366
5816
|
return [Math.acos(vect.x / Chalkboard.vect.mag(vect)), Math.acos(vect.y / Chalkboard.vect.mag(vect)), Math.acos(vect.z / Chalkboard.vect.mag(vect))];
|
|
4367
5817
|
}
|
|
4368
|
-
else if (
|
|
5818
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4369
5819
|
return [
|
|
4370
5820
|
Math.acos(vect.x / Chalkboard.vect.mag(vect)),
|
|
4371
5821
|
Math.acos(vect.y / Chalkboard.vect.mag(vect)),
|
|
@@ -4382,13 +5832,13 @@ var Chalkboard;
|
|
|
4382
5832
|
};
|
|
4383
5833
|
vect_3.constrain = function (vect, range) {
|
|
4384
5834
|
if (range === void 0) { range = [0, 1]; }
|
|
4385
|
-
if (
|
|
5835
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4386
5836
|
return Chalkboard.vect.init(Chalkboard.numb.constrain(vect.x, range), Chalkboard.numb.constrain(vect.y, range));
|
|
4387
5837
|
}
|
|
4388
|
-
else if (
|
|
5838
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4389
5839
|
return Chalkboard.vect.init(Chalkboard.numb.constrain(vect.x, range), Chalkboard.numb.constrain(vect.y, range), Chalkboard.numb.constrain(vect.z, range));
|
|
4390
5840
|
}
|
|
4391
|
-
else if (
|
|
5841
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4392
5842
|
return Chalkboard.vect.init(Chalkboard.numb.constrain(vect.x, range), Chalkboard.numb.constrain(vect.y, range), Chalkboard.numb.constrain(vect.z, range), Chalkboard.numb.constrain(vect.w, range));
|
|
4393
5843
|
}
|
|
4394
5844
|
else {
|
|
@@ -4399,24 +5849,10 @@ var Chalkboard;
|
|
|
4399
5849
|
return Object.create(Object.getPrototypeOf(vect), Object.getOwnPropertyDescriptors(vect));
|
|
4400
5850
|
};
|
|
4401
5851
|
vect_3.cross = function (vect1, vect2) {
|
|
4402
|
-
if (
|
|
4403
|
-
typeof vect1.y === "number" &&
|
|
4404
|
-
typeof vect1.z === "undefined" &&
|
|
4405
|
-
typeof vect1.w === "undefined" &&
|
|
4406
|
-
typeof vect2.x === "number" &&
|
|
4407
|
-
typeof vect2.y === "number" &&
|
|
4408
|
-
typeof vect2.z === "undefined" &&
|
|
4409
|
-
typeof vect2.w === "undefined") {
|
|
5852
|
+
if (Chalkboard.vect.isDimensionOf(vect1, 2) && Chalkboard.vect.isDimensionOf(vect2, 2)) {
|
|
4410
5853
|
return Chalkboard.vect.init(0, 0, vect1.x * vect2.y - vect1.y * vect2.x);
|
|
4411
5854
|
}
|
|
4412
|
-
else if (
|
|
4413
|
-
typeof vect1.y === "number" &&
|
|
4414
|
-
typeof vect1.z === "number" &&
|
|
4415
|
-
typeof vect1.w === "undefined" &&
|
|
4416
|
-
typeof vect2.x === "number" &&
|
|
4417
|
-
typeof vect2.y === "number" &&
|
|
4418
|
-
typeof vect2.z === "number" &&
|
|
4419
|
-
typeof vect2.w === "undefined") {
|
|
5855
|
+
else if (Chalkboard.vect.isDimensionOf(vect1, 3) && Chalkboard.vect.isDimensionOf(vect2, 3)) {
|
|
4420
5856
|
return Chalkboard.vect.init(vect1.y * vect2.z - vect1.z * vect2.y, vect1.z * vect2.x - vect1.x * vect2.z, vect1.x * vect2.y - vect1.y * vect2.x);
|
|
4421
5857
|
}
|
|
4422
5858
|
else {
|
|
@@ -4443,104 +5879,47 @@ var Chalkboard;
|
|
|
4443
5879
|
}
|
|
4444
5880
|
};
|
|
4445
5881
|
vect_3.dist = function (vect1, vect2) {
|
|
4446
|
-
if (
|
|
4447
|
-
typeof vect1.y === "number" &&
|
|
4448
|
-
typeof vect1.z === "undefined" &&
|
|
4449
|
-
typeof vect1.w === "undefined" &&
|
|
4450
|
-
typeof vect2.x === "number" &&
|
|
4451
|
-
typeof vect2.y === "number" &&
|
|
4452
|
-
typeof vect2.z === "undefined" &&
|
|
4453
|
-
typeof vect2.w === "undefined") {
|
|
5882
|
+
if (Chalkboard.vect.isDimensionOf(vect1, 2) && Chalkboard.vect.isDimensionOf(vect2, 2)) {
|
|
4454
5883
|
return Chalkboard.real.sqrt((vect2.x - vect1.x) * (vect2.x - vect1.x) + (vect2.y - vect1.y) * (vect2.y - vect1.y));
|
|
4455
5884
|
}
|
|
4456
|
-
else if (
|
|
4457
|
-
typeof vect1.y === "number" &&
|
|
4458
|
-
typeof vect1.z === "number" &&
|
|
4459
|
-
typeof vect1.w === "undefined" &&
|
|
4460
|
-
typeof vect2.x === "number" &&
|
|
4461
|
-
typeof vect2.y === "number" &&
|
|
4462
|
-
typeof vect2.z === "number" &&
|
|
4463
|
-
typeof vect2.w === "undefined") {
|
|
5885
|
+
else if (Chalkboard.vect.isDimensionOf(vect1, 3) && Chalkboard.vect.isDimensionOf(vect2, 3)) {
|
|
4464
5886
|
return Chalkboard.real.sqrt((vect2.x - vect1.x) * (vect2.x - vect1.x) + (vect2.y - vect1.y) * (vect2.y - vect1.y) + (vect2.z - vect1.z) * (vect2.z - vect1.z));
|
|
4465
5887
|
}
|
|
4466
|
-
else if (
|
|
4467
|
-
|
|
4468
|
-
|
|
4469
|
-
|
|
4470
|
-
|
|
4471
|
-
typeof vect2.y === "number" &&
|
|
4472
|
-
typeof vect2.z === "number" &&
|
|
4473
|
-
typeof vect2.w === "number") {
|
|
4474
|
-
return Chalkboard.real.sqrt((vect2.x - vect1.x) * (vect2.x - vect1.x) + (vect2.y - vect1.y) * (vect2.y - vect1.y) + (vect2.z - vect1.z) * (vect2.z - vect1.z) + (vect2.w - vect1.w) * (vect2.w - vect1.w));
|
|
5888
|
+
else if (Chalkboard.vect.isDimensionOf(vect1, 4) && Chalkboard.vect.isDimensionOf(vect2, 4)) {
|
|
5889
|
+
return Chalkboard.real.sqrt((vect2.x - vect1.x) * (vect2.x - vect1.x) +
|
|
5890
|
+
(vect2.y - vect1.y) * (vect2.y - vect1.y) +
|
|
5891
|
+
(vect2.z - vect1.z) * (vect2.z - vect1.z) +
|
|
5892
|
+
(vect2.w - vect1.w) * (vect2.w - vect1.w));
|
|
4475
5893
|
}
|
|
4476
5894
|
else {
|
|
4477
5895
|
throw new TypeError('Parameters "vect1" and "vect2" must be of type "ChalkboardVector" with 2, 3, or 4 dimensions.');
|
|
4478
5896
|
}
|
|
4479
5897
|
};
|
|
4480
5898
|
vect_3.distsq = function (vect1, vect2) {
|
|
4481
|
-
if (
|
|
4482
|
-
typeof vect1.y === "number" &&
|
|
4483
|
-
typeof vect1.z === "undefined" &&
|
|
4484
|
-
typeof vect1.w === "undefined" &&
|
|
4485
|
-
typeof vect2.x === "number" &&
|
|
4486
|
-
typeof vect2.y === "number" &&
|
|
4487
|
-
typeof vect2.z === "undefined" &&
|
|
4488
|
-
typeof vect2.w === "undefined") {
|
|
5899
|
+
if (Chalkboard.vect.isDimensionOf(vect1, 2) && Chalkboard.vect.isDimensionOf(vect2, 2)) {
|
|
4489
5900
|
return (vect2.x - vect1.x) * (vect2.x - vect1.x) + (vect2.y - vect1.y) * (vect2.y - vect1.y);
|
|
4490
5901
|
}
|
|
4491
|
-
else if (
|
|
4492
|
-
typeof vect1.y === "number" &&
|
|
4493
|
-
typeof vect1.z === "number" &&
|
|
4494
|
-
typeof vect1.w === "undefined" &&
|
|
4495
|
-
typeof vect2.x === "number" &&
|
|
4496
|
-
typeof vect2.y === "number" &&
|
|
4497
|
-
typeof vect2.z === "number" &&
|
|
4498
|
-
typeof vect2.w === "undefined") {
|
|
5902
|
+
else if (Chalkboard.vect.isDimensionOf(vect1, 3) && Chalkboard.vect.isDimensionOf(vect2, 3)) {
|
|
4499
5903
|
return (vect2.x - vect1.x) * (vect2.x - vect1.x) + (vect2.y - vect1.y) * (vect2.y - vect1.y) + (vect2.z - vect1.z) * (vect2.z - vect1.z);
|
|
4500
5904
|
}
|
|
4501
|
-
else if (
|
|
4502
|
-
|
|
4503
|
-
|
|
4504
|
-
|
|
4505
|
-
|
|
4506
|
-
typeof vect2.y === "number" &&
|
|
4507
|
-
typeof vect2.z === "number" &&
|
|
4508
|
-
typeof vect2.w === "number") {
|
|
4509
|
-
return (vect2.x - vect1.x) * (vect2.x - vect1.x) + (vect2.y - vect1.y) * (vect2.y - vect1.y) + (vect2.z - vect1.z) * (vect2.z - vect1.z) + (vect2.w - vect1.w) * (vect2.w - vect1.w);
|
|
5905
|
+
else if (Chalkboard.vect.isDimensionOf(vect1, 4) && Chalkboard.vect.isDimensionOf(vect2, 4)) {
|
|
5906
|
+
return ((vect2.x - vect1.x) * (vect2.x - vect1.x) +
|
|
5907
|
+
(vect2.y - vect1.y) * (vect2.y - vect1.y) +
|
|
5908
|
+
(vect2.z - vect1.z) * (vect2.z - vect1.z) +
|
|
5909
|
+
(vect2.w - vect1.w) * (vect2.w - vect1.w));
|
|
4510
5910
|
}
|
|
4511
5911
|
else {
|
|
4512
5912
|
throw new TypeError('Parameters "vect1" and "vect2" must be of type "ChalkboardVector" with 2, 3, or 4 dimensions.');
|
|
4513
5913
|
}
|
|
4514
5914
|
};
|
|
4515
5915
|
vect_3.dot = function (vect1, vect2) {
|
|
4516
|
-
if (
|
|
4517
|
-
typeof vect1.y === "number" &&
|
|
4518
|
-
typeof vect1.z === "undefined" &&
|
|
4519
|
-
typeof vect1.w === "undefined" &&
|
|
4520
|
-
typeof vect2.x === "number" &&
|
|
4521
|
-
typeof vect2.y === "number" &&
|
|
4522
|
-
typeof vect2.z === "undefined" &&
|
|
4523
|
-
typeof vect2.w === "undefined") {
|
|
5916
|
+
if (Chalkboard.vect.isDimensionOf(vect1, 2) && Chalkboard.vect.isDimensionOf(vect2, 2)) {
|
|
4524
5917
|
return vect1.x * vect2.x + vect1.y * vect2.y;
|
|
4525
5918
|
}
|
|
4526
|
-
else if (
|
|
4527
|
-
typeof vect1.y === "number" &&
|
|
4528
|
-
typeof vect1.z === "number" &&
|
|
4529
|
-
typeof vect1.w === "undefined" &&
|
|
4530
|
-
typeof vect2.x === "number" &&
|
|
4531
|
-
typeof vect2.y === "number" &&
|
|
4532
|
-
typeof vect2.z === "number" &&
|
|
4533
|
-
typeof vect2.w === "undefined") {
|
|
5919
|
+
else if (Chalkboard.vect.isDimensionOf(vect1, 3) && Chalkboard.vect.isDimensionOf(vect2, 3)) {
|
|
4534
5920
|
return vect1.x * vect2.x + vect1.y * vect2.y + vect1.z * vect2.z;
|
|
4535
5921
|
}
|
|
4536
|
-
else if (
|
|
4537
|
-
typeof vect1.y === "number" &&
|
|
4538
|
-
typeof vect1.z === "number" &&
|
|
4539
|
-
typeof vect1.w === "number" &&
|
|
4540
|
-
typeof vect2.x === "number" &&
|
|
4541
|
-
typeof vect2.y === "number" &&
|
|
4542
|
-
typeof vect2.z === "number" &&
|
|
4543
|
-
typeof vect2.w === "number") {
|
|
5922
|
+
else if (Chalkboard.vect.isDimensionOf(vect1, 4) && Chalkboard.vect.isDimensionOf(vect2, 4)) {
|
|
4544
5923
|
return vect1.x * vect2.x + vect1.y * vect2.y + vect1.z * vect2.z + vect1.w * vect2.w;
|
|
4545
5924
|
}
|
|
4546
5925
|
else {
|
|
@@ -4588,16 +5967,16 @@ var Chalkboard;
|
|
|
4588
5967
|
}
|
|
4589
5968
|
};
|
|
4590
5969
|
vect_3.fromAlternateToCartesian = function (vect, type) {
|
|
4591
|
-
if (type === "polar" &&
|
|
5970
|
+
if (type === "polar" && Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4592
5971
|
return Chalkboard.vect.init(vect.x * Chalkboard.trig.cos(vect.y), vect.y * Chalkboard.trig.sin(vect.y));
|
|
4593
5972
|
}
|
|
4594
|
-
else if (type === "bipolar" &&
|
|
5973
|
+
else if (type === "bipolar" && Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4595
5974
|
return Chalkboard.vect.init((vect.x * vect.x - vect.y * vect.y) / 4, Chalkboard.real.sqrt(16 * vect.x * vect.x - (vect.x * vect.x - vect.y * vect.y + 4) * (vect.x * vect.x - vect.y * vect.y + 4)));
|
|
4596
5975
|
}
|
|
4597
|
-
else if (type === "cylindrical" &&
|
|
5976
|
+
else if (type === "cylindrical" && Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4598
5977
|
return Chalkboard.vect.init(vect.x * Chalkboard.trig.cos(vect.y), vect.x * Chalkboard.trig.sin(vect.y), vect.z);
|
|
4599
5978
|
}
|
|
4600
|
-
else if (type === "spherical" &&
|
|
5979
|
+
else if (type === "spherical" && Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4601
5980
|
return Chalkboard.vect.init(vect.x * Chalkboard.trig.sin(vect.z) * Chalkboard.trig.cos(vect.y), vect.x * Chalkboard.trig.sin(vect.z) * Chalkboard.trig.sin(vect.y), vect.x * Chalkboard.trig.cos(vect.z));
|
|
4602
5981
|
}
|
|
4603
5982
|
else {
|
|
@@ -4613,16 +5992,16 @@ var Chalkboard;
|
|
|
4613
5992
|
}
|
|
4614
5993
|
};
|
|
4615
5994
|
vect_3.fromCartesianToAlternate = function (vect, type) {
|
|
4616
|
-
if (type === "polar" &&
|
|
5995
|
+
if (type === "polar" && Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4617
5996
|
return Chalkboard.vect.init(Chalkboard.vect.mag(vect), Chalkboard.vect.ang(vect));
|
|
4618
5997
|
}
|
|
4619
|
-
else if (type === "bipolar" &&
|
|
5998
|
+
else if (type === "bipolar" && Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4620
5999
|
return Chalkboard.vect.init((vect.x + 1) * (vect.x + 1) + vect.y * vect.y, (vect.x - 1) * (vect.x - 1) + vect.y * vect.y);
|
|
4621
6000
|
}
|
|
4622
|
-
else if (type === "cylindrical" &&
|
|
6001
|
+
else if (type === "cylindrical" && Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4623
6002
|
return Chalkboard.vect.init(Chalkboard.vect.mag(Chalkboard.vect.init(vect.x, vect.y)), Chalkboard.vect.ang(Chalkboard.vect.init(vect.x, vect.y)), vect.z);
|
|
4624
6003
|
}
|
|
4625
|
-
else if (type === "spherical" &&
|
|
6004
|
+
else if (type === "spherical" && Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4626
6005
|
return Chalkboard.vect.init(Chalkboard.vect.mag(vect), Chalkboard.vect.ang(Chalkboard.vect.init(vect.x, vect.y)), Chalkboard.vect.ang(vect)[2]);
|
|
4627
6006
|
}
|
|
4628
6007
|
else {
|
|
@@ -4630,15 +6009,15 @@ var Chalkboard;
|
|
|
4630
6009
|
}
|
|
4631
6010
|
};
|
|
4632
6011
|
vect_3.fromField = function (vectfield, vect) {
|
|
4633
|
-
if (Chalkboard.vect.dimension(vectfield) === 2 &&
|
|
6012
|
+
if (Chalkboard.vect.dimension(vectfield) === 2 && Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4634
6013
|
var p = Chalkboard.real.parse("(x, y) => " + vectfield.p), q = Chalkboard.real.parse("(x, y) => " + vectfield.q);
|
|
4635
6014
|
return Chalkboard.vect.init(p(vect.x, vect.y), q(vect.x, vect.y));
|
|
4636
6015
|
}
|
|
4637
|
-
else if (Chalkboard.vect.dimension(vectfield) === 3 &&
|
|
6016
|
+
else if (Chalkboard.vect.dimension(vectfield) === 3 && Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4638
6017
|
var p = Chalkboard.real.parse("(x, y, z) => " + vectfield.p), q = Chalkboard.real.parse("(x, y, z) => " + vectfield.q), r = Chalkboard.real.parse("(x, y, z) => " + vectfield.r);
|
|
4639
6018
|
return Chalkboard.vect.init(p(vect.x, vect.y, vect.z), q(vect.x, vect.y, vect.z), r(vect.x, vect.y, vect.z));
|
|
4640
6019
|
}
|
|
4641
|
-
else if (Chalkboard.vect.dimension(vectfield) === 4 &&
|
|
6020
|
+
else if (Chalkboard.vect.dimension(vectfield) === 4 && Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4642
6021
|
var p = Chalkboard.real.parse("(x, y, z, w) => " + vectfield.p), q = Chalkboard.real.parse("(x, y, z, w) => " + vectfield.q), r = Chalkboard.real.parse("(x, y, z, w) => " + vectfield.r), s = Chalkboard.real.parse("(x, y, z, w) => " + vectfield.s);
|
|
4643
6022
|
return Chalkboard.vect.init(p(vect.x, vect.y, vect.z, vect.w), q(vect.x, vect.y, vect.z, vect.w), r(vect.x, vect.y, vect.z, vect.w), s(vect.x, vect.y, vect.z, vect.w));
|
|
4644
6023
|
}
|
|
@@ -4647,13 +6026,13 @@ var Chalkboard;
|
|
|
4647
6026
|
}
|
|
4648
6027
|
};
|
|
4649
6028
|
vect_3.fromVector = function (vect) {
|
|
4650
|
-
if (
|
|
6029
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4651
6030
|
return Chalkboard.vect.init(vect.x, vect.y, 0);
|
|
4652
6031
|
}
|
|
4653
|
-
else if (
|
|
6032
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4654
6033
|
return Chalkboard.vect.init(vect.x, vect.y, vect.z, 0);
|
|
4655
6034
|
}
|
|
4656
|
-
else if (
|
|
6035
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4657
6036
|
return Chalkboard.vect.init(vect.x, vect.y);
|
|
4658
6037
|
}
|
|
4659
6038
|
else {
|
|
@@ -4672,27 +6051,75 @@ var Chalkboard;
|
|
|
4672
6051
|
}
|
|
4673
6052
|
};
|
|
4674
6053
|
vect_3.interp = function (vect, a, b, c, d) {
|
|
4675
|
-
if (
|
|
6054
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2) && typeof c === "undefined" && typeof d === "undefined") {
|
|
4676
6055
|
return Chalkboard.vect.init((a * vect.x + b * vect.y) / (a + b), (a * vect.x + b * vect.y) / (a + b));
|
|
4677
6056
|
}
|
|
4678
|
-
else if (
|
|
6057
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3) && typeof c === "number" && typeof d === "undefined") {
|
|
4679
6058
|
return Chalkboard.vect.init((a * vect.x + b * vect.y + c * vect.z) / (a + b + c), (a * vect.x + b * vect.y + c * vect.z) / (a + b + c), (a * vect.x + b * vect.y + c * vect.z) / (a + b + c));
|
|
4680
6059
|
}
|
|
4681
|
-
else if (
|
|
6060
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4) && typeof c === "number" && typeof d === "number") {
|
|
4682
6061
|
return Chalkboard.vect.init((a * vect.x + b * vect.y + c * vect.z + d * vect.w) / (a + b + c + d), (a * vect.x + b * vect.y + c * vect.z + d * vect.w) / (a + b + c + d), (a * vect.x + b * vect.y + c * vect.z + d * vect.w) / (a + b + c + d), (a * vect.x + b * vect.y + c * vect.z + d * vect.w) / (a + b + c + d));
|
|
4683
6062
|
}
|
|
4684
6063
|
else {
|
|
4685
6064
|
throw new TypeError('Parameter "vect" must be of type "ChalkboardVector" with 2, 3, or 4 dimensions.');
|
|
4686
6065
|
}
|
|
4687
6066
|
};
|
|
6067
|
+
vect_3.isDimensionEqual = function (vect1, vect2) {
|
|
6068
|
+
return Chalkboard.vect.dimension(vect1) === Chalkboard.vect.dimension(vect2);
|
|
6069
|
+
};
|
|
6070
|
+
vect_3.isDimensionOf = function (vectORvectfield, dimension) {
|
|
6071
|
+
if (dimension === 2) {
|
|
6072
|
+
return Chalkboard.vect.dimension(vectORvectfield) === 2;
|
|
6073
|
+
}
|
|
6074
|
+
else if (dimension === 3) {
|
|
6075
|
+
return Chalkboard.vect.dimension(vectORvectfield) === 3;
|
|
6076
|
+
}
|
|
6077
|
+
else if (dimension === 4) {
|
|
6078
|
+
return Chalkboard.vect.dimension(vectORvectfield) === 4;
|
|
6079
|
+
}
|
|
6080
|
+
else {
|
|
6081
|
+
throw new TypeError('Parameter "dimension" must be 2, 3, or 4.');
|
|
6082
|
+
}
|
|
6083
|
+
};
|
|
6084
|
+
vect_3.isEqual = function (vect1, vect2) {
|
|
6085
|
+
if (Chalkboard.vect.isDimensionEqual(vect1, vect2)) {
|
|
6086
|
+
if (Chalkboard.vect.isDimensionOf(vect1, 2)) {
|
|
6087
|
+
return vect1.x === vect2.x && vect1.y === vect2.y;
|
|
6088
|
+
}
|
|
6089
|
+
else if (Chalkboard.vect.isDimensionOf(vect1, 3)) {
|
|
6090
|
+
return vect1.x === vect2.x && vect1.y === vect2.y && vect1.z === vect2.z;
|
|
6091
|
+
}
|
|
6092
|
+
else if (Chalkboard.vect.isDimensionOf(vect1, 4)) {
|
|
6093
|
+
return vect1.x === vect2.x && vect1.y === vect2.y && vect1.z === vect2.z && vect1.w === vect2.w;
|
|
6094
|
+
}
|
|
6095
|
+
else {
|
|
6096
|
+
throw new TypeError('Parameters "vect1" and "vect2" must be of type "ChalkboardVector" with 2, 3, or 4 dimensions.');
|
|
6097
|
+
}
|
|
6098
|
+
}
|
|
6099
|
+
else {
|
|
6100
|
+
return false;
|
|
6101
|
+
}
|
|
6102
|
+
};
|
|
6103
|
+
vect_3.isNormalized = function (vect) {
|
|
6104
|
+
return Chalkboard.vect.magsq(vect) === 1;
|
|
6105
|
+
};
|
|
6106
|
+
vect_3.isOrthogonal = function (vect1, vect2) {
|
|
6107
|
+
return Chalkboard.vect.dot(vect1, vect2) === 0;
|
|
6108
|
+
};
|
|
6109
|
+
vect_3.isParallel = function (vect1, vect2) {
|
|
6110
|
+
return Chalkboard.numb.isApproxEqual(Chalkboard.vect.dot(vect1, vect2), Chalkboard.vect.mag(vect1) * Chalkboard.vect.mag(vect2));
|
|
6111
|
+
};
|
|
6112
|
+
vect_3.isZero = function (vect) {
|
|
6113
|
+
return Chalkboard.vect.isEqual(vect, Chalkboard.vect.zero(vect));
|
|
6114
|
+
};
|
|
4688
6115
|
vect_3.mag = function (vect) {
|
|
4689
|
-
if (
|
|
6116
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4690
6117
|
return Chalkboard.real.sqrt(vect.x * vect.x + vect.y * vect.y);
|
|
4691
6118
|
}
|
|
4692
|
-
else if (
|
|
6119
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4693
6120
|
return Chalkboard.real.sqrt(vect.x * vect.x + vect.y * vect.y + vect.z * vect.z);
|
|
4694
6121
|
}
|
|
4695
|
-
else if (
|
|
6122
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4696
6123
|
return Chalkboard.real.sqrt(vect.x * vect.x + vect.y * vect.y + vect.z * vect.z + vect.w * vect.w);
|
|
4697
6124
|
}
|
|
4698
6125
|
else {
|
|
@@ -4703,13 +6130,13 @@ var Chalkboard;
|
|
|
4703
6130
|
return Chalkboard.vect.scl(Chalkboard.vect.normalize(vect), num);
|
|
4704
6131
|
};
|
|
4705
6132
|
vect_3.magsq = function (vect) {
|
|
4706
|
-
if (
|
|
6133
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4707
6134
|
return vect.x * vect.x + vect.y * vect.y;
|
|
4708
6135
|
}
|
|
4709
|
-
else if (
|
|
6136
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4710
6137
|
return vect.x * vect.x + vect.y * vect.y + vect.z * vect.z;
|
|
4711
6138
|
}
|
|
4712
|
-
else if (
|
|
6139
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4713
6140
|
return vect.x * vect.x + vect.y * vect.y + vect.z * vect.z + vect.w * vect.w;
|
|
4714
6141
|
}
|
|
4715
6142
|
else {
|
|
@@ -4717,13 +6144,13 @@ var Chalkboard;
|
|
|
4717
6144
|
}
|
|
4718
6145
|
};
|
|
4719
6146
|
vect_3.negate = function (vect) {
|
|
4720
|
-
if (
|
|
6147
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4721
6148
|
return Chalkboard.vect.init(-vect.x, -vect.y);
|
|
4722
6149
|
}
|
|
4723
|
-
else if (
|
|
6150
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4724
6151
|
return Chalkboard.vect.init(-vect.x, -vect.y, -vect.z);
|
|
4725
6152
|
}
|
|
4726
|
-
else if (
|
|
6153
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4727
6154
|
return Chalkboard.vect.init(-vect.x, -vect.y, -vect.z, -vect.w);
|
|
4728
6155
|
}
|
|
4729
6156
|
else {
|
|
@@ -4731,13 +6158,13 @@ var Chalkboard;
|
|
|
4731
6158
|
}
|
|
4732
6159
|
};
|
|
4733
6160
|
vect_3.normalize = function (vect) {
|
|
4734
|
-
if (
|
|
6161
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4735
6162
|
return Chalkboard.vect.init(vect.x / Chalkboard.vect.mag(vect), vect.y / Chalkboard.vect.mag(vect));
|
|
4736
6163
|
}
|
|
4737
|
-
else if (
|
|
6164
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4738
6165
|
return Chalkboard.vect.init(vect.x / Chalkboard.vect.mag(vect), vect.y / Chalkboard.vect.mag(vect), vect.z / Chalkboard.vect.mag(vect));
|
|
4739
6166
|
}
|
|
4740
|
-
else if (
|
|
6167
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4741
6168
|
return Chalkboard.vect.init(vect.x / Chalkboard.vect.mag(vect), vect.y / Chalkboard.vect.mag(vect), vect.z / Chalkboard.vect.mag(vect), vect.w / Chalkboard.vect.mag(vect));
|
|
4742
6169
|
}
|
|
4743
6170
|
else {
|
|
@@ -4768,13 +6195,13 @@ var Chalkboard;
|
|
|
4768
6195
|
}
|
|
4769
6196
|
};
|
|
4770
6197
|
vect_3.reciprocate = function (vect) {
|
|
4771
|
-
if (
|
|
6198
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4772
6199
|
return Chalkboard.vect.init(1 / vect.x, 1 / vect.y);
|
|
4773
6200
|
}
|
|
4774
|
-
else if (
|
|
6201
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4775
6202
|
return Chalkboard.vect.init(1 / vect.x, 1 / vect.y, 1 / vect.z);
|
|
4776
6203
|
}
|
|
4777
|
-
else if (
|
|
6204
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4778
6205
|
return Chalkboard.vect.init(1 / vect.x, 1 / vect.y, 1 / vect.z, 1 / vect.w);
|
|
4779
6206
|
}
|
|
4780
6207
|
else {
|
|
@@ -4795,13 +6222,13 @@ var Chalkboard;
|
|
|
4795
6222
|
}
|
|
4796
6223
|
};
|
|
4797
6224
|
vect_3.round = function (vect) {
|
|
4798
|
-
if (
|
|
6225
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4799
6226
|
return Chalkboard.vect.init(Math.round(vect.x), Math.round(vect.y));
|
|
4800
6227
|
}
|
|
4801
|
-
else if (
|
|
6228
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4802
6229
|
return Chalkboard.vect.init(Math.round(vect.x), Math.round(vect.y), Math.round(vect.z));
|
|
4803
6230
|
}
|
|
4804
|
-
else if (
|
|
6231
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4805
6232
|
return Chalkboard.vect.init(Math.round(vect.x), Math.round(vect.y), Math.round(vect.z), Math.round(vect.w));
|
|
4806
6233
|
}
|
|
4807
6234
|
else {
|
|
@@ -4815,13 +6242,13 @@ var Chalkboard;
|
|
|
4815
6242
|
return Chalkboard.vect.dot(vect1, Chalkboard.vect.cross(vect2, vect3));
|
|
4816
6243
|
};
|
|
4817
6244
|
vect_3.scl = function (vect, num) {
|
|
4818
|
-
if (
|
|
6245
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4819
6246
|
return Chalkboard.vect.init(vect.x * num, vect.y * num);
|
|
4820
6247
|
}
|
|
4821
|
-
else if (
|
|
6248
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4822
6249
|
return Chalkboard.vect.init(vect.x * num, vect.y * num, vect.z * num);
|
|
4823
6250
|
}
|
|
4824
|
-
else if (
|
|
6251
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4825
6252
|
return Chalkboard.vect.init(vect.x * num, vect.y * num, vect.z * num, vect.w * num);
|
|
4826
6253
|
}
|
|
4827
6254
|
else {
|
|
@@ -4829,13 +6256,13 @@ var Chalkboard;
|
|
|
4829
6256
|
}
|
|
4830
6257
|
};
|
|
4831
6258
|
vect_3.slope = function (vect) {
|
|
4832
|
-
if (
|
|
6259
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4833
6260
|
return vect.y / vect.x;
|
|
4834
6261
|
}
|
|
4835
|
-
else if (
|
|
6262
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4836
6263
|
return vect.z / Chalkboard.real.sqrt(vect.x * vect.x + vect.y * vect.y);
|
|
4837
6264
|
}
|
|
4838
|
-
else if (
|
|
6265
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4839
6266
|
return vect.w / Chalkboard.real.sqrt(vect.x * vect.x + vect.y * vect.y + vect.z * vect.z);
|
|
4840
6267
|
}
|
|
4841
6268
|
else {
|
|
@@ -4843,34 +6270,13 @@ var Chalkboard;
|
|
|
4843
6270
|
}
|
|
4844
6271
|
};
|
|
4845
6272
|
vect_3.sub = function (vect1, vect2) {
|
|
4846
|
-
if (
|
|
4847
|
-
typeof vect1.y === "number" &&
|
|
4848
|
-
typeof vect1.z === "undefined" &&
|
|
4849
|
-
typeof vect1.w === "undefined" &&
|
|
4850
|
-
typeof vect2.x === "number" &&
|
|
4851
|
-
typeof vect2.y === "number" &&
|
|
4852
|
-
typeof vect2.z === "undefined" &&
|
|
4853
|
-
typeof vect2.w === "undefined") {
|
|
6273
|
+
if (Chalkboard.vect.isDimensionOf(vect1, 2) && Chalkboard.vect.isDimensionOf(vect2, 2)) {
|
|
4854
6274
|
return Chalkboard.vect.init(vect1.x - vect2.x, vect1.y - vect2.y);
|
|
4855
6275
|
}
|
|
4856
|
-
else if (
|
|
4857
|
-
typeof vect1.y === "number" &&
|
|
4858
|
-
typeof vect1.z === "number" &&
|
|
4859
|
-
typeof vect1.w === "undefined" &&
|
|
4860
|
-
typeof vect2.x === "number" &&
|
|
4861
|
-
typeof vect2.y === "number" &&
|
|
4862
|
-
typeof vect2.z === "number" &&
|
|
4863
|
-
typeof vect2.w === "undefined") {
|
|
6276
|
+
else if (Chalkboard.vect.isDimensionOf(vect1, 3) && Chalkboard.vect.isDimensionOf(vect2, 3)) {
|
|
4864
6277
|
return Chalkboard.vect.init(vect1.x - vect2.x, vect1.y - vect2.y, vect1.z - vect2.z);
|
|
4865
6278
|
}
|
|
4866
|
-
else if (
|
|
4867
|
-
typeof vect1.y === "number" &&
|
|
4868
|
-
typeof vect1.z === "number" &&
|
|
4869
|
-
typeof vect1.w === "number" &&
|
|
4870
|
-
typeof vect2.x === "number" &&
|
|
4871
|
-
typeof vect2.y === "number" &&
|
|
4872
|
-
typeof vect2.z === "number" &&
|
|
4873
|
-
typeof vect2.w === "number") {
|
|
6279
|
+
else if (Chalkboard.vect.isDimensionOf(vect1, 4) && Chalkboard.vect.isDimensionOf(vect2, 4)) {
|
|
4874
6280
|
return Chalkboard.vect.init(vect1.x - vect2.x, vect1.y - vect2.y, vect1.z - vect2.z, vect1.w - vect2.w);
|
|
4875
6281
|
}
|
|
4876
6282
|
else {
|
|
@@ -4878,13 +6284,13 @@ var Chalkboard;
|
|
|
4878
6284
|
}
|
|
4879
6285
|
};
|
|
4880
6286
|
vect_3.toArray = function (vect) {
|
|
4881
|
-
if (
|
|
6287
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4882
6288
|
return [vect.x, vect.y];
|
|
4883
6289
|
}
|
|
4884
|
-
else if (
|
|
6290
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4885
6291
|
return [vect.x, vect.y, vect.z];
|
|
4886
6292
|
}
|
|
4887
|
-
else if (
|
|
6293
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4888
6294
|
return [vect.x, vect.y, vect.z, vect.w];
|
|
4889
6295
|
}
|
|
4890
6296
|
else {
|
|
@@ -4894,39 +6300,39 @@ var Chalkboard;
|
|
|
4894
6300
|
vect_3.toComplex = function (vect) {
|
|
4895
6301
|
return Chalkboard.comp.init(vect.x, vect.y);
|
|
4896
6302
|
};
|
|
4897
|
-
vect_3.toMatrix = function (vect,
|
|
4898
|
-
if (
|
|
4899
|
-
if (
|
|
4900
|
-
if (
|
|
6303
|
+
vect_3.toMatrix = function (vect, axis) {
|
|
6304
|
+
if (axis === void 0) { axis = 0; }
|
|
6305
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
6306
|
+
if (axis === 0) {
|
|
4901
6307
|
return Chalkboard.matr.init([vect.x], [vect.y]);
|
|
4902
6308
|
}
|
|
4903
|
-
else if (
|
|
6309
|
+
else if (axis === 1) {
|
|
4904
6310
|
return Chalkboard.matr.init([vect.x, vect.y]);
|
|
4905
6311
|
}
|
|
4906
6312
|
else {
|
|
4907
|
-
throw new TypeError('Parameter "
|
|
6313
|
+
throw new TypeError('Parameter "axis" must be 0 or 1.');
|
|
4908
6314
|
}
|
|
4909
6315
|
}
|
|
4910
|
-
else if (
|
|
4911
|
-
if (
|
|
6316
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
6317
|
+
if (axis === 0) {
|
|
4912
6318
|
return Chalkboard.matr.init([vect.x], [vect.y], [vect.z]);
|
|
4913
6319
|
}
|
|
4914
|
-
else if (
|
|
6320
|
+
else if (axis === 1) {
|
|
4915
6321
|
return Chalkboard.matr.init([vect.x, vect.y, vect.z]);
|
|
4916
6322
|
}
|
|
4917
6323
|
else {
|
|
4918
|
-
throw new TypeError('Parameter "
|
|
6324
|
+
throw new TypeError('Parameter "axis" must be 0 or 1.');
|
|
4919
6325
|
}
|
|
4920
6326
|
}
|
|
4921
|
-
else if (
|
|
4922
|
-
if (
|
|
6327
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
6328
|
+
if (axis === 0) {
|
|
4923
6329
|
return Chalkboard.matr.init([vect.x], [vect.y], [vect.z], [vect.w]);
|
|
4924
6330
|
}
|
|
4925
|
-
else if (
|
|
6331
|
+
else if (axis === 1) {
|
|
4926
6332
|
return Chalkboard.matr.init([vect.x, vect.y, vect.z, vect.w]);
|
|
4927
6333
|
}
|
|
4928
6334
|
else {
|
|
4929
|
-
throw new TypeError('Parameter "
|
|
6335
|
+
throw new TypeError('Parameter "axis" must be 0 or 1.');
|
|
4930
6336
|
}
|
|
4931
6337
|
}
|
|
4932
6338
|
else {
|
|
@@ -4934,13 +6340,13 @@ var Chalkboard;
|
|
|
4934
6340
|
}
|
|
4935
6341
|
};
|
|
4936
6342
|
vect_3.toQuaternion = function (vect) {
|
|
4937
|
-
if (
|
|
6343
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4938
6344
|
return Chalkboard.quat.init(vect.x, vect.y, 0, 0);
|
|
4939
6345
|
}
|
|
4940
|
-
else if (
|
|
6346
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4941
6347
|
return Chalkboard.quat.init(0, vect.x, vect.y, vect.z);
|
|
4942
6348
|
}
|
|
4943
|
-
else if (
|
|
6349
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4944
6350
|
return Chalkboard.quat.init(vect.x, vect.y, vect.z, vect.w);
|
|
4945
6351
|
}
|
|
4946
6352
|
else {
|
|
@@ -4948,13 +6354,13 @@ var Chalkboard;
|
|
|
4948
6354
|
}
|
|
4949
6355
|
};
|
|
4950
6356
|
vect_3.toString = function (vect) {
|
|
4951
|
-
if (
|
|
6357
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4952
6358
|
return "(" + vect.x.toString() + ", " + vect.y.toString() + ")";
|
|
4953
6359
|
}
|
|
4954
|
-
else if (
|
|
6360
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4955
6361
|
return "(" + vect.x.toString() + ", " + vect.y.toString() + ", " + vect.z.toString() + ")";
|
|
4956
6362
|
}
|
|
4957
|
-
else if (
|
|
6363
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4958
6364
|
return "(" + vect.x.toString() + ", " + vect.y.toString() + ", " + vect.z.toString() + ", " + vect.w.toString() + ")";
|
|
4959
6365
|
}
|
|
4960
6366
|
else {
|
|
@@ -4979,13 +6385,13 @@ var Chalkboard;
|
|
|
4979
6385
|
return Chalkboard.vect.cross(vect1, Chalkboard.vect.cross(vect2, vect3));
|
|
4980
6386
|
};
|
|
4981
6387
|
vect_3.zero = function (vect) {
|
|
4982
|
-
if (
|
|
6388
|
+
if (Chalkboard.vect.isDimensionOf(vect, 2)) {
|
|
4983
6389
|
return Chalkboard.vect.init(vect.x * 0, vect.y * 0);
|
|
4984
6390
|
}
|
|
4985
|
-
else if (
|
|
6391
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 3)) {
|
|
4986
6392
|
return Chalkboard.vect.init(vect.x * 0, vect.y * 0, vect.z * 0);
|
|
4987
6393
|
}
|
|
4988
|
-
else if (
|
|
6394
|
+
else if (Chalkboard.vect.isDimensionOf(vect, 4)) {
|
|
4989
6395
|
return Chalkboard.vect.init(vect.x * 0, vect.y * 0, vect.z * 0, vect.w * 0);
|
|
4990
6396
|
}
|
|
4991
6397
|
else {
|