pimath 0.0.13 → 0.0.17
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/dev/index.html +9 -3
- package/dev/pi.js +364 -229
- package/dev/pi.js.map +1 -1
- package/dist/pi.js +1 -1
- package/dist/pi.js.map +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/algebra.Algebra.Equation.html +26 -0
- package/docs/classes/algebra.Algebra.LinearSystem.html +1 -0
- package/docs/classes/algebra.Algebra.LogicalSet.html +3 -0
- package/docs/classes/algebra.Algebra.Monom.html +36 -36
- package/docs/classes/algebra.Algebra.Polynom.html +11 -11
- package/docs/classes/algebra.Algebra.Rational.html +2 -0
- package/docs/classes/algebra.Equation.html +9 -9
- package/docs/classes/algebra.LinearSystem.html +1 -1
- package/docs/classes/algebra.Logicalset.html +2 -2
- package/docs/classes/algebra.Monom.html +36 -36
- package/docs/classes/algebra.Polynom.html +12 -12
- package/docs/classes/algebra.Rational.html +2 -2
- package/docs/classes/coefficients.Fraction.html +4 -4
- package/docs/classes/coefficients.Nthroot.html +1 -1
- package/docs/classes/geometry.Circle.html +1 -1
- package/docs/classes/geometry.Geometry.Circle.html +1 -0
- package/docs/classes/geometry.Geometry.Line.html +1 -0
- package/docs/classes/geometry.Geometry.Point.html +1 -0
- package/docs/classes/geometry.Geometry.Triangle.html +9 -0
- package/docs/classes/geometry.Geometry.Vector.html +1 -0
- package/docs/classes/geometry.Line.html +1 -1
- package/docs/classes/geometry.Point.html +1 -1
- package/docs/classes/geometry.Triangle.html +6 -6
- package/docs/classes/geometry.Vector.html +1 -1
- package/docs/classes/numeric.Numeric.html +5 -5
- package/docs/classes/shutingyard.Shutingyard.html +5 -5
- package/docs/interfaces/geometry.remarquableLines.html +1 -1
- package/docs/modules/algebra.Algebra.html +1 -1
- package/docs/modules/geometry.Geometry.html +1 -0
- package/docs/modules/geometry.html +1 -1
- package/docs/modules/random.Random.html +1 -1
- package/docs/modules/random.html +1 -1
- package/esm/main.js +24 -22
- package/esm/main.js.map +1 -1
- package/esm/maths/algebra/equation.d.ts +2 -1
- package/esm/maths/algebra/equation.js +29 -25
- package/esm/maths/algebra/equation.js.map +1 -1
- package/esm/maths/algebra/index.d.ts +0 -8
- package/esm/maths/algebra/index.js +18 -17
- package/esm/maths/algebra/index.js.map +1 -1
- package/esm/maths/algebra/linearSystem.d.ts +1 -1
- package/esm/maths/algebra/linearSystem.js +19 -15
- package/esm/maths/algebra/linearSystem.js.map +1 -1
- package/esm/maths/algebra/logicalset.js +7 -3
- package/esm/maths/algebra/logicalset.js.map +1 -1
- package/esm/maths/algebra/monom.d.ts +14 -17
- package/esm/maths/algebra/monom.js +164 -75
- package/esm/maths/algebra/monom.js.map +1 -1
- package/esm/maths/algebra/polynom.d.ts +6 -24
- package/esm/maths/algebra/polynom.js +57 -206
- package/esm/maths/algebra/polynom.js.map +1 -1
- package/esm/maths/algebra/rational.js +15 -10
- package/esm/maths/algebra/rational.js.map +1 -1
- package/esm/maths/coefficients/fraction.d.ts +20 -10
- package/esm/maths/coefficients/fraction.js +83 -15
- package/esm/maths/coefficients/fraction.js.map +1 -1
- package/esm/maths/coefficients/index.js +14 -2
- package/esm/maths/coefficients/index.js.map +1 -1
- package/esm/maths/coefficients/nthroot.js +5 -1
- package/esm/maths/coefficients/nthroot.js.map +1 -1
- package/esm/maths/geometry/circle.js +12 -8
- package/esm/maths/geometry/circle.js.map +1 -1
- package/esm/maths/geometry/index.js +17 -5
- package/esm/maths/geometry/index.js.map +1 -1
- package/esm/maths/geometry/line.js +26 -22
- package/esm/maths/geometry/line.js.map +1 -1
- package/esm/maths/geometry/point.js +16 -12
- package/esm/maths/geometry/point.js.map +1 -1
- package/esm/maths/geometry/triangle.js +31 -27
- package/esm/maths/geometry/triangle.js.map +1 -1
- package/esm/maths/geometry/vector.js +21 -17
- package/esm/maths/geometry/vector.js.map +1 -1
- package/esm/maths/numeric.js +5 -1
- package/esm/maths/numeric.js.map +1 -1
- package/esm/maths/random/index.d.ts +3 -1
- package/esm/maths/random/index.js +32 -14
- package/esm/maths/random/index.js.map +1 -1
- package/esm/maths/random/randomCore.js +5 -1
- package/esm/maths/random/randomCore.js.map +1 -1
- package/esm/maths/random/rndFraction.d.ts +9 -0
- package/esm/maths/random/rndFraction.js +30 -0
- package/esm/maths/random/rndFraction.js.map +1 -0
- package/esm/maths/random/rndHelpers.js +5 -1
- package/esm/maths/random/rndHelpers.js.map +1 -1
- package/esm/maths/random/rndMonom.d.ts +2 -2
- package/esm/maths/random/rndMonom.js +15 -8
- package/esm/maths/random/rndMonom.js.map +1 -1
- package/esm/maths/random/rndPolynom.d.ts +1 -1
- package/esm/maths/random/rndPolynom.js +22 -10
- package/esm/maths/random/rndPolynom.js.map +1 -1
- package/esm/maths/random/rndTypes.d.ts +5 -0
- package/esm/maths/random/rndTypes.js +2 -1
- package/esm/maths/shutingyard.js +5 -1
- package/esm/maths/shutingyard.js.map +1 -1
- package/package.json +5 -5
- package/src/maths/algebra/equation.ts +6 -5
- package/src/maths/algebra/index.ts +1 -9
- package/src/maths/algebra/linearSystem.ts +3 -3
- package/src/maths/algebra/monom.ts +759 -622
- package/src/maths/algebra/monom_bck.backup +746 -0
- package/src/maths/algebra/polynom.ts +980 -1170
- package/src/maths/algebra/rational.ts +6 -6
- package/src/maths/coefficients/fraction.ts +98 -27
- package/src/maths/geometry/index.ts +1 -1
- package/src/maths/geometry/line.ts +1 -1
- package/src/maths/random/index.ts +9 -3
- package/src/maths/random/rndFraction.ts +37 -0
- package/src/maths/random/rndMonom.ts +6 -3
- package/src/maths/random/rndPolynom.ts +15 -5
- package/src/maths/random/rndTypes.ts +5 -0
- package/src/maths/shutingyard.ts +2 -0
- package/tests/algebra/monom.test.ts +29 -8
- package/tests/algebra/polynom.test.ts +13 -22
- package/tests/coefficients/fraction.test.ts +35 -38
- package/tests/shutingyard.test.ts +0 -1
- package/tsconfig.json +1 -1
- package/tsconfig.testing.json +28 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Monom } from './monom';
|
|
2
|
-
import { Fraction } from "../coefficients
|
|
1
|
+
import { literalType, Monom } from './monom';
|
|
2
|
+
import { Fraction } from "../coefficients";
|
|
3
3
|
export declare class Polynom {
|
|
4
4
|
private _rawString;
|
|
5
5
|
private _monoms;
|
|
@@ -27,17 +27,6 @@ export declare class Polynom {
|
|
|
27
27
|
zero: () => Polynom;
|
|
28
28
|
one: () => Polynom;
|
|
29
29
|
empty: () => Polynom;
|
|
30
|
-
private _randomizeDefaults;
|
|
31
|
-
get randomizeDefaults(): {
|
|
32
|
-
[key: string]: number | string | boolean;
|
|
33
|
-
};
|
|
34
|
-
set randomizeDefaults(value: {
|
|
35
|
-
[key: string]: number | string | boolean;
|
|
36
|
-
});
|
|
37
|
-
randomize: (config: {
|
|
38
|
-
[key: string]: string | number | boolean;
|
|
39
|
-
}) => Polynom;
|
|
40
|
-
rndFactorable: (degree?: number, unit?: boolean | number, letters?: string) => Polynom;
|
|
41
30
|
opposed: () => Polynom;
|
|
42
31
|
add: (...values: any[]) => Polynom;
|
|
43
32
|
subtract: (...values: any[]) => Polynom;
|
|
@@ -64,22 +53,19 @@ export declare class Polynom {
|
|
|
64
53
|
isDeveloped: (polynomString: string) => Boolean;
|
|
65
54
|
reduce: () => Polynom;
|
|
66
55
|
reorder: (letter?: string) => Polynom;
|
|
67
|
-
degree: (letter?: string) =>
|
|
56
|
+
degree: (letter?: string) => Fraction;
|
|
68
57
|
letters: () => string[];
|
|
69
58
|
replaceBy: (letter: string, P: Polynom) => Polynom;
|
|
70
|
-
evaluate: (values:
|
|
71
|
-
[key: string]: number | Fraction;
|
|
72
|
-
}) => Fraction;
|
|
59
|
+
evaluate: (values: literalType | Fraction | number) => Fraction;
|
|
73
60
|
derivative: (letter?: string) => Polynom;
|
|
74
61
|
primitive: (letter?: string) => Polynom;
|
|
75
62
|
integrate: (a: Fraction | number, b: Fraction | number, letter?: string) => Fraction;
|
|
76
|
-
factorize_OLD: (maxValue?: number) => Polynom;
|
|
77
63
|
factorize: (letter?: string) => Polynom[];
|
|
78
64
|
private _factorize2ndDegree;
|
|
79
65
|
private _factorizeByGroups;
|
|
80
66
|
getZeroes: () => (Fraction | boolean)[];
|
|
81
|
-
monomByDegree: (degree?: number, letter?: string) => Monom;
|
|
82
|
-
monomsByDegree: (degree?: number, letter?: string) => Monom[];
|
|
67
|
+
monomByDegree: (degree?: Fraction | number, letter?: string) => Monom;
|
|
68
|
+
monomsByDegree: (degree?: number | Fraction, letter?: string) => Monom[];
|
|
83
69
|
monomByLetter: (letter: string) => Monom;
|
|
84
70
|
getDenominators: () => number[];
|
|
85
71
|
getNumerators: () => number[];
|
|
@@ -88,8 +74,4 @@ export declare class Polynom {
|
|
|
88
74
|
lcmNumerator: () => number;
|
|
89
75
|
gcdNumerator: () => number;
|
|
90
76
|
commonMonom: () => Monom;
|
|
91
|
-
makeItComplicate: (complexity?: number) => Polynom;
|
|
92
|
-
factorizePartial: (forceSign?: boolean) => Polynom;
|
|
93
|
-
minify: () => Polynom;
|
|
94
|
-
canDivide: (P: Polynom, letter?: string) => boolean;
|
|
95
77
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Polynom = void 0;
|
|
4
|
+
const monom_1 = require("./monom");
|
|
5
|
+
const shutingyard_1 = require("../shutingyard");
|
|
6
|
+
const numeric_1 = require("../numeric");
|
|
7
|
+
const coefficients_1 = require("../coefficients");
|
|
8
|
+
class Polynom {
|
|
7
9
|
_rawString;
|
|
8
10
|
_monoms;
|
|
9
11
|
_factors;
|
|
@@ -107,9 +109,7 @@ export class Polynom {
|
|
|
107
109
|
this._rawString = inputStr;
|
|
108
110
|
if (inputStr !== '' && !isNaN(Number(inputStr))) {
|
|
109
111
|
this.empty();
|
|
110
|
-
let m = new Monom();
|
|
111
|
-
m.coefficient = new Fraction(inputStr);
|
|
112
|
-
m.literalStr = '';
|
|
112
|
+
let m = new monom_1.Monom(inputStr);
|
|
113
113
|
this.add(m);
|
|
114
114
|
return this;
|
|
115
115
|
}
|
|
@@ -117,11 +117,11 @@ export class Polynom {
|
|
|
117
117
|
}
|
|
118
118
|
else if (/^[a-z]/.test(inputStr)) {
|
|
119
119
|
this.empty();
|
|
120
|
-
let fractions = values.map(x => new Fraction(x));
|
|
120
|
+
let fractions = values.map(x => new coefficients_1.Fraction(x));
|
|
121
121
|
if (inputStr.length > 1) {
|
|
122
122
|
let letters = inputStr.split(''), i = 0;
|
|
123
123
|
for (let F of fractions) {
|
|
124
|
-
let m = new Monom();
|
|
124
|
+
let m = new monom_1.Monom();
|
|
125
125
|
m.coefficient = F.clone();
|
|
126
126
|
m.literalStr = letters[i] || '';
|
|
127
127
|
this.add(m);
|
|
@@ -131,7 +131,7 @@ export class Polynom {
|
|
|
131
131
|
else {
|
|
132
132
|
let n = fractions.length - 1;
|
|
133
133
|
for (let F of fractions) {
|
|
134
|
-
let m = new Monom();
|
|
134
|
+
let m = new monom_1.Monom();
|
|
135
135
|
m.coefficient = F.clone();
|
|
136
136
|
m.literalStr = `${inputStr}^${n}`;
|
|
137
137
|
this.add(m);
|
|
@@ -145,7 +145,7 @@ export class Polynom {
|
|
|
145
145
|
}
|
|
146
146
|
};
|
|
147
147
|
shutingYardToReducedPolynom = (inputStr) => {
|
|
148
|
-
const SY = new Shutingyard().parse(inputStr);
|
|
148
|
+
const SY = new shutingyard_1.Shutingyard().parse(inputStr);
|
|
149
149
|
const rpn = SY.rpn;
|
|
150
150
|
let m1;
|
|
151
151
|
let m2;
|
|
@@ -153,7 +153,7 @@ export class Polynom {
|
|
|
153
153
|
for (const element of rpn) {
|
|
154
154
|
if (element.tokenType === 'coefficient' || element.tokenType === 'variable') {
|
|
155
155
|
tempPolynom = new Polynom().zero();
|
|
156
|
-
tempPolynom.monoms = [new Monom(element.token)];
|
|
156
|
+
tempPolynom.monoms = [new monom_1.Monom(element.token)];
|
|
157
157
|
stack.push(tempPolynom.clone());
|
|
158
158
|
}
|
|
159
159
|
else if (element.tokenType === 'operation') {
|
|
@@ -189,13 +189,13 @@ export class Polynom {
|
|
|
189
189
|
};
|
|
190
190
|
zero = () => {
|
|
191
191
|
this._monoms = [];
|
|
192
|
-
this._monoms.push(new Monom().zero());
|
|
192
|
+
this._monoms.push(new monom_1.Monom().zero());
|
|
193
193
|
this._rawString = '0';
|
|
194
194
|
return this;
|
|
195
195
|
};
|
|
196
196
|
one = () => {
|
|
197
197
|
this._monoms = [];
|
|
198
|
-
this._monoms.push(new Monom().one());
|
|
198
|
+
this._monoms.push(new monom_1.Monom().one());
|
|
199
199
|
this._rawString = '1';
|
|
200
200
|
return this;
|
|
201
201
|
};
|
|
@@ -204,50 +204,6 @@ export class Polynom {
|
|
|
204
204
|
this._rawString = '';
|
|
205
205
|
return this;
|
|
206
206
|
};
|
|
207
|
-
_randomizeDefaults = {
|
|
208
|
-
degree: 2,
|
|
209
|
-
unit: true,
|
|
210
|
-
fractions: false,
|
|
211
|
-
factorable: false,
|
|
212
|
-
letters: 'x',
|
|
213
|
-
allowNullMonom: false,
|
|
214
|
-
numberOfMonoms: false
|
|
215
|
-
};
|
|
216
|
-
get randomizeDefaults() {
|
|
217
|
-
return this._randomizeDefaults;
|
|
218
|
-
}
|
|
219
|
-
set randomizeDefaults(value) {
|
|
220
|
-
this._randomizeDefaults = value;
|
|
221
|
-
}
|
|
222
|
-
randomize = (config) => {
|
|
223
|
-
let P = new Polynom();
|
|
224
|
-
if (config === undefined) {
|
|
225
|
-
config = {};
|
|
226
|
-
}
|
|
227
|
-
for (let k in this._randomizeDefaults) {
|
|
228
|
-
if (config[k] === undefined) {
|
|
229
|
-
config[k] = this._randomizeDefaults[k];
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
return P;
|
|
233
|
-
};
|
|
234
|
-
rndFactorable = (degree = 2, unit = false, letters = 'x') => {
|
|
235
|
-
this._factors = [];
|
|
236
|
-
for (let i = 0; i < degree; i++) {
|
|
237
|
-
let factorUnit = unit === true || i >= unit, p = Random.polynom({
|
|
238
|
-
degree: 1,
|
|
239
|
-
unit: factorUnit,
|
|
240
|
-
fraction: false,
|
|
241
|
-
letters
|
|
242
|
-
});
|
|
243
|
-
this._factors.push(p);
|
|
244
|
-
}
|
|
245
|
-
this.empty().monoms = this._factors[0].monoms;
|
|
246
|
-
for (let i = 1; i < this._factors.length; i++) {
|
|
247
|
-
this.multiply(this._factors[i]);
|
|
248
|
-
}
|
|
249
|
-
return this;
|
|
250
|
-
};
|
|
251
207
|
opposed = () => {
|
|
252
208
|
this._monoms = this._monoms.map(m => m.opposed());
|
|
253
209
|
return this;
|
|
@@ -261,10 +217,10 @@ export class Polynom {
|
|
|
261
217
|
this._monoms.push(value.clone());
|
|
262
218
|
}
|
|
263
219
|
else if (Number.isSafeInteger(value)) {
|
|
264
|
-
this._monoms.push(new Monom(value.toString()));
|
|
220
|
+
this._monoms.push(new monom_1.Monom(value.toString()));
|
|
265
221
|
}
|
|
266
222
|
else {
|
|
267
|
-
this._monoms.push(new Monom(value));
|
|
223
|
+
this._monoms.push(new monom_1.Monom(value));
|
|
268
224
|
}
|
|
269
225
|
}
|
|
270
226
|
return this.reduce();
|
|
@@ -278,22 +234,22 @@ export class Polynom {
|
|
|
278
234
|
this._monoms.push(value.clone().opposed());
|
|
279
235
|
}
|
|
280
236
|
else if (Number.isSafeInteger(value)) {
|
|
281
|
-
this._monoms.push(new Monom(value.toString()).opposed());
|
|
237
|
+
this._monoms.push(new monom_1.Monom(value.toString()).opposed());
|
|
282
238
|
}
|
|
283
239
|
else {
|
|
284
|
-
this._monoms.push(new Monom(value).opposed());
|
|
240
|
+
this._monoms.push(new monom_1.Monom(value).opposed());
|
|
285
241
|
}
|
|
286
242
|
}
|
|
287
243
|
return this.reduce();
|
|
288
244
|
};
|
|
289
245
|
multiply = (value) => {
|
|
290
|
-
if (value
|
|
246
|
+
if (value instanceof Polynom) {
|
|
291
247
|
return this.multiplyByPolynom(value);
|
|
292
248
|
}
|
|
293
|
-
else if (value.
|
|
249
|
+
else if (value instanceof coefficients_1.Fraction) {
|
|
294
250
|
return this.multiplyByFraction(value);
|
|
295
251
|
}
|
|
296
|
-
else if (value.
|
|
252
|
+
else if (value instanceof monom_1.Monom) {
|
|
297
253
|
return this.multiplyByMonom(value);
|
|
298
254
|
}
|
|
299
255
|
else if (Number.isSafeInteger(value)) {
|
|
@@ -305,7 +261,7 @@ export class Polynom {
|
|
|
305
261
|
const M = [];
|
|
306
262
|
for (const m1 of this._monoms) {
|
|
307
263
|
for (const m2 of P.monoms) {
|
|
308
|
-
M.push(Monom.xmultiply(m1, m2));
|
|
264
|
+
M.push(monom_1.Monom.xmultiply(m1, m2));
|
|
309
265
|
}
|
|
310
266
|
}
|
|
311
267
|
this._monoms = M;
|
|
@@ -318,7 +274,7 @@ export class Polynom {
|
|
|
318
274
|
return this.reduce();
|
|
319
275
|
};
|
|
320
276
|
multiplyByInteger = (nb) => {
|
|
321
|
-
return this.multiplyByFraction(new Fraction(nb));
|
|
277
|
+
return this.multiplyByFraction(new coefficients_1.Fraction(nb));
|
|
322
278
|
};
|
|
323
279
|
multiplyByMonom = (M) => {
|
|
324
280
|
for (const m of this._monoms) {
|
|
@@ -336,9 +292,9 @@ export class Polynom {
|
|
|
336
292
|
const maxMP = P.monomByDegree(undefined, letter);
|
|
337
293
|
const degreeP = P.degree(letter);
|
|
338
294
|
let newM;
|
|
339
|
-
let MaxIteration = this.degree(letter)
|
|
340
|
-
while (reminder.degree(letter) >= degreeP && MaxIteration
|
|
341
|
-
MaxIteration
|
|
295
|
+
let MaxIteration = this.degree(letter).clone().multiply(2);
|
|
296
|
+
while (reminder.degree(letter) >= degreeP && MaxIteration.isPositive()) {
|
|
297
|
+
MaxIteration.subtract(1);
|
|
342
298
|
newM = reminder.monomByDegree(undefined, letter).clone().divide(maxMP);
|
|
343
299
|
if (newM.isZero()) {
|
|
344
300
|
break;
|
|
@@ -357,7 +313,7 @@ export class Polynom {
|
|
|
357
313
|
}
|
|
358
314
|
};
|
|
359
315
|
divideByInteger = (nb) => {
|
|
360
|
-
const nbF = new Fraction(nb);
|
|
316
|
+
const nbF = new coefficients_1.Fraction(nb);
|
|
361
317
|
for (const m of this._monoms) {
|
|
362
318
|
m.coefficient.divide(nbF);
|
|
363
319
|
}
|
|
@@ -393,7 +349,7 @@ export class Polynom {
|
|
|
393
349
|
const cP2 = P.clone().reduce().reorder();
|
|
394
350
|
switch (sign) {
|
|
395
351
|
case '=':
|
|
396
|
-
if (cP1.length !== cP2.length || cP1.degree()
|
|
352
|
+
if (cP1.length !== cP2.length || cP1.degree().isNotEqual(cP2.degree())) {
|
|
397
353
|
return false;
|
|
398
354
|
}
|
|
399
355
|
for (const i in cP1.monoms) {
|
|
@@ -517,14 +473,14 @@ export class Polynom {
|
|
|
517
473
|
};
|
|
518
474
|
reorder = (letter = 'x') => {
|
|
519
475
|
this._monoms.sort(function (a, b) {
|
|
520
|
-
return b.degree(letter)
|
|
476
|
+
return b.degree(letter).clone().subtract(a.degree(letter)).value;
|
|
521
477
|
});
|
|
522
478
|
return this.reduce();
|
|
523
479
|
};
|
|
524
480
|
degree = (letter) => {
|
|
525
|
-
let d =
|
|
481
|
+
let d = new coefficients_1.Fraction().zero();
|
|
526
482
|
for (const m of this._monoms) {
|
|
527
|
-
d =
|
|
483
|
+
d = coefficients_1.Fraction.max(m.degree(letter).value, d);
|
|
528
484
|
}
|
|
529
485
|
return d;
|
|
530
486
|
};
|
|
@@ -539,7 +495,7 @@ export class Polynom {
|
|
|
539
495
|
let pow;
|
|
540
496
|
const resultPolynom = new Polynom().zero();
|
|
541
497
|
for (const m of this.monoms) {
|
|
542
|
-
if (m.literal[letter] === undefined || m.literal[letter]
|
|
498
|
+
if (m.literal[letter] === undefined || m.literal[letter].isZero()) {
|
|
543
499
|
resultPolynom.add(m.clone());
|
|
544
500
|
}
|
|
545
501
|
else {
|
|
@@ -552,7 +508,7 @@ export class Polynom {
|
|
|
552
508
|
return this;
|
|
553
509
|
};
|
|
554
510
|
evaluate = (values) => {
|
|
555
|
-
const r = new Fraction().zero();
|
|
511
|
+
const r = new coefficients_1.Fraction().zero();
|
|
556
512
|
this._monoms.forEach(monom => {
|
|
557
513
|
r.add(monom.evaluate(values));
|
|
558
514
|
});
|
|
@@ -578,59 +534,10 @@ export class Polynom {
|
|
|
578
534
|
letter = 'x';
|
|
579
535
|
}
|
|
580
536
|
let valuesA = {}, valuesB = {};
|
|
581
|
-
valuesA[letter] = a;
|
|
582
|
-
valuesB[letter] = b;
|
|
537
|
+
valuesA[letter] = new coefficients_1.Fraction(a);
|
|
538
|
+
valuesB[letter] = new coefficients_1.Fraction(b);
|
|
583
539
|
return primitive.evaluate(valuesB).subtract(primitive.evaluate(valuesA));
|
|
584
540
|
};
|
|
585
|
-
factorize_OLD = (maxValue) => {
|
|
586
|
-
this._factors = [];
|
|
587
|
-
let P = this.clone(), nbFactorsFound = 0;
|
|
588
|
-
if (P.monomByDegree().coefficient.numerator < 0) {
|
|
589
|
-
this._factors.push(new Polynom('-1'));
|
|
590
|
-
}
|
|
591
|
-
let M = P.commonMonom();
|
|
592
|
-
if (!M.isOne()) {
|
|
593
|
-
let commonPolynom = new Polynom();
|
|
594
|
-
commonPolynom.monoms = [M];
|
|
595
|
-
if (this._factors.length === 0) {
|
|
596
|
-
this._factors.push(commonPolynom);
|
|
597
|
-
}
|
|
598
|
-
else {
|
|
599
|
-
this._factors = [];
|
|
600
|
-
this._factors.push(commonPolynom.opposed());
|
|
601
|
-
}
|
|
602
|
-
P = P.euclidian(commonPolynom).quotient;
|
|
603
|
-
nbFactorsFound = commonPolynom.degree();
|
|
604
|
-
}
|
|
605
|
-
if (P.degree() <= 1) {
|
|
606
|
-
this._factors.push(P.clone());
|
|
607
|
-
}
|
|
608
|
-
else {
|
|
609
|
-
let Q = new Fraction(), F, degree = P.degree();
|
|
610
|
-
maxValue = maxValue === undefined ? 20 : maxValue;
|
|
611
|
-
for (let a = 1; a <= maxValue; a++) {
|
|
612
|
-
for (let b = -maxValue; b <= maxValue; b++) {
|
|
613
|
-
Q.parse(-b, a);
|
|
614
|
-
if (P.evaluate({ x: Q })) {
|
|
615
|
-
F = new Polynom(`${a}x+${b}`);
|
|
616
|
-
while (P.evaluate({ x: Q }).value === 0) {
|
|
617
|
-
this._factors.push(F.clone());
|
|
618
|
-
nbFactorsFound++;
|
|
619
|
-
P = P.euclidian(F).quotient;
|
|
620
|
-
}
|
|
621
|
-
}
|
|
622
|
-
if (nbFactorsFound > degree) {
|
|
623
|
-
return this;
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
|
-
if (P.degree() > 1) {
|
|
628
|
-
this._factors.push(P.clone());
|
|
629
|
-
return this;
|
|
630
|
-
}
|
|
631
|
-
}
|
|
632
|
-
return this;
|
|
633
|
-
};
|
|
634
541
|
factorize = (letter) => {
|
|
635
542
|
let factors = [];
|
|
636
543
|
let P = this.clone().reorder(), M = P.commonMonom(), tempPolynom;
|
|
@@ -640,7 +547,7 @@ export class Polynom {
|
|
|
640
547
|
factors = [tempPolynom.clone()];
|
|
641
548
|
P = P.euclidian(tempPolynom).quotient;
|
|
642
549
|
}
|
|
643
|
-
let securityLoop = P.degree()
|
|
550
|
+
let securityLoop = P.degree().clone().multiply(2).value;
|
|
644
551
|
while (securityLoop >= 0) {
|
|
645
552
|
securityLoop--;
|
|
646
553
|
if (P.monoms.length < 2) {
|
|
@@ -723,14 +630,14 @@ export class Polynom {
|
|
|
723
630
|
a = this.monomByDegree(2, letter);
|
|
724
631
|
b = this.monomByDegree(1, letter);
|
|
725
632
|
c = this.monomByDegree(0, letter);
|
|
726
|
-
if (a.
|
|
633
|
+
if (a.isLiteralSquare() && c.isLiteralSquare()) {
|
|
727
634
|
if (b.clone().pow(2).isSameAs(a.clone().multiply(c))) {
|
|
728
635
|
let xPolynom = new Polynom('x', a.coefficient, b.coefficient, c.coefficient);
|
|
729
636
|
let xFactors = xPolynom._factorize2ndDegree('x');
|
|
730
637
|
let factors = [], xyzPolynom;
|
|
731
638
|
if (xFactors.length >= 2) {
|
|
732
639
|
for (let p of xFactors) {
|
|
733
|
-
if (p.degree()
|
|
640
|
+
if (p.degree().isZero()) {
|
|
734
641
|
factors.push(p.clone());
|
|
735
642
|
}
|
|
736
643
|
else {
|
|
@@ -752,7 +659,7 @@ export class Polynom {
|
|
|
752
659
|
};
|
|
753
660
|
getZeroes = () => {
|
|
754
661
|
const Z = [];
|
|
755
|
-
switch (this.degree()) {
|
|
662
|
+
switch (this.degree().value) {
|
|
756
663
|
case 0:
|
|
757
664
|
if (this._monoms[0].coefficient.value === 0) {
|
|
758
665
|
return [true];
|
|
@@ -762,7 +669,7 @@ export class Polynom {
|
|
|
762
669
|
}
|
|
763
670
|
case 1:
|
|
764
671
|
if (this._monoms.length === 1) {
|
|
765
|
-
return [new Fraction().zero()];
|
|
672
|
+
return [new coefficients_1.Fraction().zero()];
|
|
766
673
|
}
|
|
767
674
|
else {
|
|
768
675
|
const P = this.clone().reduce().reorder();
|
|
@@ -774,14 +681,14 @@ export class Polynom {
|
|
|
774
681
|
}
|
|
775
682
|
let zeroes = [], zeroesAsTex = [];
|
|
776
683
|
for (let P of this._factors) {
|
|
777
|
-
if (P.degree()
|
|
684
|
+
if (P.degree().greater(2)) {
|
|
778
685
|
}
|
|
779
|
-
else if (P.degree() === 2) {
|
|
686
|
+
else if (P.degree().value === 2) {
|
|
780
687
|
let A = P.monomByDegree(2).coefficient, B = P.monomByDegree(1).coefficient, C = P.monomByDegree(0).coefficient, D = B.clone().pow(2).subtract(A.clone().multiply(C).multiply(4));
|
|
781
688
|
if (D.value > 0) {
|
|
782
689
|
let x1 = (-(B.value) + Math.sqrt(D.value)) / (2 * A.value), x2 = (-(B.value) - Math.sqrt(D.value)) / (2 * A.value);
|
|
783
|
-
zeroes.push(new Fraction(x1.toFixed(3)).reduce());
|
|
784
|
-
zeroes.push(new Fraction(x2.toFixed(3)).reduce());
|
|
690
|
+
zeroes.push(new coefficients_1.Fraction(x1.toFixed(3)).reduce());
|
|
691
|
+
zeroes.push(new coefficients_1.Fraction(x2.toFixed(3)).reduce());
|
|
785
692
|
}
|
|
786
693
|
else if (D.value === 0) {
|
|
787
694
|
}
|
|
@@ -815,7 +722,7 @@ export class Polynom {
|
|
|
815
722
|
return m.clone();
|
|
816
723
|
}
|
|
817
724
|
}
|
|
818
|
-
return new Monom().zero();
|
|
725
|
+
return new monom_1.Monom().zero();
|
|
819
726
|
};
|
|
820
727
|
monomsByDegree = (degree, letter) => {
|
|
821
728
|
if (degree === undefined) {
|
|
@@ -837,7 +744,7 @@ export class Polynom {
|
|
|
837
744
|
return m.clone();
|
|
838
745
|
}
|
|
839
746
|
}
|
|
840
|
-
return new Monom().zero();
|
|
747
|
+
return new monom_1.Monom().zero();
|
|
841
748
|
};
|
|
842
749
|
getDenominators = () => {
|
|
843
750
|
const denominators = [];
|
|
@@ -854,89 +761,33 @@ export class Polynom {
|
|
|
854
761
|
return numerators;
|
|
855
762
|
};
|
|
856
763
|
lcmDenominator = () => {
|
|
857
|
-
return Numeric.lcm(...this.getDenominators());
|
|
764
|
+
return numeric_1.Numeric.lcm(...this.getDenominators());
|
|
858
765
|
};
|
|
859
766
|
gcdDenominator = () => {
|
|
860
|
-
return Numeric.gcd(...this.getDenominators());
|
|
767
|
+
return numeric_1.Numeric.gcd(...this.getDenominators());
|
|
861
768
|
};
|
|
862
769
|
lcmNumerator = () => {
|
|
863
|
-
return Numeric.lcm(...this.getNumerators());
|
|
770
|
+
return numeric_1.Numeric.lcm(...this.getNumerators());
|
|
864
771
|
};
|
|
865
772
|
gcdNumerator = () => {
|
|
866
|
-
return Numeric.gcd(...this.getNumerators());
|
|
773
|
+
return numeric_1.Numeric.gcd(...this.getNumerators());
|
|
867
774
|
};
|
|
868
775
|
commonMonom = () => {
|
|
869
|
-
let M = new Monom().one(), numerator, denominator, degree = this.degree();
|
|
776
|
+
let M = new monom_1.Monom().one(), numerator, denominator, degree = this.degree();
|
|
870
777
|
numerator = this.gcdNumerator();
|
|
871
778
|
denominator = this.gcdDenominator();
|
|
872
|
-
M.coefficient = new Fraction(numerator, denominator);
|
|
779
|
+
M.coefficient = new coefficients_1.Fraction(numerator, denominator);
|
|
873
780
|
for (let L of this.variables) {
|
|
874
781
|
M.setLetter(L, degree);
|
|
875
782
|
for (let m of this._monoms) {
|
|
876
|
-
M.setLetter(L,
|
|
877
|
-
if (M.degree(L)
|
|
783
|
+
M.setLetter(L, coefficients_1.Fraction.min(m.degree(L), M.degree(L)));
|
|
784
|
+
if (M.degree(L).isZero()) {
|
|
878
785
|
break;
|
|
879
786
|
}
|
|
880
787
|
}
|
|
881
788
|
}
|
|
882
789
|
return M;
|
|
883
790
|
};
|
|
884
|
-
makeItComplicate = (complexity = 1) => {
|
|
885
|
-
this._texString = '';
|
|
886
|
-
if (this.degree() < 1) {
|
|
887
|
-
return this;
|
|
888
|
-
}
|
|
889
|
-
const mDegree = Random.number(0, this.degree() - 1);
|
|
890
|
-
return this;
|
|
891
|
-
};
|
|
892
|
-
factorizePartial = (forceSign) => {
|
|
893
|
-
this._texString = '';
|
|
894
|
-
if (this.length <= 1) {
|
|
895
|
-
return this;
|
|
896
|
-
}
|
|
897
|
-
let mMain, mCheck, mFactor, pFactor, g, sign;
|
|
898
|
-
for (let i = 0; i < this.length; i++) {
|
|
899
|
-
mMain = this._monoms[i].clone();
|
|
900
|
-
for (let j = i + 1; j < this.length; j++) {
|
|
901
|
-
mCheck = this._monoms[j].clone();
|
|
902
|
-
g = Numeric.gcd(mMain.coefficient.numerator, mCheck.coefficient.numerator);
|
|
903
|
-
if (g !== 1) {
|
|
904
|
-
mFactor = Monom.lcm(mMain, mCheck);
|
|
905
|
-
sign = mMain.coefficient.sign() === 1 ? '+' : '-';
|
|
906
|
-
this._texString = `${forceSign === true ? sign : (sign === '+' ? '' : sign)}${mFactor.tex}`;
|
|
907
|
-
pFactor = new Polynom().add(mMain.divide(mFactor)).add(mCheck.divide(mFactor));
|
|
908
|
-
this._texString += pFactor.genDisplay('tex', false, true);
|
|
909
|
-
this._texString += this.clone().subtract(pFactor.clone().multiply(mFactor)).genDisplay('tex', true, false);
|
|
910
|
-
return this;
|
|
911
|
-
}
|
|
912
|
-
}
|
|
913
|
-
}
|
|
914
|
-
this._texString = this.genDisplay('tex', forceSign);
|
|
915
|
-
return this;
|
|
916
|
-
};
|
|
917
|
-
minify = () => {
|
|
918
|
-
this.multiply(this.lcmDenominator()).divide(this.gcdNumerator()).reduce();
|
|
919
|
-
return this.reduce();
|
|
920
|
-
};
|
|
921
|
-
canDivide = (P, letter = 'x') => {
|
|
922
|
-
const d = P.degree();
|
|
923
|
-
const evalValue = {};
|
|
924
|
-
if (d === 0) {
|
|
925
|
-
return !P.isZero;
|
|
926
|
-
}
|
|
927
|
-
if (d === 1) {
|
|
928
|
-
const z = P.getZeroes();
|
|
929
|
-
if (z[0] === true || z[0] === false) {
|
|
930
|
-
return false;
|
|
931
|
-
}
|
|
932
|
-
evalValue[letter] = z[0];
|
|
933
|
-
return this.evaluate(evalValue).value === 0;
|
|
934
|
-
}
|
|
935
|
-
if (d > 1) {
|
|
936
|
-
console.log('Currently, only first degree polynom are supported');
|
|
937
|
-
return false;
|
|
938
|
-
}
|
|
939
|
-
return false;
|
|
940
|
-
};
|
|
941
791
|
}
|
|
792
|
+
exports.Polynom = Polynom;
|
|
942
793
|
//# sourceMappingURL=polynom.js.map
|