mathjs 11.8.1 → 11.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. package/HISTORY.md +25 -0
  2. package/lib/browser/math.js +1 -1
  3. package/lib/browser/math.js.LICENSE.txt +2 -2
  4. package/lib/browser/math.js.map +1 -1
  5. package/lib/cjs/entry/dependenciesAny/dependenciesFreqz.generated.js +28 -0
  6. package/lib/cjs/entry/dependenciesAny/dependenciesRange.generated.js +4 -0
  7. package/lib/cjs/entry/dependenciesAny/dependenciesRangeTransform.generated.js +4 -0
  8. package/lib/cjs/entry/dependenciesAny/dependenciesSolveODE.generated.js +46 -0
  9. package/lib/cjs/entry/dependenciesAny/dependenciesZpk2tf.generated.js +26 -0
  10. package/lib/cjs/entry/dependenciesAny.generated.js +21 -0
  11. package/lib/cjs/entry/dependenciesNumber/dependenciesRange.generated.js +4 -0
  12. package/lib/cjs/entry/dependenciesNumber/dependenciesRangeTransform.generated.js +4 -0
  13. package/lib/cjs/entry/impureFunctionsAny.generated.js +35 -30
  14. package/lib/cjs/entry/impureFunctionsNumber.generated.js +2 -0
  15. package/lib/cjs/entry/pureFunctionsAny.generated.js +82 -45
  16. package/lib/cjs/entry/pureFunctionsNumber.generated.js +2 -0
  17. package/lib/cjs/expression/embeddedDocs/core/typed.js +1 -1
  18. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +11 -3
  19. package/lib/cjs/expression/embeddedDocs/function/{matrix → algebra}/lyap.js +2 -2
  20. package/lib/cjs/expression/embeddedDocs/function/algebra/polynomialRoot.js +1 -1
  21. package/lib/cjs/expression/embeddedDocs/function/{matrix → algebra}/schur.js +2 -2
  22. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyConstant.js +1 -1
  23. package/lib/cjs/expression/embeddedDocs/function/{matrix → algebra}/sylvester.js +2 -2
  24. package/lib/cjs/expression/embeddedDocs/function/arithmetic/invmod.js +1 -1
  25. package/lib/cjs/expression/embeddedDocs/function/expression/evaluate.js +2 -2
  26. package/lib/cjs/expression/embeddedDocs/function/matrix/diff.js +1 -1
  27. package/lib/cjs/expression/embeddedDocs/function/matrix/range.js +1 -1
  28. package/lib/cjs/expression/embeddedDocs/function/numeric/solveODE.js +15 -0
  29. package/lib/cjs/expression/embeddedDocs/function/signal/freqz.js +15 -0
  30. package/lib/cjs/expression/embeddedDocs/function/signal/zpk2tf.js +15 -0
  31. package/lib/cjs/expression/embeddedDocs/function/utils/numeric.js +1 -1
  32. package/lib/cjs/expression/transform/range.transform.js +7 -3
  33. package/lib/cjs/factoriesAny.js +21 -0
  34. package/lib/cjs/function/algebra/simplify.js +3 -0
  35. package/lib/cjs/function/matrix/range.js +34 -110
  36. package/lib/cjs/function/numeric/solveODE.js +315 -0
  37. package/lib/cjs/function/signal/freqz.js +117 -0
  38. package/lib/cjs/function/signal/zpk2tf.js +95 -0
  39. package/lib/cjs/header.js +2 -2
  40. package/lib/cjs/type/unit/Unit.js +15 -13
  41. package/lib/cjs/version.js +1 -1
  42. package/lib/esm/entry/dependenciesAny/dependenciesFreqz.generated.js +20 -0
  43. package/lib/esm/entry/dependenciesAny/dependenciesRange.generated.js +4 -0
  44. package/lib/esm/entry/dependenciesAny/dependenciesRangeTransform.generated.js +4 -0
  45. package/lib/esm/entry/dependenciesAny/dependenciesSolveODE.generated.js +38 -0
  46. package/lib/esm/entry/dependenciesAny/dependenciesZpk2tf.generated.js +18 -0
  47. package/lib/esm/entry/dependenciesAny.generated.js +3 -0
  48. package/lib/esm/entry/dependenciesNumber/dependenciesRange.generated.js +4 -0
  49. package/lib/esm/entry/dependenciesNumber/dependenciesRangeTransform.generated.js +4 -0
  50. package/lib/esm/entry/impureFunctionsAny.generated.js +34 -29
  51. package/lib/esm/entry/impureFunctionsNumber.generated.js +2 -0
  52. package/lib/esm/entry/pureFunctionsAny.generated.js +70 -36
  53. package/lib/esm/entry/pureFunctionsNumber.generated.js +2 -0
  54. package/lib/esm/expression/embeddedDocs/core/typed.js +1 -1
  55. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +11 -3
  56. package/lib/esm/expression/embeddedDocs/function/{matrix → algebra}/lyap.js +2 -2
  57. package/lib/esm/expression/embeddedDocs/function/algebra/polynomialRoot.js +1 -1
  58. package/lib/esm/expression/embeddedDocs/function/{matrix → algebra}/schur.js +2 -2
  59. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyConstant.js +1 -1
  60. package/lib/esm/expression/embeddedDocs/function/{matrix → algebra}/sylvester.js +2 -2
  61. package/lib/esm/expression/embeddedDocs/function/arithmetic/invmod.js +1 -1
  62. package/lib/esm/expression/embeddedDocs/function/expression/evaluate.js +2 -2
  63. package/lib/esm/expression/embeddedDocs/function/matrix/diff.js +1 -1
  64. package/lib/esm/expression/embeddedDocs/function/matrix/range.js +1 -1
  65. package/lib/esm/expression/embeddedDocs/function/numeric/solveODE.js +8 -0
  66. package/lib/esm/expression/embeddedDocs/function/signal/freqz.js +8 -0
  67. package/lib/esm/expression/embeddedDocs/function/signal/zpk2tf.js +8 -0
  68. package/lib/esm/expression/embeddedDocs/function/utils/numeric.js +1 -1
  69. package/lib/esm/expression/transform/range.transform.js +7 -3
  70. package/lib/esm/factoriesAny.js +3 -0
  71. package/lib/esm/function/algebra/simplify.js +3 -0
  72. package/lib/esm/function/matrix/range.js +34 -110
  73. package/lib/esm/function/numeric/solveODE.js +284 -0
  74. package/lib/esm/function/signal/freqz.js +115 -0
  75. package/lib/esm/function/signal/zpk2tf.js +82 -0
  76. package/lib/esm/type/unit/Unit.js +15 -13
  77. package/lib/esm/version.js +1 -1
  78. package/package.json +6 -6
  79. package/types/index.d.ts +194 -50
