mathjs 10.5.2 → 10.5.3

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 (303) hide show
  1. package/HISTORY.md +8 -0
  2. package/lib/browser/math.js +3 -3
  3. package/lib/browser/math.js.map +1 -1
  4. package/lib/cjs/header.js +2 -2
  5. package/lib/cjs/version.js +1 -1
  6. package/lib/esm/version.js +1 -1
  7. package/package.json +6 -11
  8. package/docs/command_line_interface.md +0 -87
  9. package/docs/core/chaining.md +0 -41
  10. package/docs/core/configuration.md +0 -144
  11. package/docs/core/extension.md +0 -263
  12. package/docs/core/index.md +0 -21
  13. package/docs/core/serialization.md +0 -50
  14. package/docs/custom_bundling.md +0 -116
  15. package/docs/datatypes/bignumbers.md +0 -102
  16. package/docs/datatypes/complex_numbers.md +0 -168
  17. package/docs/datatypes/fractions.md +0 -75
  18. package/docs/datatypes/index.md +0 -67
  19. package/docs/datatypes/matrices.md +0 -375
  20. package/docs/datatypes/numbers.md +0 -106
  21. package/docs/datatypes/units.md +0 -444
  22. package/docs/expressions/algebra.md +0 -110
  23. package/docs/expressions/customization.md +0 -379
  24. package/docs/expressions/expression_trees.md +0 -710
  25. package/docs/expressions/html_classes.md +0 -38
  26. package/docs/expressions/index.md +0 -21
  27. package/docs/expressions/parsing.md +0 -224
  28. package/docs/expressions/security.md +0 -89
  29. package/docs/expressions/syntax.md +0 -706
  30. package/docs/getting_started.md +0 -124
  31. package/docs/index.md +0 -39
  32. package/docs/reference/classes/densematrix.md +0 -247
  33. package/docs/reference/classes/fibonacciheap.md +0 -70
  34. package/docs/reference/classes/matrixindex.md +0 -133
  35. package/docs/reference/classes/matrixrange.md +0 -158
  36. package/docs/reference/classes/resultset.md +0 -47
  37. package/docs/reference/classes/sparsematrix.md +0 -245
  38. package/docs/reference/classes/unit.md +0 -242
  39. package/docs/reference/classes.md +0 -86
  40. package/docs/reference/constants.md +0 -29
  41. package/docs/reference/functions/abs.md +0 -46
  42. package/docs/reference/functions/acos.md +0 -49
  43. package/docs/reference/functions/acosh.md +0 -47
  44. package/docs/reference/functions/acot.md +0 -48
  45. package/docs/reference/functions/acoth.md +0 -46
  46. package/docs/reference/functions/acsc.md +0 -49
  47. package/docs/reference/functions/acsch.md +0 -46
  48. package/docs/reference/functions/add.md +0 -59
  49. package/docs/reference/functions/and.md +0 -53
  50. package/docs/reference/functions/apply.md +0 -56
  51. package/docs/reference/functions/arg.md +0 -53
  52. package/docs/reference/functions/asec.md +0 -49
  53. package/docs/reference/functions/asech.md +0 -46
  54. package/docs/reference/functions/asin.md +0 -49
  55. package/docs/reference/functions/asinh.md +0 -46
  56. package/docs/reference/functions/atan.md +0 -49
  57. package/docs/reference/functions/atan2.md +0 -56
  58. package/docs/reference/functions/atanh.md +0 -46
  59. package/docs/reference/functions/bellNumbers.md +0 -45
  60. package/docs/reference/functions/bignumber.md +0 -47
  61. package/docs/reference/functions/bin.md +0 -45
  62. package/docs/reference/functions/bitAnd.md +0 -51
  63. package/docs/reference/functions/bitNot.md +0 -51
  64. package/docs/reference/functions/bitOr.md +0 -52
  65. package/docs/reference/functions/bitXor.md +0 -51
  66. package/docs/reference/functions/boolean.md +0 -50
  67. package/docs/reference/functions/catalan.md +0 -45
  68. package/docs/reference/functions/cbrt.md +0 -60
  69. package/docs/reference/functions/ceil.md +0 -63
  70. package/docs/reference/functions/chain.md +0 -54
  71. package/docs/reference/functions/clone.md +0 -43
  72. package/docs/reference/functions/column.md +0 -45
  73. package/docs/reference/functions/combinations.md +0 -49
  74. package/docs/reference/functions/combinationsWithRep.md +0 -49
  75. package/docs/reference/functions/compare.md +0 -67
  76. package/docs/reference/functions/compareNatural.md +0 -92
  77. package/docs/reference/functions/compareText.md +0 -54
  78. package/docs/reference/functions/compile.md +0 -56
  79. package/docs/reference/functions/complex.md +0 -17
  80. package/docs/reference/functions/composition.md +0 -46
  81. package/docs/reference/functions/concat.md +0 -56
  82. package/docs/reference/functions/config.md +0 -44
  83. package/docs/reference/functions/conj.md +0 -50
  84. package/docs/reference/functions/cos.md +0 -51
  85. package/docs/reference/functions/cosh.md +0 -46
  86. package/docs/reference/functions/cot.md +0 -47
  87. package/docs/reference/functions/coth.md +0 -49
  88. package/docs/reference/functions/count.md +0 -45
  89. package/docs/reference/functions/createUnit.md +0 -52
  90. package/docs/reference/functions/cross.md +0 -58
  91. package/docs/reference/functions/csc.md +0 -47
  92. package/docs/reference/functions/csch.md +0 -49
  93. package/docs/reference/functions/ctranspose.md +0 -50
  94. package/docs/reference/functions/cube.md +0 -51
  95. package/docs/reference/functions/cumsum.md +0 -57
  96. package/docs/reference/functions/deepEqual.md +0 -53
  97. package/docs/reference/functions/derivative.md +0 -61
  98. package/docs/reference/functions/det.md +0 -49
  99. package/docs/reference/functions/diag.md +0 -61
  100. package/docs/reference/functions/diff.md +0 -70
  101. package/docs/reference/functions/distance.md +0 -80
  102. package/docs/reference/functions/divide.md +0 -55
  103. package/docs/reference/functions/dot.md +0 -48
  104. package/docs/reference/functions/dotDivide.md +0 -52
  105. package/docs/reference/functions/dotMultiply.md +0 -52
  106. package/docs/reference/functions/dotPow.md +0 -49
  107. package/docs/reference/functions/eigs.md +0 -54
  108. package/docs/reference/functions/equal.md +0 -75
  109. package/docs/reference/functions/equalText.md +0 -53
  110. package/docs/reference/functions/erf.md +0 -49
  111. package/docs/reference/functions/evaluate.md +0 -56
  112. package/docs/reference/functions/exp.md +0 -54
  113. package/docs/reference/functions/expm.md +0 -49
  114. package/docs/reference/functions/expm1.md +0 -54
  115. package/docs/reference/functions/factorial.md +0 -49
  116. package/docs/reference/functions/fft.md +0 -35
  117. package/docs/reference/functions/filter.md +0 -50
  118. package/docs/reference/functions/fix.md +0 -62
  119. package/docs/reference/functions/flatten.md +0 -46
  120. package/docs/reference/functions/floor.md +0 -66
  121. package/docs/reference/functions/forEach.md +0 -41
  122. package/docs/reference/functions/format.md +0 -127
  123. package/docs/reference/functions/fraction.md +0 -45
  124. package/docs/reference/functions/gamma.md +0 -49
  125. package/docs/reference/functions/gcd.md +0 -50
  126. package/docs/reference/functions/getMatrixDataType.md +0 -59
  127. package/docs/reference/functions/hasNumericValue.md +0 -55
  128. package/docs/reference/functions/help.md +0 -42
  129. package/docs/reference/functions/hex.md +0 -45
  130. package/docs/reference/functions/hypot.md +0 -51
  131. package/docs/reference/functions/identity.md +0 -57
  132. package/docs/reference/functions/ifft.md +0 -35
  133. package/docs/reference/functions/im.md +0 -53
  134. package/docs/reference/functions/import.md +0 -68
  135. package/docs/reference/functions/index.md +0 -55
  136. package/docs/reference/functions/intersect.md +0 -50
  137. package/docs/reference/functions/inv.md +0 -45
  138. package/docs/reference/functions/invmod.md +0 -47
  139. package/docs/reference/functions/isInteger.md +0 -55
  140. package/docs/reference/functions/isNaN.md +0 -56
  141. package/docs/reference/functions/isNegative.md +0 -55
  142. package/docs/reference/functions/isNumeric.md +0 -55
  143. package/docs/reference/functions/isPositive.md +0 -57
  144. package/docs/reference/functions/isPrime.md +0 -54
  145. package/docs/reference/functions/isZero.md +0 -59
  146. package/docs/reference/functions/kldivergence.md +0 -41
  147. package/docs/reference/functions/kron.md +0 -53
  148. package/docs/reference/functions/larger.md +0 -60
  149. package/docs/reference/functions/largerEq.md +0 -56
  150. package/docs/reference/functions/lcm.md +0 -54
  151. package/docs/reference/functions/leafCount.md +0 -52
  152. package/docs/reference/functions/leftShift.md +0 -52
  153. package/docs/reference/functions/lgamma.md +0 -46
  154. package/docs/reference/functions/log.md +0 -57
  155. package/docs/reference/functions/log10.md +0 -50
  156. package/docs/reference/functions/log1p.md +0 -54
  157. package/docs/reference/functions/log2.md +0 -50
  158. package/docs/reference/functions/lsolve.md +0 -51
  159. package/docs/reference/functions/lsolveAll.md +0 -51
  160. package/docs/reference/functions/lup.md +0 -52
  161. package/docs/reference/functions/lusolve.md +0 -59
  162. package/docs/reference/functions/mad.md +0 -50
  163. package/docs/reference/functions/map.md +0 -65
  164. package/docs/reference/functions/matrix.md +0 -56
  165. package/docs/reference/functions/matrixFromColumns.md +0 -49
  166. package/docs/reference/functions/matrixFromFunction.md +0 -54
  167. package/docs/reference/functions/matrixFromRows.md +0 -49
  168. package/docs/reference/functions/max.md +0 -61
  169. package/docs/reference/functions/mean.md +0 -57
  170. package/docs/reference/functions/median.md +0 -57
  171. package/docs/reference/functions/min.md +0 -61
  172. package/docs/reference/functions/mod.md +0 -59
  173. package/docs/reference/functions/mode.md +0 -50
  174. package/docs/reference/functions/multinomial.md +0 -46
  175. package/docs/reference/functions/multiply.md +0 -60
  176. package/docs/reference/functions/norm.md +0 -59
  177. package/docs/reference/functions/not.md +0 -50
  178. package/docs/reference/functions/nthRoot.md +0 -53
  179. package/docs/reference/functions/nthRoots.md +0 -58
  180. package/docs/reference/functions/number.md +0 -49
  181. package/docs/reference/functions/numeric.md +0 -52
  182. package/docs/reference/functions/oct.md +0 -45
  183. package/docs/reference/functions/ones.md +0 -59
  184. package/docs/reference/functions/or.md +0 -53
  185. package/docs/reference/functions/parse.md +0 -56
  186. package/docs/reference/functions/parser.md +0 -70
  187. package/docs/reference/functions/partitionSelect.md +0 -53
  188. package/docs/reference/functions/permutations.md +0 -51
  189. package/docs/reference/functions/pickRandom.md +0 -59
  190. package/docs/reference/functions/pinv.md +0 -44
  191. package/docs/reference/functions/pow.md +0 -65
  192. package/docs/reference/functions/print.md +0 -64
  193. package/docs/reference/functions/prod.md +0 -55
  194. package/docs/reference/functions/qr.md +0 -65
  195. package/docs/reference/functions/quantileSeq.md +0 -62
  196. package/docs/reference/functions/random.md +0 -54
  197. package/docs/reference/functions/randomInt.md +0 -53
  198. package/docs/reference/functions/range.md +0 -70
  199. package/docs/reference/functions/rationalize.md +0 -68
  200. package/docs/reference/functions/re.md +0 -53
  201. package/docs/reference/functions/reshape.md +0 -60
  202. package/docs/reference/functions/resize.md +0 -51
  203. package/docs/reference/functions/resolve.md +0 -46
  204. package/docs/reference/functions/rightArithShift.md +0 -52
  205. package/docs/reference/functions/rightLogShift.md +0 -52
  206. package/docs/reference/functions/rotate.md +0 -53
  207. package/docs/reference/functions/rotationMatrix.md +0 -57
  208. package/docs/reference/functions/round.md +0 -61
  209. package/docs/reference/functions/row.md +0 -45
  210. package/docs/reference/functions/sec.md +0 -47
  211. package/docs/reference/functions/sech.md +0 -49
  212. package/docs/reference/functions/setCartesian.md +0 -49
  213. package/docs/reference/functions/setDifference.md +0 -47
  214. package/docs/reference/functions/setDistinct.md +0 -43
  215. package/docs/reference/functions/setIntersect.md +0 -46
  216. package/docs/reference/functions/setIsSubset.md +0 -47
  217. package/docs/reference/functions/setMultiplicity.md +0 -46
  218. package/docs/reference/functions/setPowerset.md +0 -43
  219. package/docs/reference/functions/setSize.md +0 -47
  220. package/docs/reference/functions/setSymDifference.md +0 -47
  221. package/docs/reference/functions/setUnion.md +0 -46
  222. package/docs/reference/functions/sign.md +0 -52
  223. package/docs/reference/functions/simplify.md +0 -130
  224. package/docs/reference/functions/simplifyConstant.md +0 -52
  225. package/docs/reference/functions/simplifyCore.md +0 -50
  226. package/docs/reference/functions/sin.md +0 -51
  227. package/docs/reference/functions/sinh.md +0 -46
  228. package/docs/reference/functions/size.md +0 -50
  229. package/docs/reference/functions/slu.md +0 -57
  230. package/docs/reference/functions/smaller.md +0 -60
  231. package/docs/reference/functions/smallerEq.md +0 -56
  232. package/docs/reference/functions/sort.md +0 -56
  233. package/docs/reference/functions/sparse.md +0 -51
  234. package/docs/reference/functions/splitUnit.md +0 -37
  235. package/docs/reference/functions/sqrt.md +0 -50
  236. package/docs/reference/functions/sqrtm.md +0 -46
  237. package/docs/reference/functions/square.md +0 -51
  238. package/docs/reference/functions/squeeze.md +0 -53
  239. package/docs/reference/functions/std.md +0 -76
  240. package/docs/reference/functions/stirlingS2.md +0 -52
  241. package/docs/reference/functions/string.md +0 -49
  242. package/docs/reference/functions/subset.md +0 -65
  243. package/docs/reference/functions/subtract.md +0 -54
  244. package/docs/reference/functions/sum.md +0 -54
  245. package/docs/reference/functions/symbolicEqual.md +0 -62
  246. package/docs/reference/functions/tan.md +0 -49
  247. package/docs/reference/functions/tanh.md +0 -50
  248. package/docs/reference/functions/to.md +0 -47
  249. package/docs/reference/functions/trace.md +0 -50
  250. package/docs/reference/functions/transpose.md +0 -49
  251. package/docs/reference/functions/typeOf.md +0 -81
  252. package/docs/reference/functions/typed.md +0 -56
  253. package/docs/reference/functions/unaryMinus.md +0 -49
  254. package/docs/reference/functions/unaryPlus.md +0 -48
  255. package/docs/reference/functions/unequal.md +0 -74
  256. package/docs/reference/functions/unit.md +0 -48
  257. package/docs/reference/functions/usolve.md +0 -51
  258. package/docs/reference/functions/usolveAll.md +0 -51
  259. package/docs/reference/functions/variance.md +0 -78
  260. package/docs/reference/functions/xgcd.md +0 -47
  261. package/docs/reference/functions/xor.md +0 -53
  262. package/docs/reference/functions/zeros.md +0 -57
  263. package/docs/reference/functions.md +0 -297
  264. package/docs/reference/index.md +0 -5
  265. package/examples/advanced/convert_fraction_to_bignumber.js +0 -59
  266. package/examples/advanced/custom_argument_parsing.js +0 -98
  267. package/examples/advanced/custom_datatype.js +0 -56
  268. package/examples/advanced/custom_evaluate_using_factories.js +0 -19
  269. package/examples/advanced/custom_evaluate_using_import.js +0 -18
  270. package/examples/advanced/custom_loading.js +0 -33
  271. package/examples/advanced/custom_relational_functions.js +0 -62
  272. package/examples/advanced/custom_scope_objects.js +0 -115
  273. package/examples/advanced/expression_trees.js +0 -55
  274. package/examples/advanced/function_transform.js +0 -50
  275. package/examples/advanced/more_secure_eval.js +0 -36
  276. package/examples/advanced/use_bigint.js +0 -43
  277. package/examples/advanced/web_server/math_worker.js +0 -24
  278. package/examples/advanced/web_server/server.js +0 -80
  279. package/examples/algebra.js +0 -34
  280. package/examples/basic_usage.js +0 -49
  281. package/examples/bignumbers.js +0 -52
  282. package/examples/browser/angle_configuration.html +0 -134
  283. package/examples/browser/basic_usage.html +0 -39
  284. package/examples/browser/currency_conversion.html +0 -125
  285. package/examples/browser/custom_separators.html +0 -81
  286. package/examples/browser/plot.html +0 -78
  287. package/examples/browser/pretty_printing_with_mathjax.html +0 -122
  288. package/examples/browser/printing_html.html +0 -170
  289. package/examples/browser/requirejs_loading.html +0 -20
  290. package/examples/browser/rocket_trajectory_optimization.html +0 -301
  291. package/examples/browser/webworkers/webworkers.html +0 -80
  292. package/examples/browser/webworkers/worker.js +0 -28
  293. package/examples/chaining.js +0 -56
  294. package/examples/complex_numbers.js +0 -67
  295. package/examples/expressions.js +0 -188
  296. package/examples/fractions.js +0 -74
  297. package/examples/import.js +0 -95
  298. package/examples/matrices.js +0 -101
  299. package/examples/objects.js +0 -35
  300. package/examples/package.json +0 -3
  301. package/examples/serialization.js +0 -16
  302. package/examples/sparse_matrices.js +0 -19
  303. package/examples/units.js +0 -108
