pimath 0.0.60 → 0.0.63

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 (58) hide show
  1. package/.eslintrc.js +23 -23
  2. package/.idea/misc.xml +5 -0
  3. package/.idea/php.xml +1 -1
  4. package/.idea/shelf/Uncommitted_changes_before_Update_at_17_04_2022_12_40_[Changes]/shelved.patch +21 -0
  5. package/.idea/shelf/Uncommitted_changes_before_Update_at_17_04_2022_12_40__Changes_.xml +4 -0
  6. package/dist/pi.js +638 -351
  7. package/dist/pi.js.map +1 -1
  8. package/dist/pi.min.js +1 -1
  9. package/dist/pi.min.js.map +1 -1
  10. package/docs/assets/highlight.css +78 -78
  11. package/docs/assets/main.js +52 -52
  12. package/docs/assets/style.css +1413 -1413
  13. package/docs/classes/Logicalset.Logicalset-1.html +4 -4
  14. package/docs/classes/Polynom.Rational.html +3 -3
  15. package/docs/classes/algebra_equation.Equation.html +25 -25
  16. package/docs/classes/algebra_monom.Monom.html +113 -113
  17. package/docs/classes/algebra_polynom.Polynom.html +29 -29
  18. package/docs/classes/coefficients_fraction.Fraction.html +18 -18
  19. package/docs/classes/coefficients_nthroot.NthRoot.html +2 -2
  20. package/docs/classes/geometry_circle.Circle.html +2 -2
  21. package/docs/classes/geometry_line.Line.html +2 -2
  22. package/docs/classes/geometry_triangle.Triangle.html +16 -16
  23. package/docs/classes/numeric.Numeric.html +13 -13
  24. package/docs/classes/shutingyard.Shutingyard.html +17 -17
  25. package/docs/index.html +10 -10
  26. package/docs/interfaces/algebra_equation.ISolution.html +2 -2
  27. package/docs/modules/Logicalset.html +2 -2
  28. package/docs/modules/Polynom.html +2 -2
  29. package/docs/modules/Vector.html +2 -2
  30. package/esm/maths/algebra/linearSystem.js +0 -1
  31. package/esm/maths/algebra/linearSystem.js.map +1 -1
  32. package/esm/maths/algebra/monom.d.ts +1 -0
  33. package/esm/maths/algebra/monom.js +18 -0
  34. package/esm/maths/algebra/monom.js.map +1 -1
  35. package/esm/maths/algebra/polynom.d.ts +30 -11
  36. package/esm/maths/algebra/polynom.js +144 -258
  37. package/esm/maths/algebra/polynom.js.map +1 -1
  38. package/esm/maths/algebra/rational.d.ts +12 -15
  39. package/esm/maths/algebra/rational.js +14 -103
  40. package/esm/maths/algebra/rational.js.map +1 -1
  41. package/esm/maths/algebra/study/rationalStudy.d.ts +33 -0
  42. package/esm/maths/algebra/study/rationalStudy.js +174 -0
  43. package/esm/maths/algebra/study/rationalStudy.js.map +1 -0
  44. package/esm/maths/algebra/study.d.ts +133 -0
  45. package/esm/maths/algebra/study.js +275 -0
  46. package/esm/maths/algebra/study.js.map +1 -0
  47. package/package.json +1 -1
  48. package/src/maths/algebra/linearSystem.ts +0 -1
  49. package/src/maths/algebra/monom.ts +19 -0
  50. package/src/maths/algebra/polynom.ts +185 -278
  51. package/src/maths/algebra/rational.ts +24 -132
  52. package/src/maths/algebra/study/rationalStudy.ts +208 -0
  53. package/src/maths/algebra/study.ts +384 -0
  54. package/tests/algebra/monom.test.ts +2 -5
  55. package/tests/algebra/polynom.test.ts +2 -3
  56. package/tests/algebra/rationnal.test.ts +0 -43
  57. package/tests/algebra/study.test.ts +18 -0
  58. package/tests/numexp.test.ts +1 -1
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Rational polynom module contains everything necessary to handle rational polynoms.
3
+ * @module Polynom
4
+ */
5
+ import {Rational} from "./rational";
6
+ import {ISolution} from "./equation";
7
+ import {Polynom} from "./polynom";
8
+
9
+ export declare type StudyableFunction = Rational;
10
+ export declare enum ZEROTYPE {
11
+ ZERO = "z",
12
+ DEFENCE = "d",
13
+ NOTHING = "t"
14
+ }
15
+ export interface IZero extends ISolution {
16
+ extrema: FUNCTION_EXTREMA;
17
+ type: ZEROTYPE;
18
+ }
19
+ export declare enum ASYMPTOTE {
20
+ VERTICAL = "av",
21
+ HORIZONTAL = "ah",
22
+ SLOPE = "ao",
23
+ HOLE = "hole"
24
+ }
25
+ export interface IAsymptote {
26
+ deltaX: StudyableFunction;
27
+ limits: string;
28
+ tex: string;
29
+ type: ASYMPTOTE;
30
+ zero: IZero;
31
+ }
32
+ export declare enum FUNCTION_EXTREMA {
33
+ MIN = "min",
34
+ MAX = "max",
35
+ FLAT = "flat",
36
+ NOTHING = ""
37
+ }
38
+ export interface IExtrema {
39
+ tex: {
40
+ x: string;
41
+ y: string;
42
+ };
43
+ type: FUNCTION_EXTREMA;
44
+ value: {
45
+ x: number;
46
+ y: number;
47
+ };
48
+ }
49
+ export interface ITableOfSigns {
50
+ extremes: {
51
+ [Key: string]: IExtrema;
52
+ };
53
+ factors: Polynom[];
54
+ fx: StudyableFunction;
55
+ signs: (string[])[];
56
+ type: TABLE_OF_SIGNS;
57
+ zeroes: IZero[];
58
+ }
59
+ export declare enum TABLE_OF_SIGNS {
60
+ DEFAULT = 0,
61
+ GROWS = 1,
62
+ VARIATIONS = 2
63
+ }
64
+ /**
65
+ * The study class is a "function study" class that will get:
66
+ * fx : get the function
67
+ * domain : string
68
+ * zeroes : Object (tex, IZero)
69
+ * signs : table of signs + tex output using tkz-tab
70
+ * av : vertical asymptotic
71
+ * ah : horizontal asymptotic
72
+ * ao : obliques
73
+ * deltaX : position relative
74
+ * dx : derivative
75
+ * grows : growing table + tex output using tkz-tab
76
+ * ddx : dérivée seconde
77
+ * variations : variation table + tex output using tkz-tab
78
+ */
79
+ export declare class Study {
80
+ fx: StudyableFunction;
81
+ private _asymptotes;
82
+ private _derivative;
83
+ private _signs;
84
+ private _variations;
85
+ private _zeroes;
86
+
87
+ constructor(fx: StudyableFunction);
88
+
89
+ get zeroes(): IZero[];
90
+
91
+ get domain(): string;
92
+
93
+ get signs(): ITableOfSigns;
94
+
95
+ get asymptotes(): IAsymptote[];
96
+
97
+ get derivative(): ITableOfSigns;
98
+
99
+ get tex(): string;
100
+
101
+ get texGrows(): string;
102
+
103
+ get texVariations(): string;
104
+
105
+ indexOfZero: (zeroes: IZero[], zero: IZero | ISolution) => number;
106
+ makeGrowsResult: (fx: StudyableFunction, tos: ITableOfSigns) => {
107
+ growsLine: string[];
108
+ extremes: {
109
+ [Key: string]: IExtrema;
110
+ };
111
+ };
112
+ makeOneLineForSigns: (factor: Polynom, zeroes: IZero[], zeroSign: ZEROTYPE) => string[];
113
+ makeSignsResult: (signs: (string[])[]) => string[];
114
+ makeStudy: () => void;
115
+ makeVariationsResult: (fx: StudyableFunction, tos: ITableOfSigns) => {
116
+ varsLine: string[];
117
+ extremes: {
118
+ [Key: string]: IExtrema;
119
+ };
120
+ };
121
+
122
+ makeZeroes(): IZero[];
123
+
124
+ makeSigns(): ITableOfSigns;
125
+
126
+ makeAsymptotes(): IAsymptote[];
127
+
128
+ makeDerivative(): ITableOfSigns;
129
+
130
+ makeVariation(): ITableOfSigns;
131
+
132
+ private _makeTexFromTableOfSigns;
133
+ }
@@ -0,0 +1,275 @@
1
+ "use strict";
2
+ /**
3
+ * Rational polynom module contains everything necessary to handle rational polynoms.
4
+ * @module Polynom
5
+ */
6
+ Object.defineProperty(exports, "__esModule", {value: true});
7
+ exports.Study = exports.TABLE_OF_SIGNS = exports.FUNCTION_EXTREMA = exports.ASYMPTOTE = exports.ZEROTYPE = void 0;
8
+ const fraction_1 = require("../coefficients/fraction");
9
+ var ZEROTYPE;
10
+ (function (ZEROTYPE) {
11
+ ZEROTYPE["ZERO"] = "z";
12
+ ZEROTYPE["DEFENCE"] = "d";
13
+ ZEROTYPE["NOTHING"] = "t";
14
+ })(ZEROTYPE = exports.ZEROTYPE || (exports.ZEROTYPE = {}));
15
+ var ASYMPTOTE;
16
+ (function (ASYMPTOTE) {
17
+ ASYMPTOTE["VERTICAL"] = "av";
18
+ ASYMPTOTE["HORIZONTAL"] = "ah";
19
+ ASYMPTOTE["SLOPE"] = "ao";
20
+ ASYMPTOTE["HOLE"] = "hole";
21
+ })(ASYMPTOTE = exports.ASYMPTOTE || (exports.ASYMPTOTE = {}));
22
+ var FUNCTION_EXTREMA;
23
+ (function (FUNCTION_EXTREMA) {
24
+ FUNCTION_EXTREMA["MIN"] = "min";
25
+ FUNCTION_EXTREMA["MAX"] = "max";
26
+ FUNCTION_EXTREMA["FLAT"] = "flat";
27
+ FUNCTION_EXTREMA["NOTHING"] = "";
28
+ })(FUNCTION_EXTREMA = exports.FUNCTION_EXTREMA || (exports.FUNCTION_EXTREMA = {}));
29
+ var TABLE_OF_SIGNS;
30
+ (function (TABLE_OF_SIGNS) {
31
+ TABLE_OF_SIGNS[TABLE_OF_SIGNS["DEFAULT"] = 0] = "DEFAULT";
32
+ TABLE_OF_SIGNS[TABLE_OF_SIGNS["GROWS"] = 1] = "GROWS";
33
+ TABLE_OF_SIGNS[TABLE_OF_SIGNS["VARIATIONS"] = 2] = "VARIATIONS";
34
+ })(TABLE_OF_SIGNS = exports.TABLE_OF_SIGNS || (exports.TABLE_OF_SIGNS = {}));
35
+ /**
36
+ * The study class is a "function study" class that will get:
37
+ * fx : get the function
38
+ * domain : string
39
+ * zeroes : Object (tex, IZero)
40
+ * signs : table of signs + tex output using tkz-tab
41
+ * av : vertical asymptotic
42
+ * ah : horizontal asymptotic
43
+ * ao : obliques
44
+ * deltaX : position relative
45
+ * dx : derivative
46
+ * grows : growing table + tex output using tkz-tab
47
+ * ddx : dérivée seconde
48
+ * variations : variation table + tex output using tkz-tab
49
+ */
50
+ class Study {
51
+ constructor(fx) {
52
+ this.makeStudy = () => {
53
+ this._zeroes = this.makeZeroes();
54
+ this._signs = this.makeSigns();
55
+ this._asymptotes = this.makeAsymptotes();
56
+ this._derivative = this.makeDerivative();
57
+ this._variations = this.makeVariation();
58
+ };
59
+ this.indexOfZero = (zeroes, zero) => {
60
+ for (let i = 0; i < zeroes.length; i++) {
61
+ if (zeroes[i].tex === zero.tex) {
62
+ return i;
63
+ }
64
+ }
65
+ return -1;
66
+ };
67
+ this.makeOneLineForSigns = (factor, zeroes, zeroSign) => {
68
+ let oneLine = [], currentZero = factor.getZeroes().map(x => x.tex);
69
+ // First +/- sign, before the first zero
70
+ oneLine.push('');
71
+ if (factor.degree().isZero()) {
72
+ oneLine.push(factor.monoms[0].coefficient.sign() === 1 ? '+' : '-');
73
+ } else {
74
+ oneLine.push(factor.evaluate(zeroes[0].value - 1).sign() === 1 ? '+' : '-');
75
+ }
76
+ for (let i = 0; i < zeroes.length; i++) {
77
+ // Add the zero if it's the current one
78
+ oneLine.push(currentZero.includes(zeroes[i].tex) ? zeroSign : ZEROTYPE.NOTHING);
79
+ // + / - sign after the current zero
80
+ if (i < zeroes.length - 1) {
81
+ oneLine.push(factor.evaluate((zeroes[i].value + zeroes[i + 1].value) / 2).sign() === 1 ? '+' : '-');
82
+ } else if (i === zeroes.length - 1) {
83
+ oneLine.push(factor.evaluate(zeroes[i].value + 1).sign() === 1 ? '+' : '-');
84
+ }
85
+ }
86
+ oneLine.push('');
87
+ return oneLine;
88
+ };
89
+ this.makeSignsResult = (signs) => {
90
+ // Initialize the result line with the first line of the signs table
91
+ let resultLine = signs[0].map((x, index) => {
92
+ if (index === 0 || index === signs[0].length - 1) {
93
+ return '';
94
+ }
95
+ if (index % 2 === 0) {
96
+ return 't';
97
+ }
98
+ return '+';
99
+ });
100
+ // Go through each lines (except the first)
101
+ for (let current of signs) {
102
+ for (let i = 0; i < current.length; i++) {
103
+ if (i % 2 === 0) {
104
+ // t, z or d
105
+ if (resultLine[i] === 'd') {
106
+ continue;
107
+ }
108
+ if (current[i] !== 't') {
109
+ resultLine[i] = current[i];
110
+ }
111
+ } else {
112
+ // + or -
113
+ if (current[i] === '-') {
114
+ resultLine[i] = resultLine[i] === '+' ? '-' : '+';
115
+ }
116
+ }
117
+ }
118
+ }
119
+ return resultLine;
120
+ };
121
+ this.makeGrowsResult = (fx, tos) => {
122
+ // Use the last line (=> resultLine) to grab the necessary information
123
+ let signsAsArray = Object.values(tos.signs), resultLine = signsAsArray[signsAsArray.length - 1],
124
+ growsLine = [], extremes = {}, zeroes = tos.zeroes;
125
+ // Get the extremes
126
+ for (let i = 0; i < zeroes.length; i++) {
127
+ // Get the corresponding item in the resultLine.
128
+ let pos = 2 * i + 2;
129
+ if (resultLine[pos] === 'z') {
130
+ // It's a zero. Get the coordinates
131
+ let x, y, zero = zeroes[i].exact, pt, xTex, yTex, pointType;
132
+ if (zero instanceof fraction_1.Fraction) {
133
+ let value = zero, evalY = fx.evaluate(value);
134
+ x = zero.value;
135
+ y = evalY.value;
136
+ xTex = zero.tex;
137
+ yTex = evalY.tex;
138
+ } else {
139
+ x = zeroes[i].value;
140
+ y = fx.evaluate(zeroes[i].value).value;
141
+ xTex = x.toFixed(2);
142
+ yTex = y.toFixed(2);
143
+ }
144
+ // Determine the type of the zero.
145
+ if (resultLine[pos - 1] === resultLine[pos + 1]) {
146
+ pointType = FUNCTION_EXTREMA.FLAT;
147
+ } else if (resultLine[pos - 1] === '+') {
148
+ pointType = FUNCTION_EXTREMA.MAX;
149
+ } else {
150
+ pointType = FUNCTION_EXTREMA.MIN;
151
+ }
152
+ // Add the point to the list
153
+ extremes[zeroes[i].tex] = {
154
+ type: pointType,
155
+ tex: {x: xTex, y: yTex},
156
+ value: {x, y}
157
+ };
158
+ }
159
+ }
160
+ // Create the grows line, based on tkz-tab
161
+ // \tkzTabLine{ , + , z , - , d , - , z , + , }
162
+ // \tkzTabVar{ -/ , +/$3$ , -D+/ , -/$1$ , +/ }
163
+ growsLine.push(resultLine[1] === '+' ? '-/' : '+/');
164
+ for (let i = 1; i < resultLine.length - 1; i++) {
165
+ if (resultLine[i] === "z") {
166
+ let extr = extremes[zeroes[(i - 2) / 2].tex];
167
+ growsLine.push(`${resultLine[i - 1]}/\\(${extr.type}(${extr.tex.x};${extr.tex.y})\\)`);
168
+ } else if (resultLine[i] === 'd') {
169
+ growsLine.push(`${resultLine[i - 1]}D${resultLine[i + 1] === '+' ? '-' : '+'}/`);
170
+ }
171
+ }
172
+ growsLine.push(`${resultLine[resultLine.length - 2]}/`);
173
+ return {growsLine, extremes};
174
+ };
175
+ this.makeVariationsResult = (fx, tos) => {
176
+ // TODO: make variations result is not yet implemented.
177
+ let extremes = {}, varsLine = [];
178
+ return {varsLine, extremes};
179
+ };
180
+ this._makeTexFromTableOfSigns = (tos) => {
181
+ let factors = tos.factors.map(x => `\\(${x.tex}\\)/1`), factorsFx = "\\(fx\\)/1.2", zeroes = tos.zeroes;
182
+ // Add the last lines "label"
183
+ if (tos.type === TABLE_OF_SIGNS.GROWS) {
184
+ factorsFx = "\\(f'(x)\\)/1.2,\\(f(x)\\)/2";
185
+ } else if (tos.type === TABLE_OF_SIGNS.VARIATIONS) {
186
+ factorsFx = "\\(f''(x)\\)/1.2,\\(f(x)\\)/2";
187
+ }
188
+ // Create the tikzPicture header
189
+ let tex = `\\begin{tikzpicture}
190
+ \\tkzTabInit[lgt=3,espcl=2,deltacl=0]{/1.2,${factors.join(',')},/.1,${factorsFx} }{{\\scriptsize \\hspace{1cm} \\(-\\infty\\)},\\(${zeroes.map(x => x.tex).join('\\),\\(')}\\),{\\scriptsize \\hspace{-1cm} \\(+\\infty\\)}}`;
191
+ let pos;
192
+ for (pos = 0; pos < tos.factors.length; pos++) {
193
+ tex += (`\n\\tkzTabLine{${tos.signs[pos].join(',')}}`);
194
+ }
195
+ // Add the result line
196
+ tex += (`\n\\tkzTabLine{${tos.signs[pos].join(',')}}`);
197
+ // Add the grows / vars line
198
+ if (tos.type === TABLE_OF_SIGNS.GROWS) {
199
+ tex += (`\n\\tkzTabVar{${tos.signs[pos + 1].join(',')}}`);
200
+ } else if (tos.type === TABLE_OF_SIGNS.VARIATIONS) {
201
+ // TODO: Check variations table for as tex
202
+ tex += (`\n\\tkzTabVar{${tos.signs[pos + 1].join(',')}}`);
203
+ }
204
+ tex += `\n\\end{tikzpicture}`;
205
+ return tex;
206
+ };
207
+ this.fx = fx;
208
+ this.makeStudy();
209
+ return this;
210
+ }
211
+ get zeroes() {
212
+ return this._zeroes;
213
+ }
214
+ get domain() {
215
+ return this.fx.domain();
216
+ }
217
+ get signs() {
218
+ return this._signs;
219
+ }
220
+ get asymptotes() {
221
+ return this._asymptotes;
222
+ }
223
+ get derivative() {
224
+ return this._derivative;
225
+ }
226
+ get tex() {
227
+ return this._makeTexFromTableOfSigns(this._signs);
228
+ }
229
+ get texGrows() {
230
+ return this._makeTexFromTableOfSigns(this._derivative);
231
+ }
232
+ get texVariations() {
233
+ return this._makeTexFromTableOfSigns(this._variations);
234
+ }
235
+ makeZeroes() {
236
+ return [];
237
+ }
238
+ ;
239
+ makeSigns() {
240
+ return {
241
+ type: TABLE_OF_SIGNS.DEFAULT,
242
+ fx: null,
243
+ factors: [],
244
+ zeroes: [],
245
+ signs: [],
246
+ extremes: {}
247
+ };
248
+ }
249
+ ;
250
+ makeAsymptotes() {
251
+ return [];
252
+ }
253
+ makeDerivative() {
254
+ return {
255
+ type: TABLE_OF_SIGNS.GROWS,
256
+ fx: null,
257
+ factors: [],
258
+ zeroes: [],
259
+ signs: [],
260
+ extremes: {}
261
+ };
262
+ }
263
+ makeVariation() {
264
+ return {
265
+ type: TABLE_OF_SIGNS.VARIATIONS,
266
+ fx: null,
267
+ factors: [],
268
+ zeroes: [],
269
+ signs: [],
270
+ extremes: {}
271
+ };
272
+ }
273
+ }
274
+ exports.Study = Study;
275
+ //# sourceMappingURL=study.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"study.js","sourceRoot":"","sources":["../../../src/maths/algebra/study.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pimath",
3
- "version": "0.0.60",
3
+ "version": "0.0.63",
4
4
  "description": "A math library for teacher :)",
