mathjs 10.5.2 → 10.5.3

Sign up to get free protection for your applications and to get access to all the features.
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,116 +0,0 @@
1
- # Custom bundling
2
-
3
- Math.js is a large library containing many data types and functions.
4
- It is well possible that you only need a small portion of the library.
5
- Math.js allows for picking just the functions and data types you need.
6
- This gives faster load times and smaller browser bundles. Math.js uses
7
- ES modules, and creating small bundles using tree-shaking works out of
8
- the box when using Webpack for example.
9
-
10
- This page describes:
11
-
12
- - How to use just a few functions for faster load times and smaller bundles.
13
- - How to use light-weight, number only implementations of functions.
14
- - What to expect from bundle sizes when using tree-shaking.
15
-
16
- ## Using just a few functions
17
-
18
- Using the function `create`, a mathjs instance can be created.
19
- The `all` object contains all functionality available in mathjs,
20
- and a mathjs instance containing everything can be created like:
21
-
22
- ```js
23
- import { create, all } from 'mathjs'
24
-
25
- const math = create(all)
26
- ```
27
-
28
- To create an instance with just a few functions, you have to pass the
29
- factory functions of the functions you need, and all their dependencies.
30
- For example the function `add` depends on the functions `addScalar`,
31
- `equalScalar`, classes `DenseMatrix` and `SparseMatrix`, and more.
32
- Because it is hard to figure out what the dependencies of a function are,
33
- and the dependencies of the dependencies, mathjs provides ready made
34
- collections of all dependencies for every function. For example all
35
- factory functions of function `add` and its dependencies are available
36
- as `addDependencies`.
37
-
38
- Here is a full example of loading just a few functions in a mathjs instance:
39
-
40
- ```js
41
- // file: custom_loading.js
42
-
43
- import {
44
- create,
45
- fractionDependencies,
46
- addDependencies,
47
- divideDependencies,
48
- formatDependencies
49
- } from 'mathjs'
50
-
51
- const config = {
52
- // optionally, you can specify configuration
53
- }
54
-
55
- // Create just the functions we need
56
- const { fraction, add, divide, format } = create({
57
- fractionDependencies,
58
- addDependencies,
59
- divideDependencies,
60
- formatDependencies
61
- }, config)
62
-
63
- // Use the created functions
64
- const a = fraction(1, 3)
65
- const b = fraction(3, 7)
66
- const c = add(a, b)
67
- const d = divide(a, b)
68
- console.log('c =', format(c)) // outputs "c = 16/21"
69
- console.log('d =', format(d)) // outputs "d = 7/9"
70
- ```
71
-
72
- This example can be bundled using for example Webpack:
73
-
74
- ```
75
- npx webpack custom_loading.js -o custom_loading.bundle.js --mode=production
76
- ```
77
-
78
- Only the used parts of mathjs will be bundled thanks to tree-shaking.
79
-
80
-
81
- ## Numbers only
82
-
83
- The functions of mathjs support multiple data types out of the box, like
84
- numbers, bignumbers, complex numbers, units, and matrices. Quite commonly however,
85
- only support for numbers is needed and the other data-types are overkill.
86
-
87
- To accomodate for this use case of only numbers only, mathjs offers light-weight,
88
- number only implementations of all relevant functions. These are available by
89
- importing from `'mathjs/number'` instead of `'mathjs'`:
90
-
91
- ```js
92
- // use light-weight, numbers only implementations of functions
93
- import { create, all } from 'mathjs/number'
94
-
95
- const math = create(all)
96
- console.log(add(2, 3)) // 5
97
- ```
98
-
99
- ## Bundle size
100
-
101
- When using just a few functions of mathjs instead of the whole library,
102
- you may expect the size of the bundle to be just a small fraction of the
103
- complete library. However, to create the function `add` supporting all data
104
- types, all these data types must be included: Unit, BigNumber, Complex,
105
- DenseMatrix, SparseMatrix, etc. A rough idea of the size of different parts of
106
- mathjs:
107
-
108
- - About 5% is coming from core functionality like `create`, `import`, `factory`,
109
- `typed-function`, etc.
110
- - About 30% of the bundle size comes from the data classes `Complex`, `BigNumber`, `Fraction`, `Unit`, `SparseMatrix`, `DenseMatrix`.
111
- - About 25% of the bundle size comes from the expression parser.
112
- Half of this comes from the embedded docs.
113
- - About 40% comes from the about 200 built-in functions and some constants.
114
-
115
- To get a better insight in what is in your JavaScript bundle, you can use
116
- a tool like [source-map-explorer](https://github.com/danvk/source-map-explorer).
@@ -1,102 +0,0 @@
1
- # BigNumbers
2
-
3
- For calculations with an arbitrary precision, math.js supports a `BigNumber`
4
- datatype. BigNumber support is powered by
5
- [decimal.js](https://github.com/MikeMcl/decimal.js/).
6
-
7
- ## Usage
8
-
9
- A BigNumber can be created using the function `bignumber`:
10
-
11
- ```js
12
- math.bignumber('2.3e+500') // BigNumber, 2.3e+500
13
- ```
14
-
15
- Most functions can determine the type of output from the type of input:
16
- a number as input will return a number as output, a BigNumber as input returns
17
- a BigNumber as output. Functions which cannot determine the type of output
18
- from the input (for example `math.evaluate`) use the default number type `number`,
19
- which can be configured when instantiating math.js. To configure the use of
20
- BigNumbers instead of [numbers](numbers.md) by default, configure math.js like:
21
-
22
- ```js
23
- math.config({
24
- number: 'BigNumber', // Default type of number:
25
- // 'number' (default), 'BigNumber', or 'Fraction'
26
- precision: 64 // Number of significant digits for BigNumbers
27
- })
28
-
29
- // use math
30
- math.evaluate('0.1 + 0.2') // BigNumber, 0.3
31
- ```
32
-
33
- The default precision for BigNumber is 64 digits, and can be configured with
34
- the option `precision`.
35
-
36
-
37
- ## Support
38
-
39
- Most functions in math.js support BigNumbers, but not all of them.
40
- For example the function `random` doesn't support BigNumbers.
41
-
42
-
43
- ## Round-off errors
44
-
45
- Calculations with BigNumber are much slower than calculations with Number,
46
- but they can be executed with an arbitrary precision. By using a higher
47
- precision, it is less likely that round-off errors occur:
48
-
49
- ```js
50
- // round-off errors with numbers
51
- math.add(0.1, 0.2) // Number, 0.30000000000000004
52
- math.divide(0.3, 0.2) // Number, 1.4999999999999998
53
-
54
- // no round-off errors with BigNumbers :)
55
- math.add(math.bignumber(0.1), math.bignumber(0.2)) // BigNumber, 0.3
56
- math.divide(math.bignumber(0.3), math.bignumber(0.2)) // BigNumber, 1.5
57
- ```
58
-
59
-
60
- ## Limitations
61
-
62
- It's important to realize that BigNumbers do not solve *all* problems related
63
- to precision and round-off errors. Numbers with an infinite number of digits
64
- cannot be represented with a regular number nor a BigNumber. Though a BigNumber
65
- can store a much larger number of digits, the amount of digits remains limited
66
- if only to keep calculations fast enough to remain practical.
67
-
68
- ```js
69
- const one = math.bignumber(1)
70
- const three = math.bignumber(3)
71
- const third = math.divide(one, three)
72
- console.log(third.toString())
73
- // outputs 0.3333333333333333333333333333333333333333333333333333333333333333
74
-
75
- const ans = math.multiply(third, three)
76
- console.log(ans.toString())
77
- // outputs 0.9999999999999999999999999999999999999999999999999999999999999999
78
- // this should be 1 again, but `third` is rounded to a limited number of digits 3
79
- ```
80
-
81
-
82
- ## Conversion
83
-
84
- BigNumbers can be converted to numbers and vice versa using the functions
85
- `number` and `bignumber`. When converting a BigNumber to a number, the high
86
- precision of the BigNumber will be lost. When a BigNumber is too large to be represented
87
- as Number, it will be initialized as `Infinity`.
88
-
89
- ```js
90
- // converting numbers and BigNumbers
91
- const a = math.number(0.3) // number, 0.3
92
- const b = math.bignumber(a) // BigNumber, 0.3
93
- const c = math.number(b) // number, 0.3
94
-
95
- // exceeding the maximum of a number
96
- const d = math.bignumber('1.2e500') // BigNumber, 1.2e+500
97
- const e = math.number(d) // number, Infinity
98
-
99
- // loosing precision when converting to number
100
- const f = math.bignumber('0.2222222222222222222') // BigNumber, 0.2222222222222222222
101
- const g = math.number(f) // number, 0.2222222222222222
102
- ```
@@ -1,168 +0,0 @@
1
- # Complex Numbers
2
-
3
- Math.js supports the creation, manipulation, and calculations with complex numbers.
4
- Support of complex numbers is powered by the library [complex.js](https://github.com/infusion/Complex.js).
5
-
6
- In mathematics, a complex number is an expression of the form `a + bi`,
7
- where `a` and `b` are real numbers and `i` represents the imaginary number
8
- defined as `i^2 = -1`. (In other words, `i` is the square root of `-1`.)
9
- The real number `a` is called the real part of the complex number,
10
- and the real number `b` is the imaginary part. For example, `3 + 2i` is a
11
- complex number, having real part `3` and imaginary part `2`.
12
- Complex numbers are often used in applied mathematics, control theory,
13
- signal analysis, fluid dynamics and other fields.
14
-
15
- ## Usage
16
-
17
- A complex number is created using the function `math.complex`. This function
18
- accepts:
19
-
20
- - two numbers representing the real and imaginary part of the value,
21
- - a single string containing a complex value in the form `a + bi` where `a`
22
- and `b` respectively represent the real and imaginary part of the complex number.
23
- - an object with either properties `re` and `im` for the real and imaginary
24
- part of the value, or two properties `r` and `phi` containing the polar
25
- coordinates of a complex value.
26
- The function returns a `Complex` object.
27
-
28
- Syntax:
29
-
30
- ```js
31
- math.complex(re: number) : Complex
32
- math.complex(re: number, im: number) : Complex
33
- math.complex(complex: Complex) : Complex
34
- math.complex({re: Number, im: Number}) : Complex
35
- math.complex({r: number, phi: number}) : Complex
36
- math.complex({abs: number, arg: number}) : Complex
37
- math.complex(str: string) : Complex
38
- ```
39
-
40
- Examples:
41
-
42
- ```js
43
- const a = math.complex(2, 3) // Complex 2 + 3i
44
- a.re // Number 2
45
- a.im // Number 3
46
-
47
- const b = math.complex('4 - 2i') // Complex 4 - 2i
48
- b.re = 5 // Number 5
49
- b // Complex 5 - 2i
50
- ```
51
-
52
- ## Calculations
53
-
54
- Most functions of math.js support complex numbers. Complex and real numbers
55
- can be used together.
56
-
57
- ```js
58
- const a = math.complex(2, 3) // Complex 2 + 3i
59
- const b = math.complex('4 - 2i') // Complex 4 - 2i
60
-
61
- math.re(a) // Number 2
62
- math.im(a) // Number 3
63
- math.conj(a) // Complex 2 - 3i
64
-
65
- math.add(a, b) // Complex 6 + i
66
- math.multiply(a, 2) // Complex 4 + 6i
67
- math.sqrt(-4) // Complex 2i
68
- ```
69
-
70
- ## API
71
- A `Complex` object created by `math.complex` contains the following properties and functions:
72
-
73
- ### complex.re
74
-
75
- A number containing the real part of the complex number. Can be read and replaced.
76
-
77
- ### complex.im
78
-
79
- A number containing the imaginary part of the complex number. Can be read and replaced.
80
-
81
- ### complex.clone()
82
-
83
- Create a clone of the complex number.
84
-
85
- ### complex.equals(other)
86
-
87
- Test whether a complex number equals another complex value.
88
-
89
- Two complex numbers are equal when both their real and imaginary parts are
90
- equal.
91
-
92
- ### complex.neg()
93
-
94
- Returns a complex number with a real part and an imaginary part equal in magnitude but opposite in sign to the current complex number.
95
-
96
- ### complex.conjugate()
97
-
98
- Returns a complex number with an equal real part and an imaginary part equal in magnitude but opposite in sign to the current complex number.
99
-
100
- ### complex.inverse()
101
-
102
- Returns a complex number that is inverse of the current complex number.
103
-
104
- ### complex.toVector()
105
-
106
- Get the vector representation of the current complex number. Returns an array of size 2.
107
-
108
- ### complex.toJSON()
109
-
110
- Returns a JSON representation of the complex number, with signature
111
- `{mathjs: 'Complex', re: number, im: number}`.
112
- Used when serializing a complex number, see [Serialization](../core/serialization.md).
113
-
114
- ### complex.toPolar()
115
-
116
- Get the polar coordinates of the complex number, returns
117
- an object with properties `r` and `phi`.
118
-
119
- ### complex.toString()
120
-
121
- Returns a string representation of the complex number, formatted
122
- as `a + bi` where `a` is the real part and `b` the imaginary part.
123
-
124
-
125
- ### complex.format([precision: number])
126
-
127
- Get a string representation of the complex number,
128
- formatted as `a + bi` where `a` is the real part and `b` the imaginary part.
129
- If precision is defined, the units value will be rounded to the provided
130
- number of digits.
131
-
132
- ## Static methods
133
- The following static methods can be accessed using `math.Complex`
134
-
135
-
136
- ### Complex.fromJSON(json)
137
-
138
- Revive a complex number from a JSON object. Accepts
139
- An object `{mathjs: 'Complex', re: number, im: number}`, where the property
140
- `mathjs` is optional.
141
- Used when deserializing a complex number, see [Serialization](../core/serialization.md).
142
-
143
- ### Complex.fromPolar(r: number, phi: number)
144
-
145
- Create a complex number from polar coordinates.
146
-
147
-
148
- ### Complex.compare(a: Complex, b: Complex)
149
-
150
- Returns the comparision result of two complex number:
151
-
152
- - Returns 1 when the real part of `a` is larger than the real part of `b`
153
- - Returns -1 when the real part of `a` is smaller than the real part of `b`
154
- - Returns 1 when the real parts are equal
155
- and the imaginary part of `a` is larger than the imaginary part of `b`
156
- - Returns -1 when the real parts are equal
157
- and the imaginary part of `a` is smaller than the imaginary part of `b`
158
- - Returns 0 when both real and imaginary parts are equal.
159
-
160
- Example:
161
- ```js
162
- const a = math.complex(2, 3) // Complex 2 + 3i
163
- const b = math.complex(2, 1) // Complex 2 + 1i
164
- math.Complex.compare(a,b) // returns 1
165
-
166
- //create from json
167
- const c = math.Complex.fromJSON({mathjs: 'Complex', re: 4, im: 3}) // Complex 4 + 3i
168
- ```
@@ -1,75 +0,0 @@
1
- # Fractions
2
-
3
- For calculations with fractions, math.js supports a `Fraction` data type.
4
- Fraction support is powered by [fraction.js](https://github.com/infusion/Fraction.js).
5
- Unlike [numbers](numbers.md) and [BigNumbers](./bignumbers.md), fractions can
6
- store numbers with infinitely repeating decimals, for example `1/3 = 0.3333333...`,
7
- which can be represented as `0.(3)`, or `2/7` which can be represented as `0.(285714)`.
8
-
9
-
10
- ## Usage
11
-
12
- A Fraction can be created using the function `fraction`:
13
-
14
- ```js
15
- math.fraction('1/3') // Fraction, 1/3
16
- math.fraction(2, 3) // Fraction, 2/3
17
- math.fraction('0.(3)') // Fraction, 1/3
18
- ```
19
-
20
- And can be used in functions like `add` and `multiply` like:
21
-
22
- ```js
23
- math.add(math.fraction('1/3'), math.fraction('1/6')) // Fraction, 1/2
24
- math.multiply(math.fraction('1/4'), math.fraction('1/2')) // Fraction, 1/8
25
- ```
26
-
27
- Note that not all functions support fractions. For example trigonometric
28
- functions doesn't support fractions. When not supported, the functions
29
- will convert the input to numbers and return a number as result.
30
-
31
- Most functions will determine the type of output from the type of input:
32
- a number as input will return a number as output, a Fraction as input returns
33
- a Fraction as output. Functions which cannot determine the type of output
34
- from the input (for example `math.evaluate`) use the default number type `number`,
35
- which can be configured when instantiating math.js. To configure the use of
36
- fractions instead of [numbers](numbers.md) by default, configure math.js like:
37
-
38
- ```js
39
- // Configure the default type of number: 'number' (default), 'BigNumber', or 'Fraction'
40
- math.config({
41
- number: 'Fraction'
42
- })
43
-
44
- // use the expression parser
45
- math.evaluate('0.32 + 0.08') // Fraction, 2/5
46
- ```
47
-
48
- ## Support
49
-
50
- The following functions support fractions:
51
-
52
- - Arithmetic functions: `abs`, `add`, `ceil`, `cube`, `divide`, `dotDivide`, `dotMultiply`, `fix`, `floor`, `gcd`, `mod`, `multiply`, `round`, `sign`, `square`, `subtract`, `unaryMinus`, `unaryPlus`.
53
- - Construction functions: `fraction`.
54
- - Relational functions: `compare`, `deepEqual`, `equal`, `larger`, `largerEq`, `smaller`, `smallerEq`, `unequal`.
55
- - Utils functions: `format`.
56
-
57
-
58
- ## Conversion
59
-
60
- Fractions can be converted to numbers and vice versa using the functions
61
- `number` and `fraction`. When converting a Fraction to a number, precision
62
- may be lost when the value cannot represented in 16 digits.
63
-
64
- ```js
65
- // converting numbers and fractions
66
- const a = math.number(0.3) // number, 0.3
67
- const b = math.fraction(a) // Fraction, 3/10
68
- const c = math.number(b) // number, 0.3
69
-
70
- // loosing precision when converting to number: a fraction can represent
71
- // a number with an infinite number of repeating decimals, a number just
72
- // stores about 16 digits and cuts consecutive digits.
73
- const d = math.fraction('2/5') // Fraction, 2/5
74
- const e = math.number(d) // number, 0.4
75
- ```
@@ -1,67 +0,0 @@
1
- # Data Types
2
-
3
- The functions of math.js support multiple data types, both native JavaScript
4
- types as well as more advanced types implemented in math.js. The data types can
5
- be mixed together in calculations, for example by adding a Number to a
6
- Complex number or Array.
7
-
8
- The supported data types are:
9
-
10
- - Boolean
11
- - [Number](numbers.md)
12
- - [BigNumber](bignumbers.md)
13
- - [Complex](complex_numbers.md)
14
- - [Fraction](fractions.md)
15
- - [Array](matrices.md)
16
- - [Matrix](matrices.md)
17
- - [Unit](units.md)
18
- - String
19
-
20
- Function [`math.typeOf(x)`](../reference/functions/typeOf.md) can be used to get
21
- the type of a variable.
22
-
23
- Example usage:
24
-
25
- ```js
26
- // use numbers
27
- math.subtract(7.1, 2.3) // 4.8
28
- math.round(math.pi, 3) // 3.142
29
- math.sqrt(4.41e2) // 21
30
-
31
- // use BigNumbers
32
- math.add(math.bignumber(0.1), math.bignumber(0.2)) // BigNumber, 0.3
33
-
34
- // use Fractions
35
- math.add(math.fraction(1), math.fraction(3)) // Fraction, 0.(3)
36
-
37
- // use strings
38
- math.add('hello ', 'world') // 'hello world'
39
- math.max('A', 'D', 'C') // 'D'
40
-
41
- // use complex numbers
42
- const a = math.complex(2, 3) // 2 + 3i
43
- a.re // 2
44
- a.im // 3
45
- const b = math.complex('4 - 2i') // 4 - 2i
46
- math.add(a, b) // 6 + i
47
- math.sqrt(-4) // 2i
48
-
49
- // use arrays
50
- const array = [1, 2, 3, 4, 5]
51
- math.factorial(array) // Array, [1, 2, 6, 24, 120]
52
- math.add(array, 3) // Array, [3, 5, 6, 7, 8]
53
-
54
- // use matrices
55
- const matrix = math.matrix([1, 4, 9, 16, 25]) // Matrix, [1, 4, 9, 16, 25]
56
- math.sqrt(matrix) // Matrix, [1, 2, 3, 4, 5]
57
-
58
- // use units
59
- const a = math.unit(55, 'cm') // 550 mm
60
- const b = math.unit('0.1m') // 100 mm
61
- math.add(a, b) // 0.65 m
62
-
63
- // check the type of a variable
64
- math.typeOf(2) // 'number'
65
- math.typeOf(math.unit('2 inch')) // 'Unit'
66
- math.typeOf(math.sqrt(-4)) // 'Complex'
67
- ```