@@ -0,0 +1,115 @@
1
+ import { factory } from '../../utils/factory.js';
2
+ var name = 'freqz';
3
+ var dependencies = ['typed', 'add', 'multiply', 'Complex', 'divide', 'matrix'];
4
+ export var createFreqz = /* #__PURE__ */factory(name, dependencies, _ref => {
5
+ var {
6
+ typed,
7
+ add,
8
+ multiply,
9
+ Complex,
10
+ divide,
11
+ matrix
12
+ } = _ref;
13
+ /**
14
+ * Calculates the frequency response of a filter given its numerator and denominator coefficients.
15
+ *
16
+ * Syntax:
17
+ * math.freqz(b, a)
18
+ * math.freqz(b, a, w)
19
+ *
20
+ * Examples:
21
+ * math.freqz([1, 2], [1, 2, 3], 4) // returns { h: [0.5 + 0i, 0.4768589245763655 + 0.2861153547458193i, 0.25000000000000006 + 0.75i, -0.770976571635189 + 0.4625859429811135i], w: [0, 0.7853981633974483, 1.5707963267948966, 2.356194490192345 ] }
22
+ * math.freqz([1, 2], [1, 2, 3], [0, 1]) // returns { h: [0.5 + 0i, 0.45436781 + 0.38598051i], w: [0, 1] }
23
+ *
24
+ * See also:
25
+ * zpk2tf
26
+ *
27
+ * @param {Array.<number>} b The numerator coefficients of the filter.
28
+ * @param {Array.<number>} a The denominator coefficients of the filter.
29
+ * @param {Array.<number>} [w] A vector of frequencies (in radians/sample) at which the frequency response is to be computed or the number of points to compute (if a number is not provided, the default is 512 points)
30
+ * @returns {Object} An object with two properties: h, a vector containing the complex frequency response, and w, a vector containing the normalized frequencies (in radians/sample) at which the response was computed.
31
+ *
32
+ *
33
+ */
34
+ return typed(name, {
35
+ 'Array, Array': function ArrayArray(b, a) {
36
+ var w = createBins(512);
37
+ return _freqz(b, a, w);
38
+ },
39
+ 'Array, Array, Array': function ArrayArrayArray(b, a, w) {
40
+ return _freqz(b, a, w);
41
+ },
42
+ 'Array, Array, number': function ArrayArrayNumber(b, a, w) {
43
+ if (w < 0) {
44
+ throw new Error('w must be a positive number');
45
+ }
46
+ var w2 = createBins(w);
47
+ return _freqz(b, a, w2);
48
+ },
49
+ 'Matrix, Matrix': function MatrixMatrix(b, a) {
50
+ // console.log('here')
51
+ var _w = createBins(512);
52
+ var {
53
+ w,
54
+ h
55
+ } = _freqz(b.valueOf(), a.valueOf(), _w);
56
+ return {
57
+ w: matrix(w),
58
+ h: matrix(h)
59
+ };
60
+ },
61
+ 'Matrix, Matrix, Matrix': function MatrixMatrixMatrix(b, a, w) {
62
+ var {
63
+ h
64
+ } = _freqz(b.valueOf(), a.valueOf(), w.valueOf());
65
+ return {
66
+ h: matrix(h),
67
+ w: matrix(w)
68
+ };
69
+ },
70
+ 'Matrix, Matrix, number': function MatrixMatrixNumber(b, a, w) {
71
+ if (w < 0) {
72
+ throw new Error('w must be a positive number');
73
+ }
74
+ var _w = createBins(w);
75
+ var {
76
+ h
77
+ } = _freqz(b.valueOf(), a.valueOf(), _w);
78
+ return {
79
+ h: matrix(h),
80
+ w: matrix(_w)
81
+ };
82
+ }
83
+ });
84
+ function _freqz(b, a, w) {
85
+ var num = [];
86
+ var den = [];
87
+ for (var i = 0; i < w.length; i++) {
88
+ var sumNum = Complex(0, 0);
89
+ var sumDen = Complex(0, 0);
90
+ for (var j = 0; j < b.length; j++) {
91
+ sumNum = add(sumNum, multiply(b[j], Complex(Math.cos(-j * w[i]), Math.sin(-j * w[i]))));
92
+ }
93
+ for (var _j = 0; _j < a.length; _j++) {
94
+ sumDen = add(sumDen, multiply(a[_j], Complex(Math.cos(-_j * w[i]), Math.sin(-_j * w[i]))));
95
+ }
96
+ num.push(sumNum);
97
+ den.push(sumDen);
98
+ }
99
+ var h = [];
100
+ for (var _i = 0; _i < num.length; _i++) {
101
+ h.push(divide(num[_i], den[_i]));
102
+ }
103
+ return {
104
+ h,
105
+ w
106
+ };
107
+ }
108
+ function createBins(n) {
109
+ var bins = [];
110
+ for (var i = 0; i < n; i++) {
111
+ bins.push(i / n * Math.PI);
112
+ }
113
+ return bins;
114
+ }
115
+ });
@@ -0,0 +1,82 @@
1
+ import { factory } from '../../utils/factory.js';
2
+ var name = 'zpk2tf';
3
+ var dependencies = ['typed', 'add', 'multiply', 'Complex', 'number'];
4
+ export var createZpk2tf = /* #__PURE__ */factory(name, dependencies, _ref => {
5
+ var {
6
+ typed,
7
+ add,
8
+ multiply,
9
+ Complex,
10
+ number
11
+ } = _ref;
12
+ /**
13
+ * Compute the transfer function of a zero-pole-gain model.
14
+ *
15
+ * Syntax:
16
+ * math.zpk2tf(z, p, k)
17
+ *
18
+ * Examples:
19
+ * math.zpk2tf([1, 2], [-1, -2], 1) // returns [[1, -3, 2], [1, 3, 2]]
20
+ *
21
+ * See also:
22
+ * freqz
23
+ *
24
+ * @param {Array} z Array of zeros values
25
+ * @param {Array} p Array of poles values
26
+ * @param {number} k Gain value
27
+ * @return {Array} Two dimensional array containing the numerator (first row) and denominator (second row) polynomials
28
+ *
29
+ */
30
+ return typed(name, {
31
+ 'Array,Array,number': function ArrayArrayNumber(z, p, k) {
32
+ return _zpk2tf(z, p, k);
33
+ },
34
+ 'Array,Array': function ArrayArray(z, p) {
35
+ return _zpk2tf(z, p, 1);
36
+ },
37
+ 'Matrix,Matrix,number': function MatrixMatrixNumber(z, p, k) {
38
+ return _zpk2tf(z.valueOf(), p.valueOf(), k);
39
+ },
40
+ 'Matrix,Matrix': function MatrixMatrix(z, p) {
41
+ return _zpk2tf(z.valueOf(), p.valueOf(), 1);
42
+ }
43
+ });
44
+ function _zpk2tf(z, p, k) {
45
+ // if z is bignumber, convert it to number
46
+ if (z.some(el => el.type === 'BigNumber')) {
47
+ z = z.map(el => number(el));
48
+ }
49
+ // if p is bignumber, convert it to number
50
+ if (p.some(el => el.type === 'BigNumber')) {
51
+ p = p.map(el => number(el));
52
+ }
53
+ var num = [Complex(1, 0)];
54
+ var den = [Complex(1, 0)];
55
+ for (var i = 0; i < z.length; i++) {
56
+ var zero = z[i];
57
+ if (typeof zero === 'number') zero = Complex(zero, 0);
58
+ num = _multiply(num, [Complex(1, 0), Complex(-zero.re, -zero.im)]);
59
+ }
60
+ for (var _i = 0; _i < p.length; _i++) {
61
+ var pole = p[_i];
62
+ if (typeof pole === 'number') pole = Complex(pole, 0);
63
+ den = _multiply(den, [Complex(1, 0), Complex(-pole.re, -pole.im)]);
64
+ }
65
+ for (var _i2 = 0; _i2 < num.length; _i2++) {
66
+ num[_i2] = multiply(num[_i2], k);
67
+ }
68
+ return [num, den];
69
+ }
70
+ function _multiply(a, b) {
71
+ var c = [];
72
+ for (var i = 0; i < a.length + b.length - 1; i++) {
73
+ c[i] = Complex(0, 0);
74
+ for (var j = 0; j < a.length; j++) {
75
+ if (i - j >= 0 && i - j < b.length) {
76
+ c[i] = add(c[i], multiply(a[j], b[i - j]));
77
+ }
78
+ }
79
+ }
80
+ return c;
81
+ }
82
+ });
@@ -25,12 +25,12 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
25
25
  equal,
