mathjs 10.5.2 → 10.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (329) hide show
  1. package/HISTORY.md +28 -0
  2. package/lib/browser/math.js +6 -5
  3. package/lib/browser/math.js.map +1 -1
  4. package/lib/cjs/entry/dependenciesAny/dependenciesFft.generated.js +41 -0
  5. package/lib/cjs/entry/dependenciesAny/dependenciesIfft.generated.js +29 -0
  6. package/lib/cjs/entry/dependenciesAny.generated.js +16 -0
  7. package/lib/cjs/entry/impureFunctionsAny.generated.js +66 -64
  8. package/lib/cjs/entry/pureFunctionsAny.generated.js +189 -171
  9. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +6 -0
  10. package/lib/cjs/expression/embeddedDocs/function/matrix/fft.js +15 -0
  11. package/lib/cjs/expression/embeddedDocs/function/matrix/ifft.js +15 -0
  12. package/lib/cjs/factoriesAny.js +16 -0
  13. package/lib/cjs/function/algebra/derivative.js +1 -1
  14. package/lib/cjs/function/matrix/fft.js +128 -0
  15. package/lib/cjs/function/matrix/ifft.js +49 -0
  16. package/lib/cjs/header.js +2 -2
  17. package/lib/cjs/version.js +1 -1
  18. package/lib/esm/entry/dependenciesAny/dependenciesFft.generated.js +24 -0
  19. package/lib/esm/entry/dependenciesAny/dependenciesIfft.generated.js +16 -0
  20. package/lib/esm/entry/dependenciesAny.generated.js +2 -0
  21. package/lib/esm/entry/impureFunctionsAny.generated.js +63 -61
  22. package/lib/esm/entry/pureFunctionsAny.generated.js +161 -145
  23. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +4 -0
  24. package/lib/esm/expression/embeddedDocs/function/matrix/fft.js +8 -0
  25. package/lib/esm/expression/embeddedDocs/function/matrix/ifft.js +8 -0
  26. package/lib/esm/factoriesAny.js +2 -0
  27. package/lib/esm/function/algebra/derivative.js +1 -1
  28. package/lib/esm/function/matrix/fft.js +104 -0
  29. package/lib/esm/function/matrix/ifft.js +38 -0
  30. package/lib/esm/version.js +1 -1
  31. package/package.json +22 -24
  32. package/types/index.d.ts +1052 -283
  33. package/types/index.ts +711 -7
  34. package/docs/command_line_interface.md +0 -87
  35. package/docs/core/chaining.md +0 -41
  36. package/docs/core/configuration.md +0 -144
  37. package/docs/core/extension.md +0 -263
  38. package/docs/core/index.md +0 -21
  39. package/docs/core/serialization.md +0 -50
  40. package/docs/custom_bundling.md +0 -116
  41. package/docs/datatypes/bignumbers.md +0 -102
  42. package/docs/datatypes/complex_numbers.md +0 -168
  43. package/docs/datatypes/fractions.md +0 -75
  44. package/docs/datatypes/index.md +0 -67
  45. package/docs/datatypes/matrices.md +0 -375
  46. package/docs/datatypes/numbers.md +0 -106
  47. package/docs/datatypes/units.md +0 -444
  48. package/docs/expressions/algebra.md +0 -110
  49. package/docs/expressions/customization.md +0 -379
  50. package/docs/expressions/expression_trees.md +0 -710
  51. package/docs/expressions/html_classes.md +0 -38
  52. package/docs/expressions/index.md +0 -21
  53. package/docs/expressions/parsing.md +0 -224
  54. package/docs/expressions/security.md +0 -89
  55. package/docs/expressions/syntax.md +0 -706
  56. package/docs/getting_started.md +0 -124
  57. package/docs/index.md +0 -39
  58. package/docs/reference/classes/densematrix.md +0 -247
  59. package/docs/reference/classes/fibonacciheap.md +0 -70
  60. package/docs/reference/classes/matrixindex.md +0 -133
  61. package/docs/reference/classes/matrixrange.md +0 -158
  62. package/docs/reference/classes/resultset.md +0 -47
  63. package/docs/reference/classes/sparsematrix.md +0 -245
  64. package/docs/reference/classes/unit.md +0 -242
  65. package/docs/reference/classes.md +0 -86
  66. package/docs/reference/constants.md +0 -29
  67. package/docs/reference/functions/abs.md +0 -46
  68. package/docs/reference/functions/acos.md +0 -49
  69. package/docs/reference/functions/acosh.md +0 -47
  70. package/docs/reference/functions/acot.md +0 -48
  71. package/docs/reference/functions/acoth.md +0 -46
  72. package/docs/reference/functions/acsc.md +0 -49
  73. package/docs/reference/functions/acsch.md +0 -46
  74. package/docs/reference/functions/add.md +0 -59
  75. package/docs/reference/functions/and.md +0 -53
  76. package/docs/reference/functions/apply.md +0 -56
  77. package/docs/reference/functions/arg.md +0 -53
  78. package/docs/reference/functions/asec.md +0 -49
  79. package/docs/reference/functions/asech.md +0 -46
  80. package/docs/reference/functions/asin.md +0 -49
  81. package/docs/reference/functions/asinh.md +0 -46
  82. package/docs/reference/functions/atan.md +0 -49
  83. package/docs/reference/functions/atan2.md +0 -56
  84. package/docs/reference/functions/atanh.md +0 -46
  85. package/docs/reference/functions/bellNumbers.md +0 -45
  86. package/docs/reference/functions/bignumber.md +0 -47
  87. package/docs/reference/functions/bin.md +0 -45
  88. package/docs/reference/functions/bitAnd.md +0 -51
  89. package/docs/reference/functions/bitNot.md +0 -51
  90. package/docs/reference/functions/bitOr.md +0 -52
  91. package/docs/reference/functions/bitXor.md +0 -51
  92. package/docs/reference/functions/boolean.md +0 -50
  93. package/docs/reference/functions/catalan.md +0 -45
  94. package/docs/reference/functions/cbrt.md +0 -60
  95. package/docs/reference/functions/ceil.md +0 -63
  96. package/docs/reference/functions/chain.md +0 -54
  97. package/docs/reference/functions/clone.md +0 -43
  98. package/docs/reference/functions/column.md +0 -45
  99. package/docs/reference/functions/combinations.md +0 -49
  100. package/docs/reference/functions/combinationsWithRep.md +0 -49
  101. package/docs/reference/functions/compare.md +0 -67
  102. package/docs/reference/functions/compareNatural.md +0 -92
  103. package/docs/reference/functions/compareText.md +0 -54
  104. package/docs/reference/functions/compile.md +0 -56
  105. package/docs/reference/functions/complex.md +0 -17
  106. package/docs/reference/functions/composition.md +0 -46
  107. package/docs/reference/functions/concat.md +0 -56
  108. package/docs/reference/functions/config.md +0 -44
  109. package/docs/reference/functions/conj.md +0 -50
  110. package/docs/reference/functions/cos.md +0 -51
  111. package/docs/reference/functions/cosh.md +0 -46
  112. package/docs/reference/functions/cot.md +0 -47
  113. package/docs/reference/functions/coth.md +0 -49
  114. package/docs/reference/functions/count.md +0 -45
  115. package/docs/reference/functions/createUnit.md +0 -52
  116. package/docs/reference/functions/cross.md +0 -58
  117. package/docs/reference/functions/csc.md +0 -47
  118. package/docs/reference/functions/csch.md +0 -49
  119. package/docs/reference/functions/ctranspose.md +0 -50
  120. package/docs/reference/functions/cube.md +0 -51
  121. package/docs/reference/functions/cumsum.md +0 -57
  122. package/docs/reference/functions/deepEqual.md +0 -53
  123. package/docs/reference/functions/derivative.md +0 -61
  124. package/docs/reference/functions/det.md +0 -49
  125. package/docs/reference/functions/diag.md +0 -61
  126. package/docs/reference/functions/diff.md +0 -70
  127. package/docs/reference/functions/distance.md +0 -80
  128. package/docs/reference/functions/divide.md +0 -55
  129. package/docs/reference/functions/dot.md +0 -48
  130. package/docs/reference/functions/dotDivide.md +0 -52
  131. package/docs/reference/functions/dotMultiply.md +0 -52
  132. package/docs/reference/functions/dotPow.md +0 -49
  133. package/docs/reference/functions/eigs.md +0 -54
  134. package/docs/reference/functions/equal.md +0 -75
  135. package/docs/reference/functions/equalText.md +0 -53
  136. package/docs/reference/functions/erf.md +0 -49
  137. package/docs/reference/functions/evaluate.md +0 -56
  138. package/docs/reference/functions/exp.md +0 -54
  139. package/docs/reference/functions/expm.md +0 -49
  140. package/docs/reference/functions/expm1.md +0 -54
  141. package/docs/reference/functions/factorial.md +0 -49
  142. package/docs/reference/functions/fft.md +0 -35
  143. package/docs/reference/functions/filter.md +0 -50
  144. package/docs/reference/functions/fix.md +0 -62
  145. package/docs/reference/functions/flatten.md +0 -46
  146. package/docs/reference/functions/floor.md +0 -66
  147. package/docs/reference/functions/forEach.md +0 -41
  148. package/docs/reference/functions/format.md +0 -127
  149. package/docs/reference/functions/fraction.md +0 -45
  150. package/docs/reference/functions/gamma.md +0 -49
  151. package/docs/reference/functions/gcd.md +0 -50
  152. package/docs/reference/functions/getMatrixDataType.md +0 -59
  153. package/docs/reference/functions/hasNumericValue.md +0 -55
  154. package/docs/reference/functions/help.md +0 -42
  155. package/docs/reference/functions/hex.md +0 -45
  156. package/docs/reference/functions/hypot.md +0 -51
  157. package/docs/reference/functions/identity.md +0 -57
  158. package/docs/reference/functions/ifft.md +0 -35
  159. package/docs/reference/functions/im.md +0 -53
  160. package/docs/reference/functions/import.md +0 -68
  161. package/docs/reference/functions/index.md +0 -55
  162. package/docs/reference/functions/intersect.md +0 -50
  163. package/docs/reference/functions/inv.md +0 -45
  164. package/docs/reference/functions/invmod.md +0 -47
  165. package/docs/reference/functions/isInteger.md +0 -55
  166. package/docs/reference/functions/isNaN.md +0 -56
  167. package/docs/reference/functions/isNegative.md +0 -55
  168. package/docs/reference/functions/isNumeric.md +0 -55
  169. package/docs/reference/functions/isPositive.md +0 -57
  170. package/docs/reference/functions/isPrime.md +0 -54
  171. package/docs/reference/functions/isZero.md +0 -59
  172. package/docs/reference/functions/kldivergence.md +0 -41
  173. package/docs/reference/functions/kron.md +0 -53
  174. package/docs/reference/functions/larger.md +0 -60
  175. package/docs/reference/functions/largerEq.md +0 -56
  176. package/docs/reference/functions/lcm.md +0 -54
  177. package/docs/reference/functions/leafCount.md +0 -52
  178. package/docs/reference/functions/leftShift.md +0 -52
  179. package/docs/reference/functions/lgamma.md +0 -46
  180. package/docs/reference/functions/log.md +0 -57
  181. package/docs/reference/functions/log10.md +0 -50
  182. package/docs/reference/functions/log1p.md +0 -54
  183. package/docs/reference/functions/log2.md +0 -50
  184. package/docs/reference/functions/lsolve.md +0 -51
  185. package/docs/reference/functions/lsolveAll.md +0 -51
  186. package/docs/reference/functions/lup.md +0 -52
  187. package/docs/reference/functions/lusolve.md +0 -59
  188. package/docs/reference/functions/mad.md +0 -50
  189. package/docs/reference/functions/map.md +0 -65
  190. package/docs/reference/functions/matrix.md +0 -56
  191. package/docs/reference/functions/matrixFromColumns.md +0 -49
  192. package/docs/reference/functions/matrixFromFunction.md +0 -54
  193. package/docs/reference/functions/matrixFromRows.md +0 -49
  194. package/docs/reference/functions/max.md +0 -61
  195. package/docs/reference/functions/mean.md +0 -57
  196. package/docs/reference/functions/median.md +0 -57
  197. package/docs/reference/functions/min.md +0 -61
  198. package/docs/reference/functions/mod.md +0 -59
  199. package/docs/reference/functions/mode.md +0 -50
  200. package/docs/reference/functions/multinomial.md +0 -46
  201. package/docs/reference/functions/multiply.md +0 -60
  202. package/docs/reference/functions/norm.md +0 -59
  203. package/docs/reference/functions/not.md +0 -50
  204. package/docs/reference/functions/nthRoot.md +0 -53
  205. package/docs/reference/functions/nthRoots.md +0 -58
  206. package/docs/reference/functions/number.md +0 -49
  207. package/docs/reference/functions/numeric.md +0 -52
  208. package/docs/reference/functions/oct.md +0 -45
  209. package/docs/reference/functions/ones.md +0 -59
  210. package/docs/reference/functions/or.md +0 -53
  211. package/docs/reference/functions/parse.md +0 -56
  212. package/docs/reference/functions/parser.md +0 -70
  213. package/docs/reference/functions/partitionSelect.md +0 -53
  214. package/docs/reference/functions/permutations.md +0 -51
  215. package/docs/reference/functions/pickRandom.md +0 -59
  216. package/docs/reference/functions/pinv.md +0 -44
  217. package/docs/reference/functions/pow.md +0 -65
  218. package/docs/reference/functions/print.md +0 -64
  219. package/docs/reference/functions/prod.md +0 -55
  220. package/docs/reference/functions/qr.md +0 -65
  221. package/docs/reference/functions/quantileSeq.md +0 -62
  222. package/docs/reference/functions/random.md +0 -54
  223. package/docs/reference/functions/randomInt.md +0 -53
  224. package/docs/reference/functions/range.md +0 -70
  225. package/docs/reference/functions/rationalize.md +0 -68
  226. package/docs/reference/functions/re.md +0 -53
  227. package/docs/reference/functions/reshape.md +0 -60
  228. package/docs/reference/functions/resize.md +0 -51
  229. package/docs/reference/functions/resolve.md +0 -46
  230. package/docs/reference/functions/rightArithShift.md +0 -52
  231. package/docs/reference/functions/rightLogShift.md +0 -52
  232. package/docs/reference/functions/rotate.md +0 -53
  233. package/docs/reference/functions/rotationMatrix.md +0 -57
  234. package/docs/reference/functions/round.md +0 -61
  235. package/docs/reference/functions/row.md +0 -45
  236. package/docs/reference/functions/sec.md +0 -47
  237. package/docs/reference/functions/sech.md +0 -49
  238. package/docs/reference/functions/setCartesian.md +0 -49
  239. package/docs/reference/functions/setDifference.md +0 -47
  240. package/docs/reference/functions/setDistinct.md +0 -43
  241. package/docs/reference/functions/setIntersect.md +0 -46
  242. package/docs/reference/functions/setIsSubset.md +0 -47
  243. package/docs/reference/functions/setMultiplicity.md +0 -46
  244. package/docs/reference/functions/setPowerset.md +0 -43
  245. package/docs/reference/functions/setSize.md +0 -47
  246. package/docs/reference/functions/setSymDifference.md +0 -47
  247. package/docs/reference/functions/setUnion.md +0 -46
  248. package/docs/reference/functions/sign.md +0 -52
  249. package/docs/reference/functions/simplify.md +0 -130
  250. package/docs/reference/functions/simplifyConstant.md +0 -52
  251. package/docs/reference/functions/simplifyCore.md +0 -50
  252. package/docs/reference/functions/sin.md +0 -51
  253. package/docs/reference/functions/sinh.md +0 -46
  254. package/docs/reference/functions/size.md +0 -50
  255. package/docs/reference/functions/slu.md +0 -57
  256. package/docs/reference/functions/smaller.md +0 -60
  257. package/docs/reference/functions/smallerEq.md +0 -56
  258. package/docs/reference/functions/sort.md +0 -56
  259. package/docs/reference/functions/sparse.md +0 -51
  260. package/docs/reference/functions/splitUnit.md +0 -37
  261. package/docs/reference/functions/sqrt.md +0 -50
  262. package/docs/reference/functions/sqrtm.md +0 -46
  263. package/docs/reference/functions/square.md +0 -51
  264. package/docs/reference/functions/squeeze.md +0 -53
  265. package/docs/reference/functions/std.md +0 -76
  266. package/docs/reference/functions/stirlingS2.md +0 -52
  267. package/docs/reference/functions/string.md +0 -49
  268. package/docs/reference/functions/subset.md +0 -65
  269. package/docs/reference/functions/subtract.md +0 -54
  270. package/docs/reference/functions/sum.md +0 -54
  271. package/docs/reference/functions/symbolicEqual.md +0 -62
  272. package/docs/reference/functions/tan.md +0 -49
  273. package/docs/reference/functions/tanh.md +0 -50
  274. package/docs/reference/functions/to.md +0 -47
  275. package/docs/reference/functions/trace.md +0 -50
  276. package/docs/reference/functions/transpose.md +0 -49
  277. package/docs/reference/functions/typeOf.md +0 -81
  278. package/docs/reference/functions/typed.md +0 -56
  279. package/docs/reference/functions/unaryMinus.md +0 -49
  280. package/docs/reference/functions/unaryPlus.md +0 -48
  281. package/docs/reference/functions/unequal.md +0 -74
  282. package/docs/reference/functions/unit.md +0 -48
  283. package/docs/reference/functions/usolve.md +0 -51
  284. package/docs/reference/functions/usolveAll.md +0 -51
  285. package/docs/reference/functions/variance.md +0 -78
  286. package/docs/reference/functions/xgcd.md +0 -47
  287. package/docs/reference/functions/xor.md +0 -53
  288. package/docs/reference/functions/zeros.md +0 -57
  289. package/docs/reference/functions.md +0 -297
  290. package/docs/reference/index.md +0 -5
  291. package/examples/advanced/convert_fraction_to_bignumber.js +0 -59
  292. package/examples/advanced/custom_argument_parsing.js +0 -98
  293. package/examples/advanced/custom_datatype.js +0 -56
  294. package/examples/advanced/custom_evaluate_using_factories.js +0 -19
  295. package/examples/advanced/custom_evaluate_using_import.js +0 -18
  296. package/examples/advanced/custom_loading.js +0 -33
  297. package/examples/advanced/custom_relational_functions.js +0 -62
  298. package/examples/advanced/custom_scope_objects.js +0 -115
  299. package/examples/advanced/expression_trees.js +0 -55
  300. package/examples/advanced/function_transform.js +0 -50
  301. package/examples/advanced/more_secure_eval.js +0 -36
  302. package/examples/advanced/use_bigint.js +0 -43
  303. package/examples/advanced/web_server/math_worker.js +0 -24
  304. package/examples/advanced/web_server/server.js +0 -80
  305. package/examples/algebra.js +0 -34
  306. package/examples/basic_usage.js +0 -49
  307. package/examples/bignumbers.js +0 -52
  308. package/examples/browser/angle_configuration.html +0 -134
  309. package/examples/browser/basic_usage.html +0 -39
  310. package/examples/browser/currency_conversion.html +0 -125
  311. package/examples/browser/custom_separators.html +0 -81
  312. package/examples/browser/plot.html +0 -78
  313. package/examples/browser/pretty_printing_with_mathjax.html +0 -122
  314. package/examples/browser/printing_html.html +0 -170
  315. package/examples/browser/requirejs_loading.html +0 -20
  316. package/examples/browser/rocket_trajectory_optimization.html +0 -301
  317. package/examples/browser/webworkers/webworkers.html +0 -80
  318. package/examples/browser/webworkers/worker.js +0 -28
  319. package/examples/chaining.js +0 -56
  320. package/examples/complex_numbers.js +0 -67
  321. package/examples/expressions.js +0 -188
  322. package/examples/fractions.js +0 -74
  323. package/examples/import.js +0 -95
  324. package/examples/matrices.js +0 -101
  325. package/examples/objects.js +0 -35
  326. package/examples/package.json +0 -3
  327. package/examples/serialization.js +0 -16
  328. package/examples/sparse_matrices.js +0 -19
  329. 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`.