5
5
  "scripts": {
6
6
  "test": "mocha -r ts-node/register 'tests/**/*.test.ts'",
@@ -325,7 +325,6 @@ export class LinearSystem {
325
325
  let str: string = '';
326
326
 
327
327
  for (let E of this._equations) {
328
- console.log(E.tex);
329
328
  str += `${E.tex}\\n}`;
330
329
  }
331
330
 
@@ -808,6 +808,9 @@ export class Monom {
808
808
  }
809
809
 
810
810
  if (typeof values === 'object') {
811
+ if(this.variables.length===0){
812
+ return this.coefficient
813
+ }
811
814
  for (let L in this._literal) {
812
815
  if (values[L] === undefined) {
813
816
  return new Fraction().zero();
@@ -973,4 +976,20 @@ export class Monom {
973
976
  return true;
974
977
  };
975
978
 
979
+ isDivisible = (div:Monom):boolean => {
980
+ // For all variables (letters), the current monom must have a degree higher than the divider
981
+ if(div.degree().isStrictlyPositive()) {
982
+ for (let letter of div.variables) {
983
+ if (!this.degree(letter).geq(div.degree(letter))) {
984
+ return false
985
+ }
986
+ }
987
+ }
988
+
989
+ // If the coefficient is rational, we suppose we don't need to check the division by the coefficient.
990
+ if(this.coefficient.isRational() || div.coefficient.isRational()){return true}
991
+
992
+ return this.coefficient.clone().divide(div.coefficient).isRelative()
993
+ }
994
+
976
995
  }