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.
Files changed (123) hide show
  1. package/dev/index.html +9 -3
  2. package/dev/pi.js +364 -229
  3. package/dev/pi.js.map +1 -1
  4. package/dist/pi.js +1 -1
  5. package/dist/pi.js.map +1 -1
  6. package/docs/assets/search.js +1 -1
  7. package/docs/classes/algebra.Algebra.Equation.html +26 -0
  8. package/docs/classes/algebra.Algebra.LinearSystem.html +1 -0
  9. package/docs/classes/algebra.Algebra.LogicalSet.html +3 -0
  10. package/docs/classes/algebra.Algebra.Monom.html +36 -36
  11. package/docs/classes/algebra.Algebra.Polynom.html +11 -11
  12. package/docs/classes/algebra.Algebra.Rational.html +2 -0
  13. package/docs/classes/algebra.Equation.html +9 -9
  14. package/docs/classes/algebra.LinearSystem.html +1 -1
  15. package/docs/classes/algebra.Logicalset.html +2 -2
  16. package/docs/classes/algebra.Monom.html +36 -36
  17. package/docs/classes/algebra.Polynom.html +12 -12
  18. package/docs/classes/algebra.Rational.html +2 -2
  19. package/docs/classes/coefficients.Fraction.html +4 -4
  20. package/docs/classes/coefficients.Nthroot.html +1 -1
  21. package/docs/classes/geometry.Circle.html +1 -1
  22. package/docs/classes/geometry.Geometry.Circle.html +1 -0
  23. package/docs/classes/geometry.Geometry.Line.html +1 -0
  24. package/docs/classes/geometry.Geometry.Point.html +1 -0
  25. package/docs/classes/geometry.Geometry.Triangle.html +9 -0
  26. package/docs/classes/geometry.Geometry.Vector.html +1 -0
  27. package/docs/classes/geometry.Line.html +1 -1
  28. package/docs/classes/geometry.Point.html +1 -1
  29. package/docs/classes/geometry.Triangle.html +6 -6
  30. package/docs/classes/geometry.Vector.html +1 -1
  31. package/docs/classes/numeric.Numeric.html +5 -5
  32. package/docs/classes/shutingyard.Shutingyard.html +5 -5
  33. package/docs/interfaces/geometry.remarquableLines.html +1 -1
  34. package/docs/modules/algebra.Algebra.html +1 -1
  35. package/docs/modules/geometry.Geometry.html +1 -0
  36. package/docs/modules/geometry.html +1 -1
  37. package/docs/modules/random.Random.html +1 -1
  38. package/docs/modules/random.html +1 -1
  39. package/esm/main.js +24 -22
  40. package/esm/main.js.map +1 -1
  41. package/esm/maths/algebra/equation.d.ts +2 -1
  42. package/esm/maths/algebra/equation.js +29 -25
  43. package/esm/maths/algebra/equation.js.map +1 -1
  44. package/esm/maths/algebra/index.d.ts +0 -8
  45. package/esm/maths/algebra/index.js +18 -17
  46. package/esm/maths/algebra/index.js.map +1 -1
  47. package/esm/maths/algebra/linearSystem.d.ts +1 -1
  48. package/esm/maths/algebra/linearSystem.js +19 -15
  49. package/esm/maths/algebra/linearSystem.js.map +1 -1
  50. package/esm/maths/algebra/logicalset.js +7 -3
  51. package/esm/maths/algebra/logicalset.js.map +1 -1
  52. package/esm/maths/algebra/monom.d.ts +14 -17
  53. package/esm/maths/algebra/monom.js +164 -75
  54. package/esm/maths/algebra/monom.js.map +1 -1
  55. package/esm/maths/algebra/polynom.d.ts +6 -24
  56. package/esm/maths/algebra/polynom.js +57 -206
  57. package/esm/maths/algebra/polynom.js.map +1 -1
  58. package/esm/maths/algebra/rational.js +15 -10
  59. package/esm/maths/algebra/rational.js.map +1 -1
  60. package/esm/maths/coefficients/fraction.d.ts +20 -10
  61. package/esm/maths/coefficients/fraction.js +83 -15
  62. package/esm/maths/coefficients/fraction.js.map +1 -1
  63. package/esm/maths/coefficients/index.js +14 -2
  64. package/esm/maths/coefficients/index.js.map +1 -1
  65. package/esm/maths/coefficients/nthroot.js +5 -1
  66. package/esm/maths/coefficients/nthroot.js.map +1 -1
  67. package/esm/maths/geometry/circle.js +12 -8
  68. package/esm/maths/geometry/circle.js.map +1 -1
  69. package/esm/maths/geometry/index.js +17 -5
  70. package/esm/maths/geometry/index.js.map +1 -1
  71. package/esm/maths/geometry/line.js +26 -22
  72. package/esm/maths/geometry/line.js.map +1 -1
  73. package/esm/maths/geometry/point.js +16 -12
  74. package/esm/maths/geometry/point.js.map +1 -1
  75. package/esm/maths/geometry/triangle.js +31 -27
  76. package/esm/maths/geometry/triangle.js.map +1 -1
  77. package/esm/maths/geometry/vector.js +21 -17
  78. package/esm/maths/geometry/vector.js.map +1 -1
  79. package/esm/maths/numeric.js +5 -1
  80. package/esm/maths/numeric.js.map +1 -1
  81. package/esm/maths/random/index.d.ts +3 -1
  82. package/esm/maths/random/index.js +32 -14
  83. package/esm/maths/random/index.js.map +1 -1
  84. package/esm/maths/random/randomCore.js +5 -1
  85. package/esm/maths/random/randomCore.js.map +1 -1
  86. package/esm/maths/random/rndFraction.d.ts +9 -0
  87. package/esm/maths/random/rndFraction.js +30 -0
  88. package/esm/maths/random/rndFraction.js.map +1 -0
  89. package/esm/maths/random/rndHelpers.js +5 -1
  90. package/esm/maths/random/rndHelpers.js.map +1 -1
  91. package/esm/maths/random/rndMonom.d.ts +2 -2
  92. package/esm/maths/random/rndMonom.js +15 -8
  93. package/esm/maths/random/rndMonom.js.map +1 -1
  94. package/esm/maths/random/rndPolynom.d.ts +1 -1
  95. package/esm/maths/random/rndPolynom.js +22 -10
  96. package/esm/maths/random/rndPolynom.js.map +1 -1
  97. package/esm/maths/random/rndTypes.d.ts +5 -0
  98. package/esm/maths/random/rndTypes.js +2 -1
  99. package/esm/maths/shutingyard.js +5 -1
  100. package/esm/maths/shutingyard.js.map +1 -1
  101. package/package.json +5 -5
  102. package/src/maths/algebra/equation.ts +6 -5
  103. package/src/maths/algebra/index.ts +1 -9
  104. package/src/maths/algebra/linearSystem.ts +3 -3
  105. package/src/maths/algebra/monom.ts +759 -622
  106. package/src/maths/algebra/monom_bck.backup +746 -0
  107. package/src/maths/algebra/polynom.ts +980 -1170
  108. package/src/maths/algebra/rational.ts +6 -6
  109. package/src/maths/coefficients/fraction.ts +98 -27
  110. package/src/maths/geometry/index.ts +1 -1
  111. package/src/maths/geometry/line.ts +1 -1
  112. package/src/maths/random/index.ts +9 -3
  113. package/src/maths/random/rndFraction.ts +37 -0
  114. package/src/maths/random/rndMonom.ts +6 -3
  115. package/src/maths/random/rndPolynom.ts +15 -5
  116. package/src/maths/random/rndTypes.ts +5 -0
  117. package/src/maths/shutingyard.ts +2 -0
  118. package/tests/algebra/monom.test.ts +29 -8
  119. package/tests/algebra/polynom.test.ts +13 -22
  120. package/tests/coefficients/fraction.test.ts +35 -38
  121. package/tests/shutingyard.test.ts +0 -1
  122. package/tsconfig.json +1 -1
  123. package/tsconfig.testing.json +28 -0
