@pie-framework/math-validation 1.4.2 → 2.0.0-next.20261110063142
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/LICENSE +233 -0
- package/README.md +41 -110
- package/dist/conversion/ast-to-mathjs.d.ts +3 -0
- package/dist/conversion/error.d.ts +4 -0
- package/dist/conversion/flatten.d.ts +1 -0
- package/{lib → dist}/conversion/latex-to-ast.d.ts +14 -13
- package/{lib → dist}/conversion/lexer.d.ts +7 -7
- package/dist/difference.d.ts +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1594 -0
- package/dist/latex-equal.d.ts +2 -0
- package/dist/literal/index.d.ts +3 -0
- package/dist/log.d.ts +1 -0
- package/dist/mathjs.d.ts +11 -0
- package/{lib → dist}/node-sort.d.ts +1 -1
- package/dist/options.d.ts +13 -0
- package/{lib → dist}/symbolic/compare-compound-inequations.d.ts +4 -4
- package/{lib → dist}/symbolic/compare-equations.d.ts +1 -1
- package/dist/symbolic/index.d.ts +1 -0
- package/dist/symbolic/simplify.d.ts +2 -0
- package/{lib → dist}/symbolic/utils.d.ts +8 -4
- package/dist/value.d.ts +6 -0
- package/package.json +32 -53
- package/lib/conversion/ast-to-mathjs.d.ts +0 -12
- package/lib/conversion/ast-to-mathjs.js +0 -329
- package/lib/conversion/ast-to-mathjs.js.map +0 -1
- package/lib/conversion/error.d.ts +0 -5
- package/lib/conversion/error.js +0 -13
- package/lib/conversion/error.js.map +0 -1
- package/lib/conversion/flatten.d.ts +0 -12
- package/lib/conversion/flatten.js +0 -103
- package/lib/conversion/flatten.js.map +0 -1
- package/lib/conversion/latex-to-ast.js +0 -1479
- package/lib/conversion/latex-to-ast.js.map +0 -1
- package/lib/conversion/lexer.js +0 -135
- package/lib/conversion/lexer.js.map +0 -1
- package/lib/conversion/util.d.ts +0 -3
- package/lib/conversion/util.js +0 -36
- package/lib/conversion/util.js.map +0 -1
- package/lib/demo.d.ts +0 -4
- package/lib/demo.js +0 -173
- package/lib/demo.js.map +0 -1
- package/lib/difference.d.ts +0 -2
- package/lib/difference.js +0 -24
- package/lib/difference.js.map +0 -1
- package/lib/index.d.ts +0 -5
- package/lib/index.js +0 -9
- package/lib/index.js.map +0 -1
- package/lib/latex-equal.d.ts +0 -10
- package/lib/latex-equal.js +0 -41
- package/lib/latex-equal.js.map +0 -1
- package/lib/literal/index.d.ts +0 -10
- package/lib/literal/index.js +0 -22
- package/lib/literal/index.js.map +0 -1
- package/lib/log.d.ts +0 -1
- package/lib/log.js +0 -14
- package/lib/log.js.map +0 -1
- package/lib/mathjs.d.ts +0 -3
- package/lib/mathjs.js +0 -9
- package/lib/mathjs.js.map +0 -1
- package/lib/node-sort.js +0 -236
- package/lib/node-sort.js.map +0 -1
- package/lib/symbolic/compare-compound-inequations.js +0 -68
- package/lib/symbolic/compare-compound-inequations.js.map +0 -1
- package/lib/symbolic/compare-equations.js +0 -108
- package/lib/symbolic/compare-equations.js.map +0 -1
- package/lib/symbolic/index.d.ts +0 -4
- package/lib/symbolic/index.js +0 -215
- package/lib/symbolic/index.js.map +0 -1
- package/lib/symbolic/utils.js +0 -207
- package/lib/symbolic/utils.js.map +0 -1
package/lib/symbolic/index.js
DELETED
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isMathEqual = exports.simplify = void 0;
|
|
4
|
-
const log_1 = require("../log");
|
|
5
|
-
const mathjs_1 = require("../mathjs");
|
|
6
|
-
const node_sort_1 = require("../node-sort");
|
|
7
|
-
const compare_equations_1 = require("./compare-equations");
|
|
8
|
-
const compare_compound_inequations_1 = require("./compare-compound-inequations");
|
|
9
|
-
const m = mathjs_1.mathjs;
|
|
10
|
-
const log = log_1.logger("mv:symbolic");
|
|
11
|
-
const positiveInfinity = 1.497258191621251e6;
|
|
12
|
-
const negativeInfinity = -1.497258191621251e6;
|
|
13
|
-
const { simplify: ms, rationalize } = mathjs_1.mathjs;
|
|
14
|
-
const SIMPLIFY_RULES = [
|
|
15
|
-
{ l: "n1^(1/n2)", r: "nthRoot(n1, n2)" },
|
|
16
|
-
{ l: "sqrt(n1)", r: "nthRoot(n1, 2)" },
|
|
17
|
-
{ l: "nthRoot(-1, 2)", r: "i" },
|
|
18
|
-
{ l: "(v1-v2)/n", r: "v1/n-v2/n" },
|
|
19
|
-
{ l: "(v1-n)/n", r: "v1/n-1" },
|
|
20
|
-
{ l: "n/n1-c1", r: "(n-c1*n1)/n1" },
|
|
21
|
-
{ l: "i^2", r: "-1" },
|
|
22
|
-
{ l: "pi", r: "3.141592653589793" },
|
|
23
|
-
{ l: "n/(n*n1)", r: "1/n1" },
|
|
24
|
-
{ l: "c1/(c2*(n3))", r: "(c1/c2)*(1/n3)" },
|
|
25
|
-
{ l: "n1/(n(n+1)+1(n+1))", r: "n1/((n+1)^2)" },
|
|
26
|
-
// perfect square formula
|
|
27
|
-
{ l: "(n1 + n2) ^ 2", r: "(n1 ^ 2) + 2*n1*n2 + (n2 ^ 2)" },
|
|
28
|
-
{ l: "tzn(n1, n2)", r: "n1" },
|
|
29
|
-
{ l: "n1/(-n2)", r: "-(n1/n2)" },
|
|
30
|
-
{ l: "sin(n*pi)", r: "0" },
|
|
31
|
-
// logarithm rules
|
|
32
|
-
{ l: "log(n1*n2, n3)", r: "log(n1, n3)+log(n2,n3)" },
|
|
33
|
-
{ l: "log(n1/n2, n3)", r: "log(n1, n3)-log(n2,n3)" },
|
|
34
|
-
{ l: "log(n1^n2, n3)", r: "n2*log(n1,n3)" },
|
|
35
|
-
// trigonometry: defining relations for tangent, cotangent, secant, and cosecant in terms of sine and cosine
|
|
36
|
-
{ l: "sin(n)/cos(n)", r: "tan(n)" },
|
|
37
|
-
{ l: "csc(n)", r: "1/sin(n)" },
|
|
38
|
-
{ l: "sec(n)", r: "1/cos(n)" },
|
|
39
|
-
{ l: "cot(n)", r: "1/tan(n)", r1: "cos(n)/sin(n)" },
|
|
40
|
-
{ l: "1/tan(n)", r: "cos(n)/sin(n)" },
|
|
41
|
-
// TO DO: the Pythagorean formula for sines and cosines.
|
|
42
|
-
// inverse trigonometric functions relations
|
|
43
|
-
{ l: "n1 == asin(n)", r: "n == sin(n1)" },
|
|
44
|
-
{ l: "n1 == acos(n)", r: "n == cos(n1)" },
|
|
45
|
-
{ l: "n1 == atan(n)", r: "n == tan(n1)" },
|
|
46
|
-
{ l: "n1 == acot(n)", r: "n == cot(n1)" },
|
|
47
|
-
{ l: "n1 == asec(n)", r: "n == sec(n1)" },
|
|
48
|
-
{ l: "n1 == acsc(n)", r: "n == csc(n1)" },
|
|
49
|
-
// relationships between trigonometric functions and inverse trigonometric functions
|
|
50
|
-
{ l: "sin(asin(n))", r: "n" },
|
|
51
|
-
{ l: "cos(acos(n))", r: "n" },
|
|
52
|
-
{ l: "tan(atan(n))", r: "n" },
|
|
53
|
-
{ l: "sin(acsc(n))", r: "1/n" },
|
|
54
|
-
{ l: "cos(asec(n))", r: "1/n" },
|
|
55
|
-
{ l: "tan(acot(n))", r: "1/n" },
|
|
56
|
-
];
|
|
57
|
-
const simplify = (v) => {
|
|
58
|
-
const rules = SIMPLIFY_RULES.concat(ms.rules);
|
|
59
|
-
return ms(v, rules); //.concat(SIMPLIFY_RULES));
|
|
60
|
-
};
|
|
61
|
-
exports.simplify = simplify;
|
|
62
|
-
const normalize = (a) => {
|
|
63
|
-
let r = a;
|
|
64
|
-
let onlyConstant = true;
|
|
65
|
-
let containsFunctionNode = false;
|
|
66
|
-
let containsArrayNode = false;
|
|
67
|
-
let pi = false;
|
|
68
|
-
let containsInverseFlag = false;
|
|
69
|
-
r.traverse(function (node, path, parent) {
|
|
70
|
-
if (node.isArrayNode) {
|
|
71
|
-
containsArrayNode = true;
|
|
72
|
-
node.items = node.items.map((item) => exports.simplify(item));
|
|
73
|
-
}
|
|
74
|
-
if (node.isSymbolNode) {
|
|
75
|
-
pi = pi || node.name === "pi";
|
|
76
|
-
containsInverseFlag = containsInverseFlag || node.name === "f^{-1}";
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
if (r.args) {
|
|
80
|
-
r.args = r.args.map((arg) => {
|
|
81
|
-
if (!arg.isFunctionNode &&
|
|
82
|
-
!arg.isArrayNode &&
|
|
83
|
-
!containsInverseFlag &&
|
|
84
|
-
!pi) {
|
|
85
|
-
try {
|
|
86
|
-
arg = exports.simplify(arg);
|
|
87
|
-
}
|
|
88
|
-
catch (e) {
|
|
89
|
-
// ok;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
containsFunctionNode = containsFunctionNode || arg.isFunctionNode;
|
|
93
|
-
onlyConstant = onlyConstant && !!arg.isConstantNode;
|
|
94
|
-
return arg;
|
|
95
|
-
});
|
|
96
|
-
if (containsFunctionNode || containsInverseFlag) {
|
|
97
|
-
r.args = r.args.map((arg) => {
|
|
98
|
-
if (!arg.isFunctionNode && !arg.isArrayNode) {
|
|
99
|
-
try {
|
|
100
|
-
arg = rationalize(exports.simplify(arg), {}, true).expression;
|
|
101
|
-
}
|
|
102
|
-
catch (e) {
|
|
103
|
-
// ok;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return arg;
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
if (r.fn !== "equal") {
|
|
111
|
-
try {
|
|
112
|
-
onlyConstant = false;
|
|
113
|
-
r = rationalize(r, {}, true).expression;
|
|
114
|
-
}
|
|
115
|
-
catch (_a) { }
|
|
116
|
-
}
|
|
117
|
-
if (r.conditionals && r.params) {
|
|
118
|
-
r.params = r.params.map((param) => node_sort_1.sort(exports.simplify(param)));
|
|
119
|
-
}
|
|
120
|
-
if (!containsArrayNode && !onlyConstant) {
|
|
121
|
-
// overcome TypeError
|
|
122
|
-
try {
|
|
123
|
-
r = exports.simplify(r);
|
|
124
|
-
}
|
|
125
|
-
catch (e) { }
|
|
126
|
-
}
|
|
127
|
-
log("[normalize] input: ", a.toString(), "output: ", r.toString());
|
|
128
|
-
// check for infinity
|
|
129
|
-
if (r.toString() === "Infinity" ||
|
|
130
|
-
+r.toString() >= positiveInfinity ||
|
|
131
|
-
+r.toString() <= negativeInfinity) {
|
|
132
|
-
r = new m.SymbolNode("Infinity");
|
|
133
|
-
}
|
|
134
|
-
if (r.value) {
|
|
135
|
-
r.value = new m.Fraction(Math.round(r.value * 10000) / 10000);
|
|
136
|
-
}
|
|
137
|
-
else if (r.fn === "unaryMinus") {
|
|
138
|
-
r.args[0].value = new m.Fraction(Math.round(r.args[0].value * 10000) / 10000);
|
|
139
|
-
r = exports.simplify(r);
|
|
140
|
-
}
|
|
141
|
-
return r;
|
|
142
|
-
};
|
|
143
|
-
const isMathEqual = (a, b) => {
|
|
144
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
145
|
-
let as;
|
|
146
|
-
let bs;
|
|
147
|
-
if ((a === null || a === void 0 ? void 0 : a.isUnit) && (b === null || b === void 0 ? void 0 : b.isUnit)) {
|
|
148
|
-
try {
|
|
149
|
-
return m.equal(a, b);
|
|
150
|
-
}
|
|
151
|
-
catch (e) {
|
|
152
|
-
log("[isMathEqual] Error comparing units:", (_a = a === null || a === void 0 ? void 0 : a.toString) === null || _a === void 0 ? void 0 : _a.call(a), (_b = b === null || b === void 0 ? void 0 : b.toString) === null || _b === void 0 ? void 0 : _b.call(b), e);
|
|
153
|
-
return false;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
if ((a === null || a === void 0 ? void 0 : a.isUnit) || (b === null || b === void 0 ? void 0 : b.isUnit)) {
|
|
157
|
-
log("[isMathEqual] Mismatched unit comparison:", (_c = a === null || a === void 0 ? void 0 : a.toString) === null || _c === void 0 ? void 0 : _c.call(a), (_d = b === null || b === void 0 ? void 0 : b.toString) === null || _d === void 0 ? void 0 : _d.call(b));
|
|
158
|
-
return false;
|
|
159
|
-
}
|
|
160
|
-
// apply sort if we are not in a relationalNode
|
|
161
|
-
as = a.conditionals ? normalize(a) : node_sort_1.sort(normalize(a));
|
|
162
|
-
bs = b.conditionals ? normalize(b) : node_sort_1.sort(normalize(b));
|
|
163
|
-
log("[isMathEqual]", as.toString(), "==?", bs.toString());
|
|
164
|
-
const isSortingEnough = node_sort_1.sort(a).equals(node_sort_1.sort(b));
|
|
165
|
-
const isTexEnough = as.toTex().trim() === bs.toTex().trim();
|
|
166
|
-
let equality = isTexEnough || as.equals(bs) || isSortingEnough;
|
|
167
|
-
if (equality) {
|
|
168
|
-
return true;
|
|
169
|
-
}
|
|
170
|
-
// if both expressions are equations
|
|
171
|
-
if (as.fn === "equal" && bs.fn === "equal") {
|
|
172
|
-
return compare_equations_1.compareEquations(as, bs, false);
|
|
173
|
-
}
|
|
174
|
-
// if both expressions are inequalities treat greater sign as equal sign
|
|
175
|
-
if ((as.fn === "larger" && bs.fn === "larger") ||
|
|
176
|
-
(as.fn === "largerEq" && bs.fn === "largerEq")) {
|
|
177
|
-
// solving a 2 way inequality is the same as solving an equation, we can treat the greater sign as an equal sign
|
|
178
|
-
// the difference is that solution should be plotted on a number line (or interval)
|
|
179
|
-
// if we have the same signs and the same direction, the interval will always be the same, starting with the solution
|
|
180
|
-
as.fn = "equal";
|
|
181
|
-
bs.fn = "equal";
|
|
182
|
-
as.op = "=";
|
|
183
|
-
bs.op = "=";
|
|
184
|
-
return compare_equations_1.compareEquations(as, bs, true);
|
|
185
|
-
}
|
|
186
|
-
// check for compound inequalities/3-way inequalities
|
|
187
|
-
if (
|
|
188
|
-
//@ts-ignore
|
|
189
|
-
((_e = as === null || as === void 0 ? void 0 : as.conditionals) === null || _e === void 0 ? void 0 : _e.length) === ((_f = bs === null || bs === void 0 ? void 0 : bs.conditionals) === null || _f === void 0 ? void 0 : _f.length) &&
|
|
190
|
-
//@ts-ignore
|
|
191
|
-
((_g = as === null || as === void 0 ? void 0 : as.conditionals) === null || _g === void 0 ? void 0 : _g.length) === 2 &&
|
|
192
|
-
//@ts-ignore
|
|
193
|
-
((_h = as === null || as === void 0 ? void 0 : as.conditionals) === null || _h === void 0 ? void 0 : _h.toString()) === ((_j = bs === null || bs === void 0 ? void 0 : bs.conditionals) === null || _j === void 0 ? void 0 : _j.toString())) {
|
|
194
|
-
const params = [
|
|
195
|
-
"smaller",
|
|
196
|
-
"smallerEq",
|
|
197
|
-
"larger",
|
|
198
|
-
"largerEq",
|
|
199
|
-
"equal",
|
|
200
|
-
"unequal",
|
|
201
|
-
];
|
|
202
|
-
const paramsIncludedA = params.some((param) =>
|
|
203
|
-
//@ts-ignore
|
|
204
|
-
as.conditionals.includes(param));
|
|
205
|
-
const paramsIncludedB = params.some((param) =>
|
|
206
|
-
//@ts-ignore
|
|
207
|
-
bs.conditionals.includes(param));
|
|
208
|
-
if (paramsIncludedA && paramsIncludedB) {
|
|
209
|
-
return compare_compound_inequations_1.compareCompoundInequations(as, bs);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
return equality;
|
|
213
|
-
};
|
|
214
|
-
exports.isMathEqual = isMathEqual;
|
|
215
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/symbolic/index.ts"],"names":[],"mappings":"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"}
|
package/lib/symbolic/utils.js
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.equationsHaveTheSameVariables = exports.solveLinearEquation = exports.solveQuadraticEquation = exports.setXToOne = exports.getCoefficients = exports.getVariables = exports.transformEqualityInExpression = exports.areNumericallyEquivalent = exports.hasSymbolicExponent = exports.expressionsCanBeCompared = void 0;
|
|
4
|
-
const mathjs_1 = require("../mathjs");
|
|
5
|
-
const _1 = require("./");
|
|
6
|
-
const { simplify } = mathjs_1.mathjs;
|
|
7
|
-
const m = mathjs_1.mathjs;
|
|
8
|
-
let simplifyRules = [
|
|
9
|
-
{ l: "-((n1)*(n2))", r: "(n1)*(n2)" },
|
|
10
|
-
{ l: "(n1-n2)/n3", r: "n1/n3-n2/n3" },
|
|
11
|
-
{ l: "(n1+n2)/n3", r: "n1/n3+n2/n3" },
|
|
12
|
-
{ l: "(n1-n2)*n3/n4", r: "(n1*n3)/n4-(n2*n3)/n4" },
|
|
13
|
-
{ l: "(n1+n2)*n3/n4", r: "(n1*n3)/n4+(n2*n3)/n4" },
|
|
14
|
-
];
|
|
15
|
-
const customRound = (number) => Math.round(number * 10000000000000) / 10000000000000;
|
|
16
|
-
// expressions can be compared if we have at least one symbol node and has no function node or array; do not treat math series as equations
|
|
17
|
-
const expressionsCanBeCompared = (firstEquation, secondEquation) => {
|
|
18
|
-
let noFunctionOrArray = true;
|
|
19
|
-
let firstSymbolNode = false;
|
|
20
|
-
let symbolNode = false;
|
|
21
|
-
let seriesNode = false;
|
|
22
|
-
firstEquation.traverse(function (node, path, parent) {
|
|
23
|
-
if (node.isSymbolNode) {
|
|
24
|
-
firstSymbolNode = true;
|
|
25
|
-
seriesNode = seriesNode || node.name.includes("[");
|
|
26
|
-
}
|
|
27
|
-
noFunctionOrArray =
|
|
28
|
-
noFunctionOrArray || node.isFunctionNode || node.isArrayNode;
|
|
29
|
-
});
|
|
30
|
-
secondEquation.traverse(function (node, path, parent) {
|
|
31
|
-
if (node.isFunctionNode || node.isArrayNode) {
|
|
32
|
-
noFunctionOrArray = false;
|
|
33
|
-
}
|
|
34
|
-
if (node.isSymbolNode && firstSymbolNode)
|
|
35
|
-
symbolNode = true;
|
|
36
|
-
});
|
|
37
|
-
return noFunctionOrArray && symbolNode && !seriesNode;
|
|
38
|
-
};
|
|
39
|
-
exports.expressionsCanBeCompared = expressionsCanBeCompared;
|
|
40
|
-
const hasSymbolicExponent = (node) => {
|
|
41
|
-
let found = false;
|
|
42
|
-
node.traverse((n) => {
|
|
43
|
-
var _a;
|
|
44
|
-
if (n.isOperatorNode &&
|
|
45
|
-
n.op === "^" &&
|
|
46
|
-
!((_a = n.args[1]) === null || _a === void 0 ? void 0 : _a.isConstantNode) // Exponent is symbolic or compound
|
|
47
|
-
) {
|
|
48
|
-
found = true;
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
return found;
|
|
52
|
-
};
|
|
53
|
-
exports.hasSymbolicExponent = hasSymbolicExponent;
|
|
54
|
-
const areNumericallyEquivalent = (exprA, exprB, variables, tolerance = 1e-10) => {
|
|
55
|
-
const compiledA = m.compile(exprA.toString());
|
|
56
|
-
const compiledB = m.compile(exprB.toString());
|
|
57
|
-
const testValues = [1, 2, 3, 4, 5];
|
|
58
|
-
return testValues.every((val) => {
|
|
59
|
-
const scope = variables.reduce((acc, v) => {
|
|
60
|
-
acc[v] = val;
|
|
61
|
-
return acc;
|
|
62
|
-
}, {});
|
|
63
|
-
try {
|
|
64
|
-
const resultA = compiledA.evaluate(scope);
|
|
65
|
-
const resultB = compiledB.evaluate(scope);
|
|
66
|
-
return Math.abs(resultA - resultB) < tolerance;
|
|
67
|
-
}
|
|
68
|
-
catch (_a) {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
};
|
|
73
|
-
exports.areNumericallyEquivalent = areNumericallyEquivalent;
|
|
74
|
-
// move the terms of the equations to the left hand side
|
|
75
|
-
const transformEqualityInExpression = (equality) =>
|
|
76
|
-
// remove added/subtracted numbers/variables from both sides of the equation
|
|
77
|
-
_1.simplify(new m.OperatorNode("-", "subtract", equality.args));
|
|
78
|
-
exports.transformEqualityInExpression = transformEqualityInExpression;
|
|
79
|
-
// check if equation is valid and find out the number of variables and their name
|
|
80
|
-
const getVariables = (equation) => {
|
|
81
|
-
let variableNames = [];
|
|
82
|
-
equation.traverse(function (node, path, parent) {
|
|
83
|
-
if (node.isSymbolNode &&
|
|
84
|
-
(node === null || node === void 0 ? void 0 : node.name.length) === 1 &&
|
|
85
|
-
!variableNames.includes(node.name)) {
|
|
86
|
-
variableNames.push(node.name);
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
return variableNames.sort();
|
|
90
|
-
};
|
|
91
|
-
exports.getVariables = getVariables;
|
|
92
|
-
const getCoefficients = (equation, isInequality) => {
|
|
93
|
-
// coefficients will be determined if equation has only one variable
|
|
94
|
-
try {
|
|
95
|
-
const rationalizedEquation = m.rationalize(equation, {}, true);
|
|
96
|
-
let coefficients = rationalizedEquation.coefficients;
|
|
97
|
-
let allNegatives = coefficients.every((coefficient) => coefficient < 0);
|
|
98
|
-
return allNegatives
|
|
99
|
-
? coefficients.map((coefficient) => Math.abs(coefficient))
|
|
100
|
-
: coefficients;
|
|
101
|
-
}
|
|
102
|
-
catch (e) {
|
|
103
|
-
// rationalize may fail if variable is isolated in a fraction
|
|
104
|
-
// we give it another try to rationalize after applying a new round of simplify to separate the variable
|
|
105
|
-
if (isInequality) {
|
|
106
|
-
equation = simplify(equation, simplifyRules);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
simplifyRules.push({ l: "-(n)", r: "n" });
|
|
110
|
-
equation = simplify(equation, simplifyRules);
|
|
111
|
-
}
|
|
112
|
-
try {
|
|
113
|
-
const rationalizedEquation = m.rationalize(equation, {}, true);
|
|
114
|
-
return rationalizedEquation.coefficients;
|
|
115
|
-
}
|
|
116
|
-
catch (e) { }
|
|
117
|
-
}
|
|
118
|
-
return [1, 0];
|
|
119
|
-
};
|
|
120
|
-
exports.getCoefficients = getCoefficients;
|
|
121
|
-
const setXToOne = (equation, variableName) => equation.transform(function (node, path, parent) {
|
|
122
|
-
if (node.isSymbolNode && node.name === variableName) {
|
|
123
|
-
return new m.ConstantNode(1);
|
|
124
|
-
}
|
|
125
|
-
return node;
|
|
126
|
-
});
|
|
127
|
-
exports.setXToOne = setXToOne;
|
|
128
|
-
// quadratic equation solver for a second-order polynomial equation such as ax^2 + bx + c = 0 for x, where a is not zero
|
|
129
|
-
// quadratic formula
|
|
130
|
-
const solveQuadraticEquation = (coefficients) => {
|
|
131
|
-
const [c, b, a] = coefficients;
|
|
132
|
-
const discriminant = b * b - 4 * a * c;
|
|
133
|
-
let addDiscriminant;
|
|
134
|
-
let subtractDiscriminant;
|
|
135
|
-
try {
|
|
136
|
-
addDiscriminant = m.compile(m.fraction(-b + m.sqrt(discriminant)) / (2 * a));
|
|
137
|
-
}
|
|
138
|
-
catch (_a) {
|
|
139
|
-
addDiscriminant = m.compile("(-b+sqrt(discriminant))/(2*a)");
|
|
140
|
-
}
|
|
141
|
-
try {
|
|
142
|
-
subtractDiscriminant = m.compile(m.fraction(-b - m.sqrt(discriminant)) / (2 * a));
|
|
143
|
-
}
|
|
144
|
-
catch (_b) {
|
|
145
|
-
subtractDiscriminant = m.compile("(-b-sqrt(discriminant))/(2*a)");
|
|
146
|
-
}
|
|
147
|
-
let firstRoot = addDiscriminant.evaluate({
|
|
148
|
-
discriminant: discriminant,
|
|
149
|
-
a: a,
|
|
150
|
-
b: b,
|
|
151
|
-
});
|
|
152
|
-
let secondRoot = subtractDiscriminant.evaluate({
|
|
153
|
-
discriminant: discriminant,
|
|
154
|
-
a: a,
|
|
155
|
-
b: b,
|
|
156
|
-
});
|
|
157
|
-
// roots are real numbers
|
|
158
|
-
if (!firstRoot.im) {
|
|
159
|
-
firstRoot = customRound(firstRoot);
|
|
160
|
-
secondRoot = customRound(secondRoot);
|
|
161
|
-
return [
|
|
162
|
-
{ re: firstRoot, im: 0 },
|
|
163
|
-
{ re: secondRoot, im: 0 },
|
|
164
|
-
];
|
|
165
|
-
}
|
|
166
|
-
return [
|
|
167
|
-
{
|
|
168
|
-
re: customRound(firstRoot.re),
|
|
169
|
-
im: customRound(firstRoot.im),
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
re: customRound(secondRoot.re),
|
|
173
|
-
im: customRound(secondRoot.im),
|
|
174
|
-
},
|
|
175
|
-
];
|
|
176
|
-
};
|
|
177
|
-
exports.solveQuadraticEquation = solveQuadraticEquation;
|
|
178
|
-
// solve x
|
|
179
|
-
const solveLinearEquation = (coefficients) => {
|
|
180
|
-
let result;
|
|
181
|
-
if (!coefficients) {
|
|
182
|
-
return undefined;
|
|
183
|
-
}
|
|
184
|
-
if (coefficients.length === 3 && coefficients[0] === 0) {
|
|
185
|
-
coefficients = coefficients.splice(1, 2);
|
|
186
|
-
}
|
|
187
|
-
if (coefficients.length === 2) {
|
|
188
|
-
if (coefficients[0] === 0 && coefficients[1] === 0) {
|
|
189
|
-
return Infinity;
|
|
190
|
-
}
|
|
191
|
-
if (coefficients[0] === 0) {
|
|
192
|
-
return 0;
|
|
193
|
-
}
|
|
194
|
-
// equation with no solution : if coefficient for x is 0 => division by zero => result == -Infinity
|
|
195
|
-
result = customRound(m.divide(coefficients[0], -1 * coefficients[1]));
|
|
196
|
-
}
|
|
197
|
-
return result;
|
|
198
|
-
};
|
|
199
|
-
exports.solveLinearEquation = solveLinearEquation;
|
|
200
|
-
const equationsHaveTheSameVariables = (firstEquationVariables, secondEquationVariables) => {
|
|
201
|
-
return (Array.isArray(firstEquationVariables) &&
|
|
202
|
-
Array.isArray(secondEquationVariables) &&
|
|
203
|
-
firstEquationVariables.length === secondEquationVariables.length &&
|
|
204
|
-
firstEquationVariables.every((variable, index) => variable === secondEquationVariables[index]));
|
|
205
|
-
};
|
|
206
|
-
exports.equationsHaveTheSameVariables = equationsHaveTheSameVariables;
|
|
207
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/symbolic/utils.ts"],"names":[],"mappings":"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"}
|