26
26
  isNumeric,
27
27
  format,
28
- number,
28
+ number: _number,
29
29
  Complex,
30
30
  BigNumber: _BigNumber,
31
31
  Fraction: _Fraction
32
32
  } = _ref;
33
- var toNumber = number;
33
+ var toNumber = _number;
34
34
  /**
35
35
  * A unit can be constructed in the following ways:
36
36
  *
@@ -780,13 +780,13 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
780
780
  /* Need to adjust value by difference in offset to convert */
781
781
  var convert = Unit._getNumberConverter(typeOf(value)); // convert to Fraction or BigNumber if needed
782
782
 
783
- var thisUnitValue = convert(this.units[0].unit.value);
784
- var thisNominalOffset = convert(this.units[0].unit.offset);
783
+ var thisUnitValue = this.units[0].unit.value;
784
+ var thisNominalOffset = this.units[0].unit.offset;
785
785
  var thisUnitOffset = multiplyScalar(thisUnitValue, thisNominalOffset);
786
- var otherUnitValue = convert(other.units[0].unit.value);
787
- var otherNominalOffset = convert(other.units[0].unit.offset);
786
+ var otherUnitValue = other.units[0].unit.value;
787
+ var otherNominalOffset = other.units[0].unit.offset;
788
788
  var otherUnitOffset = multiplyScalar(otherUnitValue, otherNominalOffset);