@@ -1,5 +1,5 @@
1
- import { Monom } from './monom';
2
- import { Fraction } from "../coefficients/fraction";
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) => number;
56
+ degree: (letter?: string) => Fraction;
68
57
  letters: () => string[];
69
58
  replaceBy: (letter: string, P: Polynom) => Polynom;
70
- evaluate: (values: number | Fraction | {
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
- import { Monom } from './monom';
2
- import { Shutingyard } from '../shutingyard';
3
- import { Numeric } from '../numeric';
4
- import { Random } from "../random";
5
- import { Fraction } from "../coefficients/fraction";
6
- export class Polynom {
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.isPolynom) {
246
+ if (value instanceof Polynom) {
291
247
  return this.multiplyByPolynom(value);
292
248
  }
293
- else if (value.isFraction) {
249
+ else if (value instanceof coefficients_1.Fraction) {
294
250
  return this.multiplyByFraction(value);
295
251
  }
296
- else if (value.isMonom) {
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) * 2;
340
- while (reminder.degree(letter) >= degreeP && MaxIteration >= 0) {
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() !== cP2.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) - a.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 = 0;
481
+ let d = new coefficients_1.Fraction().zero();
526
482
  for (const m of this._monoms) {
527
- d = Math.max(m.degree(letter), 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] === 0) {
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() * 2;
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.isLitteralSquare() && c.isLitteralSquare()) {
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() === 0) {
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() > 2) {
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, Math.min(m.degree(L), M.degree(L)));
877
- if (M.degree(L) === 0) {
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