@@ -1,375 +0,0 @@
1
- # Matrices
2
-
3
- Math.js supports multi dimensional matrices and arrays. Matrices can be
4
- created, manipulated, and used in calculations. Both regular JavaScript
5
- arrays as well as the matrix type implemented by math.js can be used
6
- interchangeably in all relevant math.js functions. math.js supports both
7
- dense and sparse matrices.
8
-
9
-
10
- ## Arrays and matrices
11
-
12
- Math.js supports two types of matrices:
13
-
14
- - `Array`, a regular JavaScript array. A multi dimensional array can be created
15
- by nesting arrays.
16
- - `Matrix`, a matrix implementation by math.js. A `Matrix` is an object wrapped
17
- around a regular JavaScript `Array`, providing utility functions for easy
18
- matrix manipulation such as `subset`, `size`, `resize`, `clone`, and more.
19
-
20
- In most cases, the type of matrix output from functions is determined by the
21
- function input: An `Array` as input will return an `Array`, a `Matrix` as input
22
- will return a `Matrix`. In case of mixed input, a `Matrix` is returned.
23
- For functions where the type of output cannot be determined from the
24
- input, the output is determined by the configuration option `matrix`,
25
- which can be a string `'Matrix'` (default) or `'Array'`.
26
-
27
- ```js
28
- // create an array and a matrix
29
- const array = [[2, 0], [-1, 3]] // Array
30
- const matrix = math.matrix([[7, 1], [-2, 3]]) // Matrix
31
-
32
- // perform a calculation on an array and matrix
33
- math.square(array) // Array, [[4, 0], [1, 9]]
34
- math.square(matrix) // Matrix, [[49, 1], [4, 9]]
35
-
36
- // perform calculations with mixed array and matrix input
37
- math.add(array, matrix) // Matrix, [[9, 1], [-3, 6]]
38
- math.multiply(array, matrix) // Matrix, [[14, 2], [-13, 8]]
39
-
40
- // create a matrix. Type of output of function ones is determined by the
41
- // configuration option `matrix`
42
- math.ones(2, 3) // Matrix, [[1, 1, 1], [1, 1, 1]]
43
- ```
44
-
45
-
46
- ## Creation
47
-
48
- A matrix can be created from an array using the function `math.matrix`. The
49
- provided array can contain nested arrays in order to create a multi-dimensional matrix. When called without arguments, an empty matrix will be
50
- created.
51
-
52
- ```js
53
- // create matrices
54
- math.matrix() // Matrix, size [0]
55
- math.matrix([0, 1, 2]) // Matrix, size [3]
56
- math.matrix([[0, 1], [2, 3], [4, 5]]) // Matrix, size [3, 2]
57
- ```
58
-
59
- Math.js supports regular Arrays. Multiple dimensions can be created
60
- by nesting Arrays in each other.
61
-
62
- ```js
63
- // create arrays
64
- [] // Array, size [0]
65
- [0, 1, 2] // Array, size [3]
66
- [[0, 1], [2, 3], [4, 5]] // Array, size [3, 2]
67
- ```
68
-
69
- Matrices can contain different types of values: numbers, complex numbers,
70
- units, or strings. Different types can be mixed together in a single matrix.
71
-
72
- ```js
73
- // create a matrix with mixed types
74
- const a = math.matrix([2.3, 'hello', math.complex(3, -4), math.unit('5.2 mm')])
75
- a.subset(math.index(1)) // 'hello'
76
- ```
77
-
78
-
79
- There are a number of functions to create a matrix with a specific size and
80
- content: `ones`, `zeros`, `identity`.
81
-
82
- ```js
83
- // zeros creates a matrix filled with zeros
84
- math.zeros(3) // Matrix, size [3], [0, 0, 0]
85
- math.zeros(3, 2) // Matrix, size [3, 2], [[0, 0], [0, 0], [0, 0]]
86
- math.zeros(2, 2, 2) // Matrix, size [2, 2, 2],
87
- // [[[0, 0], [0, 0]], [[0, 0], [0, 0]]]
88
-
89
- // ones creates a matrix filled with ones
90
- math.ones(3) // Matrix, size [3], [1, 1, 1]
91
- math.multiply(math.ones(2, 2), 5) // Matrix, size [2, 2], [[5, 5], [5, 5]]
92
-
93
- // identity creates an identity matrix
94
- math.identity(3) // Matrix, size [3, 3], [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
95
- math.identity(2, 3) // Matrix, size [2, 3], [[1, 0, 0], [0, 1, 0]]
96
- ```
97
-
98
-
99
- The functions `ones`, `zeros`, and `identity` also accept a single array
100
- or matrix containing the dimensions for the matrix. When the input is an Array,
101
- the functions will output an Array. When the input is a Matrix, the output will
102
- be a Matrix. Note that in case of numbers as arguments, the output is
103
- determined by the option `matrix` as discussed in section
104
- [Arrays and matrices](#arrays-and-matrices).
105
-
106
- ```js
107
- // Array as input gives Array as output
108
- math.ones([2, 3]) // Array, size [3, 2], [[1, 1, 1], [1, 1, 1]]
109
- math.ones(math.matrix([2, 3])) // Matrix, size [3, 2], [[1, 1, 1], [1, 1, 1]]
110
- ```
111
-
112
- Ranges can be created using the function `range`. The function `range` is
113
- called with parameters start and end, and optionally a parameter step.
114
- The start of the range is included, the end of the range is excluded.
115
-
116
- ```js
117
- math.range(0, 4) // [0, 1, 2, 3]
118
- math.range(0, 8, 2) // [0, 2, 4, 6]
119
- math.range(3, -1, -1) // [3, 2, 1, 0]
120
- ```
121
-
122
-
123
- ## Calculations
124
-
125
- All relevant functions of math.js support matrices and arrays.
126
-
127
- ```js
128
- // perform a calculation on a matrix
129
- const a = math.matrix([1, 4, 9, 16, 25]) // Matrix, [1, 4, 9, 16, 25]
130
- math.sqrt(a) // Matrix, [1, 2, 3, 4, 5]
131
-
132
- // perform a calculation on an array
133
- const b = [1, 2, 3, 4, 5]
134
- math.factorial(b) // Array, [1, 2, 6, 24, 120]
135
-
136
- // multiply an array with a matrix
137
- const c = [[2, 0], [-1, 3]] // Array
138
- const d = math.matrix([[7, 1], [-2, 3]]) // Matrix
139
- math.multiply(c, d) // Matrix, [[14, 2], [-13, 8]]
140
-
141
- // add a number to a matrix
142
- math.add(c, 2) // Array, [[4, 2], [1, 5]]
143
-
144
- // calculate the determinant of a matrix
145
- math.det(c) // 6
146
- math.det(d) // 23
147
- ```
148
-
149
-
150
- ## Size and Dimensions
151
-
152
- Math.js uses geometric dimensions:
153
-
154
- - A scalar is zero-dimensional.
155
- - A vector is one-dimensional.
156
- - A matrix is two or multi-dimensional.
157
-
158
- The size of a matrix can be calculated with the function `size`. Function `size`
159
- returns a `Matrix` or `Array`, depending on the configuration option `matrix`.
160
- Furthermore, matrices have a function `size` as well, which always returns
161
- an Array.
162
-
163
- ```js
164
- // get the size of a scalar
165
- math.size(2.4) // Matrix, []
166
- math.size(math.complex(3, 2)) // Matrix, []
167
- math.size(math.unit('5.3 mm')) // Matrix, []
168
-
169
- // get the size of a one-dimensional matrix (a vector) and a string
170
- math.size([0, 1, 2, 3]) // Array, [4]
171
- math.size('hello world') // Matrix, [11]
172
-
173
- // get the size of a two-dimensional matrix
174
- const a = [[0, 1, 2, 3]] // Array
175
- const b = math.matrix([[0, 1, 2], [3, 4, 5]]) // Matrix
176
- math.size(a) // Array, [1, 4]
177
- math.size(b) // Matrix, [2, 3]
178
-
179
- // matrices have a function size (always returns an Array)
180
- b.size() // Array, [2, 3]
181
-
182
- // get the size of a multi-dimensional matrix
183
- const c = [[[0, 1, 2], [3, 4, 5]], [[6, 7, 8], [9, 10, 11]]]
184
- math.size(c) // Array, [2, 2, 3]
185
- ```
186
-
187
- Note that the dimensions themselves do not have a meaning attached.
188
- When creating and printing a two dimensional matrix, the first dimension is
189
- normally rendered as the _column_, and the second dimension is rendered as
190
- the _row_. For example:
191
-
192
- ```js
193
- console.table(math.zeros([2, 4]))
194
- // 0 0 0 0
195
- // 0 0 0 0
196
- ```
197
-
198
- If you have a matrix where the first dimension means `x` and the second
199
- means `y`, this will look confusing since `x` is printed as _column_
200
- (vertically) and `y` as _row_ (horizontally).
201
-
202
-
203
- ## Resizing
204
-
205
- Matrices can be resized using their `resize` function. This function is called
206
- with an Array with the new size as the first argument, and accepts an optional
207
- default value. By default, new entries will be set to `0`, but it is possible
208
- to pass a different default value like `null` to clearly indicate that
209
- the entries haven't been explicitly set.
210
-
211
- ```js
212
- const a = math.matrix() // Matrix, size [0], []
213
- a.resize([2, 3]) // Matrix, size [2, 3], [[0, 0, 0], [0, 0, 0]]
214
- a.resize([2, 2, 2]) // Matrix, size [2, 2, 2],
215
- // [[[0, 0], [0, 0]], [[0, 0], [0, 0]]]
216
-
217
- const b = math.matrix()
218
- b.resize([3], 7) // Matrix, size [3], [7, 7, 7]
219
- b.resize([5], 9) // Matrix, size [5], [7, 7, 7, 9, 9]
220
- b.resize([2]) // Matrix, size [2], [7, 7]
221
- ```
222
-
223
-
224
- Outer dimensions of a matrix can be squeezed using the function `squeeze`. When
225
- getting or setting a subset in a matrix, the subset is automatically squeezed
226
- or unsqueezed.
227
-
228
- ```js
229
- // squeeze a matrix
230
- const a = [[[0, 1, 2]]]
231
- math.squeeze(a) // [0, 1, 2]
232
- math.squeeze([[3]]) // 3
233
-
234
- // subsets are automatically squeezed
235
- const b = math.matrix([[0, 1], [2, 3]])
236
- b.subset(math.index(1, 0)) // 2
237
- ```
238
-
239
-
240
- ## Getting or replacing subsets
241
-
242
- Subsets of a matrix can be retrieved or replaced using the function `subset`.
243
- Matrices have a `subset` function, which is applied to the matrix itself:
244
- `Matrix.subset(index [, replacement])`. For both matrices and arrays,
245
- the static function `subset(matrix, index [, replacement])` can be used.
246
- When parameter `replacement` is provided, the function will replace a subset
247
- in the matrix, and if not, a subset of the matrix will be returned.
248
-
249
- A subset can be defined using an `Index`. An `Index` contains a single value
250
- or a set of values for each dimension of a matrix. An `Index` can be
251
- created using the function `index`.
252
- Matrix indexes in math.js are zero-based, like most programming languages
253
- including JavaScript itself.
254
-
255
- Note that mathematical applications like Matlab and Octave work differently,
256
- as they use one-based indexes.
257
-
258
- ```js
259
- // create some matrices
260
- const a = [0, 1, 2, 3]
261
- const b = [[0, 1], [2, 3]]
262
- const c = math.zeros(2, 2)
263
- const d = math.matrix([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
264
- const e = math.matrix()
265
-
266
- // get a subset
267
- math.subset(a, math.index(1)) // 1
268
- math.subset(a, math.index([2, 3])) // Array, [2, 3]
269
- math.subset(a, math.index(math.range(0,4))) // Array, [0, 1, 2, 3]
270
- math.subset(b, math.index(1, 0)) // 2
271
- math.subset(b, math.index(1, [0, 1])) // Array, [2, 3]
272
- math.subset(b, math.index([0, 1], 0)) // Matrix, [[0], [2]]
273
-
274
- // get a subset
275
- d.subset(math.index([1, 2], [0, 1])) // Matrix, [[3, 4], [6, 7]]
276
- d.subset(math.index(1, 2)) // 5
277
-
278
- // replace a subset. The subset will be applied to a clone of the matrix
279
- math.subset(b, math.index(1, 0), 9) // Array, [[0, 1], [9, 3]]
280
- math.subset(b, math.index(2, [0, 1]), [4, 5]) // Array, [[0, 1], [2, 3], [4, 5]]
281
-
282
- // replace a subset. The subset will be applied to the matrix itself
283
- c.subset(math.index(0, 1),1) // Matrix, [[0, 1], [0, 0]]
284
- c.subset(math.index(1, [0, 1]), [2, 3]) // Matrix, [[0, 1], [2, 3]]
285
- e.resize([2, 3], 0) // Matrix, [[0, 0, 0], [0, 0, 0]]
286
- e.subset(math.index(1, 2), 5) // Matrix, [[0, 0, 0], [0, 0, 5]]
287
- ```
288
-
289
- ## Iterating
290
-
291
- Matrices contain functions `map` and `forEach` to iterate over all elements of
292
- the (multidimensional) matrix. The callback function of `map` and `forEach` has
293
- three parameters: `value` (the value of the currently iterated element),
294
- `index` (an array with the index value for each dimension), and `matrix` (the
295
- matrix being iterated). This syntax is similar to the `map` and `forEach`
296
- functions of native JavaScript Arrays, except that the index is no number but
297
- an Array with numbers for each dimension.
298
-
299
- ```js
300
- const a = math.matrix([[0, 1], [2, 3], [4, 5]])
301
-
302
- // The iteration below will output the following in the console:
303
- // value: 0 index: [0, 0]
304
- // value: 1 index: [0, 1]
305
- // value: 2 index: [1, 0]
306
- // value: 3 index: [1, 1]
307
- // value: 4 index: [2, 0]
308
- // value: 5 index: [2, 1]
309
- a.forEach(function (value, index, matrix) {
310
- console.log('value:', value, 'index:', index)
311
- })
312
-
313
- // Apply a transformation on the matrix
314
- const b = a.map(function (value, index, matrix) {
315
- return math.multiply(math.sin(value), math.exp(math.abs(value)))
316
- })
317
- console.log(b.format(5)) // [[0, 2.2874], [6.7188, 2.8345], [-41.32, -142.32]]
318
-
319
- // Create a matrix with the cumulative of all elements
320
- let count = 0
321
- const cum = a.map(function (value, index, matrix) {
322
- count += value
323
- return count
324
- })
325
- console.log(cum.toString()) // [[0, 1], [3, 6], [10, 15]]
326
- ```
327
-
328
- ## Storage types
329
-
330
- Math.js supports both dense matrices as well as sparse matrices. Sparse matrices are efficient for matrices largely containing zeros. In that case they save a lot of memory, and calculations can be much faster than for dense matrices.
331
-
332
- Math.js supports two type of matrices:
333
-
334
- - Dense matrix (`'dense'`, `default`) A regular, dense matrix, supporting multi-dimensional matrices. This is the default matrix type.
335
- - Sparse matrix (`'sparse'`): A two dimensional sparse matrix implementation.
336
-
337
- The type of matrix can be selected when creating a matrix using the construction functions `matrix`, `diag`, `identity`, `ones`, and `zeros`.
338
-
339
- ```js
340
- // create sparse matrices
341
- const m1 = math.matrix([[0, 1], [0, 0]], 'sparse')
342
- const m2 = math.identity(1000, 1000, 'sparse')
343
- ```
344
-
345
- You can also coerce an array or matrix into sparse storage format with the
346
- `sparse` function.
347
- ```js
348
- const md = math.matrix([[0, 1], [0,0]]) // dense
349
- const ms = math.sparse(md) // sparse
350
- ```
351
-
352
- Caution: `sparse` called on a JavaScript array of _n_ plain numbers produces
353
- a matrix with one column and _n_ rows -- in contrast to `matrix`, which
354
- produces a 1-dimensional matrix object with _n_ entries, i.e., a vector
355
- (_not_ a 1 by _n_ "row vector" nor an _n_ by 1 "column vector", but just a plain
356
- vector of length _n_).
357
- ```js
358
- const mv = math.matrix([0, 0, 1]) // Has size [3]
359
- const mc = math.sparse([0, 0, 1]) // A "column vector," has size [3, 1]
360
- ```
361
-
362
- ## API
363
-
364
- All relevant functions in math.js support Matrices and Arrays. Functions like `math.add` and `math.subtract`, `math.sqrt` handle matrices element wise. There is a set of functions specifically for creating or manipulating matrices, such as:
365
-
366
- - Functions like `math.matrix` and `math.sparse`, `math.ones`, `math.zeros`, and `math.identity` to create a matrix.
367
- - Functions like `math.subset` and `math.index` to get or replace a part of a matrix
368
- - Functions like `math.transpose` and `math.diag` to manipulate matrices.
369
-
370
- A full list of matrix functions is available on the [functions reference page](../reference/functions.md#matrix-functions).
371
-
372
- Two types of matrix classes are available in math.js, for storage of dense and sparse matrices. Although they contain public functions documented as follows, using the following API directly is *not* recommended. Prefer using the functions in the "math" namespace wherever possible.
373
-
374
- - [DenseMatrix](../reference/classes/densematrix.md)
375
- - [SparseMatrix](../reference/classes/sparsematrix.md)
@@ -1,106 +0,0 @@
1
- # Numbers
2
-
3
- Math.js supports three types of numbers:
4
-
5
- - Number for fast floating point arithmetic, described on this page.
6
- - BigNumber for arbitrary precision arithmetic, described on the page
7
- [BigNumbers](bignumbers.md).
8
- - Fraction, which stores numbers in terms of a numerator and denominators,
9
- described on the page [Fractions](fractions.md).
10
-
11
-
12
- ## Configuration
13
-
14
- Most functions can determine the type of output from the type of input:
15
- a number as input will return a number as output, a BigNumber as input returns
16
- a BigNumber as output. Functions which cannot determine the type of output
17
- from the input (for example `math.evaluate`) use the default number type, which
18
- can be configured when instantiating math.js:
19
-
20
- ```js
21
- math.config({
22
- number: 'number' // Default type of number:
23
- // 'number' (default), 'BigNumber', or 'Fraction'
24
- })
25
- ```
26
-
27
- ## Round-off errors
28
-
29
- Math.js uses the built-in JavaScript Number type. A Number is a floating point
30
- number with a limited precision of 64 bits, about 16 digits. The largest integer
31
- number which can be represented by a JavaScript Number
32
- is `+/- 9007199254740992` (`+/- 2^53`). Because of the limited precision of
33
- floating point numbers round-off errors can occur during calculations.
34
- This can be easily demonstrated:
35
-
36
- ```js
37
- // a round-off error
38
- 0.1 + 0.2 // 0.30000000000000004
39
- math.add(0.1, 0.2) // 0.30000000000000004
40
- ```
41
-
42
- In most cases, round-off errors don't matter: they have no significant
43
- impact on the results. However, it looks ugly when displaying output to a user.
44
- A solution is to limit the precision just below the actual precision of 16
45
- digits in the displayed output:
46
-
47
- ```js
48
- // prevent round-off errors showing up in output
49
- const ans = math.add(0.1, 0.2) // 0.30000000000000004
50
- math.format(ans, {precision: 14}) // '0.3'
51
- ```
52
-
53
- Alternatives are to use [Fractions](fractions.md) which store a number as a numerator and denominator, or [BigNumbers](bignumbers.md), which store a number with a higher precision.
54
-
55
-
56
- ## Minimum and maximum
57
-
58
- A Number can store values between `5e-324` and `1.7976931348623157e+308`.
59
- Values smaller than the minimum are stored as `0`, and values larger than the
60
- maximum are stored as `+/- Infinity`.
61
-
62
- ```js
63
- // exceeding the maximum and minimum number
64
- console.log(1e309) // Infinity
65
- console.log(1e-324) // 0
66
- ```
67
-
68
- ## Equality
69
-
70
- Because of rounding errors in calculations, it is unsafe to compare JavaScript
71
- Numbers. For example executing `0.1 + 0.2 == 0.3` in JavaScript will return
72
- false, as the addition `0.1 + 0.2` introduces a round-off error and does not
73
- return exactly `0.3`.
74
-
75
- To solve this problem, the relational functions of math.js check whether the
76
- relative difference between the compared values is smaller than the configured
77
- option `epsilon`. In pseudo code (without exceptions for 0, Infinity and NaN):
78
-
79
- diff = abs(x - y)
80
- nearlyEqual = (diff <= max(abs(x), abs(y)) * EPSILON) OR (diff < DBL_EPSILON)
81
-
82
- where:
83
-
84
- - `EPSILON` is the relative difference between x and y. Epsilon is configurable
85
- and is `1e-12` by default. See [Configuration](../core/configuration.md).
86
- - `DBL_EPSILON` is the minimum positive floating point number such that
87
- `1.0 + DBL_EPSILON !== 1.0`. This is a constant with a value of approximately
88
- `2.2204460492503130808472633361816e-16`.
89
-
90
- Note that the relational functions cannot be used to compare small values
91
- (`< 2.22e-16`). These values are all considered equal to zero.
92
-
93
- Examples:
94
-
95
- ```js
96
- // compare values having a round-off error
97
- console.log(0.1 + 0.2 === 0.3) // false
98
- console.log(math.equal(0.1 + 0.2, 0.3)) // true
99
-
100
- // small values (< 2.22e-16) cannot be compared
101
- console.log(3e-20 === 3.1e-20) // false
102
- console.log(math.equal(3e-20, 3.1e-20)) // true
103
- ```
104
-
105
- The available relational functions are: `compare`, `equal`, `larger`,
106
- `largerEq`, `smaller`, `smallerEq`, `unequal`.