789
- other.value = subtract(addScalar(value, thisUnitOffset), otherUnitOffset);
789
+ other.value = addScalar(value, convert(subtract(thisUnitOffset, otherUnitOffset)));
790
790
  }
791
791
  other.fixPrefix = true;
792
792
  other.skipAutomaticSimplification = true;
@@ -2734,8 +2734,8 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
2734
2734
  },
2735
2735
  // Temperature
2736
2736
  // K(C) = °C + 273.15
2737
- // K(F) = (°F + 459.67) / 1.8
2738
- // K(R) = °R / 1.8
2737
+ // K(F) = (°F + 459.67) * (5 / 9)
2738
+ // K(R) = °R * (5 / 9)
2739
2739
  K: {
2740
2740
  name: 'K',
2741
2741
  base: BASE_UNITS.TEMPERATURE,
@@ -2754,14 +2754,14 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
2754
2754
  name: 'degF',
2755
2755
  base: BASE_UNITS.TEMPERATURE,
2756
2756
  prefixes: PREFIXES.SHORT,
2757
- value: 1 / 1.8,
2757
+ value: new _Fraction(5, 9),
2758
2758
  offset: 459.67
2759
2759
  },
2760
2760
  degR: {
2761
2761
  name: 'degR',
2762
2762
  base: BASE_UNITS.TEMPERATURE,
2763
2763
  prefixes: PREFIXES.SHORT,
2764
- value: 1 / 1.8,
2764
+ value: new _Fraction(5, 9),
2765
2765
  offset: 0
2766
2766
  },
