subtract.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import { factory } from '../../utils/factory.js';
  2. import { createMatAlgo01xDSid } from '../../type/matrix/utils/matAlgo01xDSid.js';
  3. import { createMatAlgo03xDSf } from '../../type/matrix/utils/matAlgo03xDSf.js';
  4. import { createMatAlgo05xSfSf } from '../../type/matrix/utils/matAlgo05xSfSf.js';
  5. import { createMatAlgo10xSids } from '../../type/matrix/utils/matAlgo10xSids.js';
  6. import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
  7. import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
  8. var name = 'subtract';
  9. var dependencies = ['typed', 'matrix', 'equalScalar', 'addScalar', 'unaryMinus', 'DenseMatrix', 'concat'];
  10. export var createSubtract = /* #__PURE__ */factory(name, dependencies, _ref => {
  11. var {
  12. typed,
  13. matrix,
  14. equalScalar,
  15. addScalar,
  16. unaryMinus,
  17. DenseMatrix,
  18. concat
  19. } = _ref;
  20. // TODO: split function subtract in two: subtract and subtractScalar
  21. var matAlgo01xDSid = createMatAlgo01xDSid({
  22. typed
  23. });
  24. var matAlgo03xDSf = createMatAlgo03xDSf({
  25. typed
  26. });
  27. var matAlgo05xSfSf = createMatAlgo05xSfSf({
  28. typed,
  29. equalScalar
  30. });
  31. var matAlgo10xSids = createMatAlgo10xSids({
  32. typed,
  33. DenseMatrix
  34. });
  35. var matAlgo12xSfs = createMatAlgo12xSfs({
  36. typed,
  37. DenseMatrix
  38. });
  39. var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
  40. typed,
  41. matrix,
  42. concat
  43. });
  44. /**
  45. * Subtract two values, `x - y`.
  46. * For matrices, the function is evaluated element wise.
  47. *
  48. * Syntax:
  49. *
  50. * math.subtract(x, y)
  51. *
  52. * Examples:
  53. *
  54. * math.subtract(5.3, 2) // returns number 3.3
  55. *
  56. * const a = math.complex(2, 3)
  57. * const b = math.complex(4, 1)
  58. * math.subtract(a, b) // returns Complex -2 + 2i
  59. *
  60. * math.subtract([5, 7, 4], 4) // returns Array [1, 3, 0]
  61. *
  62. * const c = math.unit('2.1 km')
  63. * const d = math.unit('500m')
  64. * math.subtract(c, d) // returns Unit 1.6 km
  65. *
  66. * See also:
  67. *
  68. * add
  69. *
  70. * @param {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} x
  71. * Initial value
  72. * @param {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} y
  73. * Value to subtract from `x`
  74. * @return {number | BigNumber | Fraction | Complex | Unit | Array | Matrix}
  75. * Subtraction of `x` and `y`
  76. */
  77. return typed(name, {
  78. 'number, number': (x, y) => x - y,
  79. 'Complex, Complex': (x, y) => x.sub(y),
  80. 'BigNumber, BigNumber': (x, y) => x.minus(y),
  81. 'Fraction, Fraction': (x, y) => x.sub(y),
  82. 'Unit, Unit': typed.referToSelf(self => (x, y) => {
  83. if (x.value === null) {
  84. throw new Error('Parameter x contains a unit with undefined value');
  85. }
  86. if (y.value === null) {
  87. throw new Error('Parameter y contains a unit with undefined value');
  88. }
  89. if (!x.equalBase(y)) {
  90. throw new Error('Units do not match');
  91. }
  92. var res = x.clone();
  93. res.value = typed.find(self, [res.valueType(), y.valueType()])(res.value, y.value);
  94. res.fixPrefix = false;
  95. return res;
  96. })
  97. }, matrixAlgorithmSuite({
  98. SS: matAlgo05xSfSf,
  99. DS: matAlgo01xDSid,
  100. SD: matAlgo03xDSf,
  101. Ss: matAlgo12xSfs,
  102. sS: matAlgo10xSids
  103. }));
  104. });