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.
- package/HISTORY.md +8 -0
- package/lib/browser/math.js +3 -3
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/version.js +1 -1
- package/lib/esm/version.js +1 -1
- package/package.json +6 -11
- package/docs/command_line_interface.md +0 -87
- package/docs/core/chaining.md +0 -41
- package/docs/core/configuration.md +0 -144
- package/docs/core/extension.md +0 -263
- package/docs/core/index.md +0 -21
- package/docs/core/serialization.md +0 -50
- package/docs/custom_bundling.md +0 -116
- package/docs/datatypes/bignumbers.md +0 -102
- package/docs/datatypes/complex_numbers.md +0 -168
- package/docs/datatypes/fractions.md +0 -75
- package/docs/datatypes/index.md +0 -67
- package/docs/datatypes/matrices.md +0 -375
- package/docs/datatypes/numbers.md +0 -106
- package/docs/datatypes/units.md +0 -444
- package/docs/expressions/algebra.md +0 -110
- package/docs/expressions/customization.md +0 -379
- package/docs/expressions/expression_trees.md +0 -710
- package/docs/expressions/html_classes.md +0 -38
- package/docs/expressions/index.md +0 -21
- package/docs/expressions/parsing.md +0 -224
- package/docs/expressions/security.md +0 -89
- package/docs/expressions/syntax.md +0 -706
- package/docs/getting_started.md +0 -124
- package/docs/index.md +0 -39
- package/docs/reference/classes/densematrix.md +0 -247
- package/docs/reference/classes/fibonacciheap.md +0 -70
- package/docs/reference/classes/matrixindex.md +0 -133
- package/docs/reference/classes/matrixrange.md +0 -158
- package/docs/reference/classes/resultset.md +0 -47
- package/docs/reference/classes/sparsematrix.md +0 -245
- package/docs/reference/classes/unit.md +0 -242
- package/docs/reference/classes.md +0 -86
- package/docs/reference/constants.md +0 -29
- package/docs/reference/functions/abs.md +0 -46
- package/docs/reference/functions/acos.md +0 -49
- package/docs/reference/functions/acosh.md +0 -47
- package/docs/reference/functions/acot.md +0 -48
- package/docs/reference/functions/acoth.md +0 -46
- package/docs/reference/functions/acsc.md +0 -49
- package/docs/reference/functions/acsch.md +0 -46
- package/docs/reference/functions/add.md +0 -59
- package/docs/reference/functions/and.md +0 -53
- package/docs/reference/functions/apply.md +0 -56
- package/docs/reference/functions/arg.md +0 -53
- package/docs/reference/functions/asec.md +0 -49
- package/docs/reference/functions/asech.md +0 -46
- package/docs/reference/functions/asin.md +0 -49
- package/docs/reference/functions/asinh.md +0 -46
- package/docs/reference/functions/atan.md +0 -49
- package/docs/reference/functions/atan2.md +0 -56
- package/docs/reference/functions/atanh.md +0 -46
- package/docs/reference/functions/bellNumbers.md +0 -45
- package/docs/reference/functions/bignumber.md +0 -47
- package/docs/reference/functions/bin.md +0 -45
- package/docs/reference/functions/bitAnd.md +0 -51
- package/docs/reference/functions/bitNot.md +0 -51
- package/docs/reference/functions/bitOr.md +0 -52
- package/docs/reference/functions/bitXor.md +0 -51
- package/docs/reference/functions/boolean.md +0 -50
- package/docs/reference/functions/catalan.md +0 -45
- package/docs/reference/functions/cbrt.md +0 -60
- package/docs/reference/functions/ceil.md +0 -63
- package/docs/reference/functions/chain.md +0 -54
- package/docs/reference/functions/clone.md +0 -43
- package/docs/reference/functions/column.md +0 -45
- package/docs/reference/functions/combinations.md +0 -49
- package/docs/reference/functions/combinationsWithRep.md +0 -49
- package/docs/reference/functions/compare.md +0 -67
- package/docs/reference/functions/compareNatural.md +0 -92
- package/docs/reference/functions/compareText.md +0 -54
- package/docs/reference/functions/compile.md +0 -56
- package/docs/reference/functions/complex.md +0 -17
- package/docs/reference/functions/composition.md +0 -46
- package/docs/reference/functions/concat.md +0 -56
- package/docs/reference/functions/config.md +0 -44
- package/docs/reference/functions/conj.md +0 -50
- package/docs/reference/functions/cos.md +0 -51
- package/docs/reference/functions/cosh.md +0 -46
- package/docs/reference/functions/cot.md +0 -47
- package/docs/reference/functions/coth.md +0 -49
- package/docs/reference/functions/count.md +0 -45
- package/docs/reference/functions/createUnit.md +0 -52
- package/docs/reference/functions/cross.md +0 -58
- package/docs/reference/functions/csc.md +0 -47
- package/docs/reference/functions/csch.md +0 -49
- package/docs/reference/functions/ctranspose.md +0 -50
- package/docs/reference/functions/cube.md +0 -51
- package/docs/reference/functions/cumsum.md +0 -57
- package/docs/reference/functions/deepEqual.md +0 -53
- package/docs/reference/functions/derivative.md +0 -61
- package/docs/reference/functions/det.md +0 -49
- package/docs/reference/functions/diag.md +0 -61
- package/docs/reference/functions/diff.md +0 -70
- package/docs/reference/functions/distance.md +0 -80
- package/docs/reference/functions/divide.md +0 -55
- package/docs/reference/functions/dot.md +0 -48
- package/docs/reference/functions/dotDivide.md +0 -52
- package/docs/reference/functions/dotMultiply.md +0 -52
- package/docs/reference/functions/dotPow.md +0 -49
- package/docs/reference/functions/eigs.md +0 -54
- package/docs/reference/functions/equal.md +0 -75
- package/docs/reference/functions/equalText.md +0 -53
- package/docs/reference/functions/erf.md +0 -49
- package/docs/reference/functions/evaluate.md +0 -56
- package/docs/reference/functions/exp.md +0 -54
- package/docs/reference/functions/expm.md +0 -49
- package/docs/reference/functions/expm1.md +0 -54
- package/docs/reference/functions/factorial.md +0 -49
- package/docs/reference/functions/fft.md +0 -35
- package/docs/reference/functions/filter.md +0 -50
- package/docs/reference/functions/fix.md +0 -62
- package/docs/reference/functions/flatten.md +0 -46
- package/docs/reference/functions/floor.md +0 -66
- package/docs/reference/functions/forEach.md +0 -41
- package/docs/reference/functions/format.md +0 -127
- package/docs/reference/functions/fraction.md +0 -45
- package/docs/reference/functions/gamma.md +0 -49
- package/docs/reference/functions/gcd.md +0 -50
- package/docs/reference/functions/getMatrixDataType.md +0 -59
- package/docs/reference/functions/hasNumericValue.md +0 -55
- package/docs/reference/functions/help.md +0 -42
- package/docs/reference/functions/hex.md +0 -45
- package/docs/reference/functions/hypot.md +0 -51
- package/docs/reference/functions/identity.md +0 -57
- package/docs/reference/functions/ifft.md +0 -35
- package/docs/reference/functions/im.md +0 -53
- package/docs/reference/functions/import.md +0 -68
- package/docs/reference/functions/index.md +0 -55
- package/docs/reference/functions/intersect.md +0 -50
- package/docs/reference/functions/inv.md +0 -45
- package/docs/reference/functions/invmod.md +0 -47
- package/docs/reference/functions/isInteger.md +0 -55
- package/docs/reference/functions/isNaN.md +0 -56
- package/docs/reference/functions/isNegative.md +0 -55
- package/docs/reference/functions/isNumeric.md +0 -55
- package/docs/reference/functions/isPositive.md +0 -57
- package/docs/reference/functions/isPrime.md +0 -54
- package/docs/reference/functions/isZero.md +0 -59
- package/docs/reference/functions/kldivergence.md +0 -41
- package/docs/reference/functions/kron.md +0 -53
- package/docs/reference/functions/larger.md +0 -60
- package/docs/reference/functions/largerEq.md +0 -56
- package/docs/reference/functions/lcm.md +0 -54
- package/docs/reference/functions/leafCount.md +0 -52
- package/docs/reference/functions/leftShift.md +0 -52
- package/docs/reference/functions/lgamma.md +0 -46
- package/docs/reference/functions/log.md +0 -57
- package/docs/reference/functions/log10.md +0 -50
- package/docs/reference/functions/log1p.md +0 -54
- package/docs/reference/functions/log2.md +0 -50
- package/docs/reference/functions/lsolve.md +0 -51
- package/docs/reference/functions/lsolveAll.md +0 -51
- package/docs/reference/functions/lup.md +0 -52
- package/docs/reference/functions/lusolve.md +0 -59
- package/docs/reference/functions/mad.md +0 -50
- package/docs/reference/functions/map.md +0 -65
- package/docs/reference/functions/matrix.md +0 -56
- package/docs/reference/functions/matrixFromColumns.md +0 -49
- package/docs/reference/functions/matrixFromFunction.md +0 -54
- package/docs/reference/functions/matrixFromRows.md +0 -49
- package/docs/reference/functions/max.md +0 -61
- package/docs/reference/functions/mean.md +0 -57
- package/docs/reference/functions/median.md +0 -57
- package/docs/reference/functions/min.md +0 -61
- package/docs/reference/functions/mod.md +0 -59
- package/docs/reference/functions/mode.md +0 -50
- package/docs/reference/functions/multinomial.md +0 -46
- package/docs/reference/functions/multiply.md +0 -60
- package/docs/reference/functions/norm.md +0 -59
- package/docs/reference/functions/not.md +0 -50
- package/docs/reference/functions/nthRoot.md +0 -53
- package/docs/reference/functions/nthRoots.md +0 -58
- package/docs/reference/functions/number.md +0 -49
- package/docs/reference/functions/numeric.md +0 -52
- package/docs/reference/functions/oct.md +0 -45
- package/docs/reference/functions/ones.md +0 -59
- package/docs/reference/functions/or.md +0 -53
- package/docs/reference/functions/parse.md +0 -56
- package/docs/reference/functions/parser.md +0 -70
- package/docs/reference/functions/partitionSelect.md +0 -53
- package/docs/reference/functions/permutations.md +0 -51
- package/docs/reference/functions/pickRandom.md +0 -59
- package/docs/reference/functions/pinv.md +0 -44
- package/docs/reference/functions/pow.md +0 -65
- package/docs/reference/functions/print.md +0 -64
- package/docs/reference/functions/prod.md +0 -55
- package/docs/reference/functions/qr.md +0 -65
- package/docs/reference/functions/quantileSeq.md +0 -62
- package/docs/reference/functions/random.md +0 -54
- package/docs/reference/functions/randomInt.md +0 -53
- package/docs/reference/functions/range.md +0 -70
- package/docs/reference/functions/rationalize.md +0 -68
- package/docs/reference/functions/re.md +0 -53
- package/docs/reference/functions/reshape.md +0 -60
- package/docs/reference/functions/resize.md +0 -51
- package/docs/reference/functions/resolve.md +0 -46
- package/docs/reference/functions/rightArithShift.md +0 -52
- package/docs/reference/functions/rightLogShift.md +0 -52
- package/docs/reference/functions/rotate.md +0 -53
- package/docs/reference/functions/rotationMatrix.md +0 -57
- package/docs/reference/functions/round.md +0 -61
- package/docs/reference/functions/row.md +0 -45
- package/docs/reference/functions/sec.md +0 -47
- package/docs/reference/functions/sech.md +0 -49
- package/docs/reference/functions/setCartesian.md +0 -49
- package/docs/reference/functions/setDifference.md +0 -47
- package/docs/reference/functions/setDistinct.md +0 -43
- package/docs/reference/functions/setIntersect.md +0 -46
- package/docs/reference/functions/setIsSubset.md +0 -47
- package/docs/reference/functions/setMultiplicity.md +0 -46
- package/docs/reference/functions/setPowerset.md +0 -43
- package/docs/reference/functions/setSize.md +0 -47
- package/docs/reference/functions/setSymDifference.md +0 -47
- package/docs/reference/functions/setUnion.md +0 -46
- package/docs/reference/functions/sign.md +0 -52
- package/docs/reference/functions/simplify.md +0 -130
- package/docs/reference/functions/simplifyConstant.md +0 -52
- package/docs/reference/functions/simplifyCore.md +0 -50
- package/docs/reference/functions/sin.md +0 -51
- package/docs/reference/functions/sinh.md +0 -46
- package/docs/reference/functions/size.md +0 -50
- package/docs/reference/functions/slu.md +0 -57
- package/docs/reference/functions/smaller.md +0 -60
- package/docs/reference/functions/smallerEq.md +0 -56
- package/docs/reference/functions/sort.md +0 -56
- package/docs/reference/functions/sparse.md +0 -51
- package/docs/reference/functions/splitUnit.md +0 -37
- package/docs/reference/functions/sqrt.md +0 -50
- package/docs/reference/functions/sqrtm.md +0 -46
- package/docs/reference/functions/square.md +0 -51
- package/docs/reference/functions/squeeze.md +0 -53
- package/docs/reference/functions/std.md +0 -76
- package/docs/reference/functions/stirlingS2.md +0 -52
- package/docs/reference/functions/string.md +0 -49
- package/docs/reference/functions/subset.md +0 -65
- package/docs/reference/functions/subtract.md +0 -54
- package/docs/reference/functions/sum.md +0 -54
- package/docs/reference/functions/symbolicEqual.md +0 -62
- package/docs/reference/functions/tan.md +0 -49
- package/docs/reference/functions/tanh.md +0 -50
- package/docs/reference/functions/to.md +0 -47
- package/docs/reference/functions/trace.md +0 -50
- package/docs/reference/functions/transpose.md +0 -49
- package/docs/reference/functions/typeOf.md +0 -81
- package/docs/reference/functions/typed.md +0 -56
- package/docs/reference/functions/unaryMinus.md +0 -49
- package/docs/reference/functions/unaryPlus.md +0 -48
- package/docs/reference/functions/unequal.md +0 -74
- package/docs/reference/functions/unit.md +0 -48
- package/docs/reference/functions/usolve.md +0 -51
- package/docs/reference/functions/usolveAll.md +0 -51
- package/docs/reference/functions/variance.md +0 -78
- package/docs/reference/functions/xgcd.md +0 -47
- package/docs/reference/functions/xor.md +0 -53
- package/docs/reference/functions/zeros.md +0 -57
- package/docs/reference/functions.md +0 -297
- package/docs/reference/index.md +0 -5
- package/examples/advanced/convert_fraction_to_bignumber.js +0 -59
- package/examples/advanced/custom_argument_parsing.js +0 -98
- package/examples/advanced/custom_datatype.js +0 -56
- package/examples/advanced/custom_evaluate_using_factories.js +0 -19
- package/examples/advanced/custom_evaluate_using_import.js +0 -18
- package/examples/advanced/custom_loading.js +0 -33
- package/examples/advanced/custom_relational_functions.js +0 -62
- package/examples/advanced/custom_scope_objects.js +0 -115
- package/examples/advanced/expression_trees.js +0 -55
- package/examples/advanced/function_transform.js +0 -50
- package/examples/advanced/more_secure_eval.js +0 -36
- package/examples/advanced/use_bigint.js +0 -43
- package/examples/advanced/web_server/math_worker.js +0 -24
- package/examples/advanced/web_server/server.js +0 -80
- package/examples/algebra.js +0 -34
- package/examples/basic_usage.js +0 -49
- package/examples/bignumbers.js +0 -52
- package/examples/browser/angle_configuration.html +0 -134
- package/examples/browser/basic_usage.html +0 -39
- package/examples/browser/currency_conversion.html +0 -125
- package/examples/browser/custom_separators.html +0 -81
- package/examples/browser/plot.html +0 -78
- package/examples/browser/pretty_printing_with_mathjax.html +0 -122
- package/examples/browser/printing_html.html +0 -170
- package/examples/browser/requirejs_loading.html +0 -20
- package/examples/browser/rocket_trajectory_optimization.html +0 -301
- package/examples/browser/webworkers/webworkers.html +0 -80
- package/examples/browser/webworkers/worker.js +0 -28
- package/examples/chaining.js +0 -56
- package/examples/complex_numbers.js +0 -67
- package/examples/expressions.js +0 -188
- package/examples/fractions.js +0 -74
- package/examples/import.js +0 -95
- package/examples/matrices.js +0 -101
- package/examples/objects.js +0 -35
- package/examples/package.json +0 -3
- package/examples/serialization.js +0 -16
- package/examples/sparse_matrices.js +0 -19
- 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`.
|