2767
2767
  kelvin: {
@@ -2782,14 +2782,14 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
2782
2782
  name: 'fahrenheit',
2783
2783
  base: BASE_UNITS.TEMPERATURE,
2784
2784
  prefixes: PREFIXES.LONG,
2785
- value: 1 / 1.8,
2785
+ value: new _Fraction(5, 9),
2786
2786
  offset: 459.67
2787
2787
  },
2788
2788
  rankine: {
2789
2789
  name: 'rankine',
2790
2790
  base: BASE_UNITS.TEMPERATURE,
2791
2791
  prefixes: PREFIXES.LONG,
2792
- value: 1 / 1.8,
2792
+ value: new _Fraction(5, 9),
2793
2793
  offset: 0
2794
2794
  },
2795
2795
  // amount of substance
@@ -3510,6 +3510,7 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
3510
3510
  */
3511
3511
  Unit.typeConverters = {
3512
3512
  BigNumber: function BigNumber(x) {
3513
+ if (x !== null && x !== void 0 && x.isFraction) return new _BigNumber(x.n).div(x.d).times(x.s);
3513
3514
  return new _BigNumber(x + ''); // stringify to prevent constructor error
3514
3515
  },
3515
3516
 
@@ -3520,6 +3521,7 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
3520
3521
  return x;
3521
3522
  },
3522
3523
  number: function number(x) {
3524
+ if (x !== null && x !== void 0 && x.isFraction) return _number(x);
3523
3525
  return x;
3524
3526
  }
3525
3527
  };
@@ -1,3 +1,3 @@
1
- export var version = '11.8.1';
1
+ export var version = '11.9.0';
2
2
  // Note: This file is automatically generated when building math.js.
3
3
  // Changes made in this file will be overwritten.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mathjs",
3
- "version": "11.8.1",
3
+ "version": "11.9.0",
4
4
  "description": "Math.js is an extensive math library for JavaScript and Node.js. It features a flexible expression parser with support for symbolic computation, comes with a large set of built-in functions and constants, and offers an integrated solution to work with different data types like numbers, big numbers, complex numbers, fractions, units, and matrices.",
5
5
  "author": "Jos de Jong <wjosdejong@gmail.com> (https://github.com/josdejong)",
6
6
  "homepage": "https://mathjs.org",
@@ -43,17 +43,17 @@
43
43
  "@babel/register": "7.22.5",
44
44
  "@types/assert": "1.5.6",
45
45
  "@types/mocha": "10.0.1",
46
- "@typescript-eslint/eslint-plugin": "5.59.11",
47
- "@typescript-eslint/parser": "5.59.11",
46
+ "@typescript-eslint/eslint-plugin": "5.60.0",
47
+ "@typescript-eslint/parser": "5.60.0",
48
48
  "assert": "2.0.0",
49
49
  "babel-loader": "9.1.2",
50
50
  "benchmark": "2.1.4",
51
- "c8": "7.14.0",
51
+ "c8": "8.0.0",
52
52
  "codecov": "3.8.3",
53
53
  "core-js": "3.31.0",
54
54
  "del": "6.1.1",
55
55
  "dtslint": "4.2.1",
56
- "eslint": "8.42.0",
56
+ "eslint": "8.43.0",
57
57
  "eslint-config-prettier": "8.8.0",
58
58
  "eslint-config-standard": "17.1.0",
59
59
  "eslint-plugin-import": "2.27.5",
@@ -90,7 +90,7 @@
90
90
  "sylvester": "0.0.21",
91
91
  "ts-node": "10.9.1",
92
92
  "typescript": "5.1.3",
93
- "webpack": "5.86.0",
93
+ "webpack": "5.87.0",
94
94
  "zeros": "1.0.0"
95
95
  },
96
96
  "type": "module",