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,170 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<title>math.js | printing HTML</title>
|
|
6
|
-
|
|
7
|
-
<script src="../../lib/browser/math.js"></script>
|
|
8
|
-
|
|
9
|
-
<style>
|
|
10
|
-
body {
|
|
11
|
-
font-size: 11pt;
|
|
12
|
-
font-family: verdana, arial, sans-serif;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
h1 {
|
|
16
|
-
font-size: 1rem;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
fieldset {
|
|
20
|
-
display: inline;
|
|
21
|
-
margin: 0 50px 10px 0;
|
|
22
|
-
padding: 0;
|
|
23
|
-
border: none;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
input[type=text] {
|
|
27
|
-
font-size: 11pt;
|
|
28
|
-
font-family: verdana, arial, sans-serif;
|
|
29
|
-
padding: 5px;
|
|
30
|
-
width: calc(100% - 14px);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
label {
|
|
34
|
-
margin: 0 5px 0 0;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
table {
|
|
38
|
-
width: 100%;
|
|
39
|
-
border-collapse: collapse;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
table td,
|
|
43
|
-
table th {
|
|
44
|
-
padding: 5px;
|
|
45
|
-
border: 1px solid LightGrey;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
table th {
|
|
49
|
-
background-color: LightGrey;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/* style the HTML output */
|
|
53
|
-
.math-function {
|
|
54
|
-
color: Purple;
|
|
55
|
-
font-weight: bold;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
.math-number {
|
|
59
|
-
color: Blue;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
.math-boolean {
|
|
63
|
-
color: Green;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
.math-string {
|
|
67
|
-
color: Grey;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
.math-string::before,
|
|
71
|
-
.math-string::after {
|
|
72
|
-
content: "\"";
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.math-property {
|
|
76
|
-
font-style: italic;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.math-explicit-binary-operator::before,
|
|
80
|
-
.math-explicit-binary-operator::after {
|
|
81
|
-
content: " ";
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
.math-separator::after,
|
|
85
|
-
.math-assignment-operator::after {
|
|
86
|
-
content: " ";
|
|
87
|
-
}
|
|
88
|
-
</style>
|
|
89
|
-
</head>
|
|
90
|
-
<body>
|
|
91
|
-
<h1>Expression evaluation and HTML code generation with math.js</h1>
|
|
92
|
-
<form>
|
|
93
|
-
<fieldset>
|
|
94
|
-
Parenthesis option:
|
|
95
|
-
<label><input type="radio" name="parenthesis" value="keep" checked>keep</label>
|
|
96
|
-
<label><input type="radio" name="parenthesis" value="auto">auto</label>
|
|
97
|
-
<label><input type="radio" name="parenthesis" value="all">all</label>
|
|
98
|
-
</fieldset>
|
|
99
|
-
<fieldset>
|
|
100
|
-
Implicit multiplication:
|
|
101
|
-
<label><input type="radio" name="implicit" value="hide" checked>hide</label>
|
|
102
|
-
<label><input type="radio" name="implicit" value="show">show</label>
|
|
103
|
-
</fieldset>
|
|
104
|
-
</form>
|
|
105
|
-
<table>
|
|
106
|
-
<tr>
|
|
107
|
-
<th>Expression</th>
|
|
108
|
-
<td><input type="text" id="expr"/></td>
|
|
109
|
-
</tr>
|
|
110
|
-
<tr>
|
|
111
|
-
<th>Result</th>
|
|
112
|
-
<td><div id="result"></div></td>
|
|
113
|
-
</tr>
|
|
114
|
-
<tr>
|
|
115
|
-
<th>HTML output</th>
|
|
116
|
-
<td><div id="output">$$$$</div></td>
|
|
117
|
-
</tr>
|
|
118
|
-
<tr>
|
|
119
|
-
<th>HTML code</th>
|
|
120
|
-
<td><div id="code">$$$$</div></td>
|
|
121
|
-
</tr>
|
|
122
|
-
</table>
|
|
123
|
-
<script>
|
|
124
|
-
const expr = document.getElementById('expr')
|
|
125
|
-
const output = document.getElementById('output')
|
|
126
|
-
const code = document.getElementById('code')
|
|
127
|
-
const result = document.getElementById('result')
|
|
128
|
-
let options = {parenthesis: 'keep', implicit: 'hide'}
|
|
129
|
-
|
|
130
|
-
// initialize with an example expression
|
|
131
|
-
expr.value = 'sqrt(75/3)+det([[-1,2],[3,1]])-sin(pi/4)^2'
|
|
132
|
-
|
|
133
|
-
function print () {
|
|
134
|
-
let parsed = null
|
|
135
|
-
|
|
136
|
-
try {
|
|
137
|
-
// parse the expression
|
|
138
|
-
parsed = math.parse(expr.value)
|
|
139
|
-
|
|
140
|
-
// evaluate the result of the expression
|
|
141
|
-
result.innerHTML = math.format(parsed.compile().evaluate())
|
|
142
|
-
|
|
143
|
-
// print the HTML output
|
|
144
|
-
const html = math.parse(expr.value).toHTML(options)
|
|
145
|
-
output.innerHTML = html
|
|
146
|
-
|
|
147
|
-
// print the HTML code
|
|
148
|
-
code.innerHTML = html.replace(/</g, '<').
|
|
149
|
-
replace(/>/g, '>').
|
|
150
|
-
replace(/<\/span>/g, '</span><br />')
|
|
151
|
-
}
|
|
152
|
-
catch (err) {
|
|
153
|
-
result.innerHTML = '<span style="color: red;">' + err.toString() + '</span>'
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
window.onload = print
|
|
158
|
-
expr.oninput = print
|
|
159
|
-
|
|
160
|
-
// make the controls work
|
|
161
|
-
const controls = document.querySelectorAll('input[type=radio]')
|
|
162
|
-
controls.forEach(function (control) {
|
|
163
|
-
control.onclick = function() {
|
|
164
|
-
options[control.name] = control.value
|
|
165
|
-
print()
|
|
166
|
-
}
|
|
167
|
-
})
|
|
168
|
-
</script>
|
|
169
|
-
</body>
|
|
170
|
-
</html>
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<title>math.js | require.js loading</title>
|
|
6
|
-
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.20/require.min.js"></script>
|
|
7
|
-
</head>
|
|
8
|
-
<body>
|
|
9
|
-
|
|
10
|
-
<script>
|
|
11
|
-
// load math.js using require.js
|
|
12
|
-
require(['../../lib/browser/math.js'], function (math) {
|
|
13
|
-
// evaluate some expression
|
|
14
|
-
const result = math.evaluate('1.2 * (2 + 4.5)')
|
|
15
|
-
document.write(result)
|
|
16
|
-
})
|
|
17
|
-
</script>
|
|
18
|
-
|
|
19
|
-
</body>
|
|
20
|
-
</html>
|
|
@@ -1,301 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
|
|
4
|
-
<head>
|
|
5
|
-
<meta charset="utf-8">
|
|
6
|
-
<title>math.js | rocket trajectory optimization</title>
|
|
7
|
-
|
|
8
|
-
<script src="../../lib/browser/math.js"></script>
|
|
9
|
-
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script>
|
|
10
|
-
|
|
11
|
-
<style>
|
|
12
|
-
body {
|
|
13
|
-
font-family: sans-serif;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
#canvas-grid {
|
|
17
|
-
display: grid;
|
|
18
|
-
grid-template-columns: repeat(2, 1fr);
|
|
19
|
-
gap: 5%;
|
|
20
|
-
margin-top: 5%;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
#canvas-grid>div {
|
|
24
|
-
overflow: hidden;
|
|
25
|
-
}
|
|
26
|
-
</style>
|
|
27
|
-
</head>
|
|
28
|
-
|
|
29
|
-
<body>
|
|
30
|
-
<h1>Rocket trajectory optimization</h1>
|
|
31
|
-
<p>
|
|
32
|
-
This example simulates the launch of a SpaceX Falcon 9 modeled using a system of ordinary differential equations.
|
|
33
|
-
</p>
|
|
34
|
-
|
|
35
|
-
<canvas id="canvas" width="1600" height="600"></canvas>
|
|
36
|
-
<div id="canvas-grid"></div>
|
|
37
|
-
|
|
38
|
-
<script>
|
|
39
|
-
// Solve ODE `dx/dt = f(x,t), x(0) = x0` numerically.
|
|
40
|
-
function ndsolve(f, x0, dt, tmax) {
|
|
41
|
-
let x = x0.clone() // Current values of variables
|
|
42
|
-
const result = [x] // Contains entire solution
|
|
43
|
-
const nsteps = math.divide(tmax, dt) // Number of time steps
|
|
44
|
-
for (let i = 0; i < nsteps; i++) {
|
|
45
|
-
// Compute derivatives
|
|
46
|
-
const dxdt = f.map(func => func(...x.toArray()))
|
|
47
|
-
// Euler method to compute next time step
|
|
48
|
-
const dx = math.multiply(dxdt, dt)
|
|
49
|
-
x = math.add(x, dx)
|
|
50
|
-
result.push(x)
|
|
51
|
-
}
|
|
52
|
-
return math.matrix(result)
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Import the numerical ODE solver
|
|
56
|
-
math.import({ ndsolve })
|
|
57
|
-
|
|
58
|
-
// Create a math.js context for our simulation. Everything else occurs in the context of the expression parser!
|
|
59
|
-
const sim = math.parser()
|
|
60
|
-
|
|
61
|
-
sim.evaluate("G = 6.67408e-11 m^3 kg^-1 s^-2") // Gravitational constant
|
|
62
|
-
sim.evaluate("mbody = 5.9724e24 kg") // Mass of Earth
|
|
63
|
-
sim.evaluate("mu = G * mbody") // Standard gravitational parameter
|
|
64
|
-
sim.evaluate("g0 = 9.80665 m/s^2") // Standard gravity: used for calculating prop consumption (dmdt)
|
|
65
|
-
sim.evaluate("r0 = 6371 km") // Mean radius of Earth
|
|
66
|
-
sim.evaluate("t0 = 0 s") // Simulation start
|
|
67
|
-
sim.evaluate("dt = 0.5 s") // Simulation timestep
|
|
68
|
-
sim.evaluate("tfinal = 149.5 s") // Simulation duration
|
|
69
|
-
sim.evaluate("isp_sea = 282 s") // Specific impulse (at sea level)
|
|
70
|
-
sim.evaluate("isp_vac = 311 s") // Specific impulse (in vacuum)
|
|
71
|
-
sim.evaluate("gamma0 = 89.99970 deg") // Initial pitch angle (90 deg is vertical)
|
|
72
|
-
sim.evaluate("v0 = 1 m/s") // Initial velocity (must be non-zero because ODE is ill-conditioned)
|
|
73
|
-
sim.evaluate("phi0 = 0 deg") // Initial orbital reference angle
|
|
74
|
-
sim.evaluate("m1 = 433100 kg") // First stage mass
|
|
75
|
-
sim.evaluate("m2 = 111500 kg") // Second stage mass
|
|
76
|
-
sim.evaluate("m3 = 1700 kg") // Third stage / fairing mass
|
|
77
|
-
sim.evaluate("mp = 5000 kg") // Payload mass
|
|
78
|
-
sim.evaluate("m0 = m1+m2+m3+mp") // Initial mass of rocket
|
|
79
|
-
sim.evaluate("dm = 2750 kg/s") // Mass flow rate
|
|
80
|
-
sim.evaluate("A = (3.66 m)^2 * pi") // Area of the rocket
|
|
81
|
-
sim.evaluate("dragCoef = 0.2") // Drag coefficient
|
|
82
|
-
|
|
83
|
-
// Define the equations of motion. We just thrust into current direction of motion, e.g. making a gravity turn.
|
|
84
|
-
sim.evaluate("gravity(r) = mu / r^2")
|
|
85
|
-
sim.evaluate("angVel(r, v, gamma) = v/r * cos(gamma) * rad") // Angular velocity of rocket around moon
|
|
86
|
-
sim.evaluate("density(r) = 1.2250 kg/m^3 * exp(-g0 * (r - r0) / (83246.8 m^2/s^2))") // Assume constant temperature
|
|
87
|
-
sim.evaluate("drag(r, v) = 1/2 * density(r) .* v.^2 * A * dragCoef")
|
|
88
|
-
sim.evaluate("isp(r) = isp_vac + (isp_sea - isp_vac) * density(r)/density(r0)") // pressure ~ density for constant temperature
|
|
89
|
-
sim.evaluate("thrust(isp) = g0 * isp * dm")
|
|
90
|
-
// It is important to maintain the same argument order for each of these functions.
|
|
91
|
-
sim.evaluate("drdt(r, v, m, phi, gamma, t) = v sin(gamma)")
|
|
92
|
-
sim.evaluate("dvdt(r, v, m, phi, gamma, t) = - gravity(r) * sin(gamma) + (thrust(isp(r)) - drag(r, v)) / m")
|
|
93
|
-
sim.evaluate("dmdt(r, v, m, phi, gamma, t) = - dm")
|
|
94
|
-
sim.evaluate("dphidt(r, v, m, phi, gamma, t) = angVel(r, v, gamma)")
|
|
95
|
-
sim.evaluate("dgammadt(r, v, m, phi, gamma, t) = angVel(r, v, gamma) - gravity(r) * cos(gamma) / v * rad")
|
|
96
|
-
sim.evaluate("dtdt(r, v, m, phi, gamma, t) = 1")
|
|
97
|
-
|
|
98
|
-
// Remember to maintain the same variable order in the call to ndsolve.
|
|
99
|
-
sim.evaluate("result_stage1 = ndsolve([drdt, dvdt, dmdt, dphidt, dgammadt, dtdt], [r0, v0, m0, phi0, gamma0, t0], dt, tfinal)")
|
|
100
|
-
|
|
101
|
-
// Reset initial conditions for interstage flight
|
|
102
|
-
sim.evaluate("dm = 0 kg/s")
|
|
103
|
-
sim.evaluate("tfinal = 10 s")
|
|
104
|
-
sim.evaluate("x = flatten(result_stage1[end,:])")
|
|
105
|
-
sim.evaluate("x[3] = m2+m3+mp") // New mass after stage seperation
|
|
106
|
-
sim.evaluate("result_interstage = ndsolve([drdt, dvdt, dmdt, dphidt, dgammadt, dtdt], x, dt, tfinal)")
|
|
107
|
-
|
|
108
|
-
// Reset initial conditions for stage 2 flight
|
|
109
|
-
sim.evaluate("dm = 270.8 kg/s")
|
|
110
|
-
sim.evaluate("isp_vac = 348 s")
|
|
111
|
-
sim.evaluate("tfinal = 350 s")
|
|
112
|
-
sim.evaluate("x = flatten(result_interstage[end,:])")
|
|
113
|
-
sim.evaluate("result_stage2 = ndsolve([drdt, dvdt, dmdt, dphidt, dgammadt, dtdt], x, dt, tfinal)")
|
|
114
|
-
|
|
115
|
-
// Reset initial conditions for unpowered flight
|
|
116
|
-
sim.evaluate("dm = 0 kg/s")
|
|
117
|
-
sim.evaluate("tfinal = 900 s")
|
|
118
|
-
sim.evaluate("dt = 10 s")
|
|
119
|
-
sim.evaluate("x = flatten(result_stage2[end,:])")
|
|
120
|
-
sim.evaluate("result_unpowered1 = ndsolve([drdt, dvdt, dmdt, dphidt, dgammadt, dtdt], x, dt, tfinal)")
|
|
121
|
-
|
|
122
|
-
// Reset initial conditions for final orbit insertion
|
|
123
|
-
sim.evaluate("dm = 270.8 kg/s")
|
|
124
|
-
sim.evaluate("tfinal = 39 s")
|
|
125
|
-
sim.evaluate("dt = 0.5 s")
|
|
126
|
-
sim.evaluate("x = flatten(result_unpowered1[end,:])")
|
|
127
|
-
sim.evaluate("result_insertion = ndsolve([drdt, dvdt, dmdt, dphidt, dgammadt, dtdt], x, dt, tfinal)")
|
|
128
|
-
|
|
129
|
-
// Reset initial conditions for unpowered flight
|
|
130
|
-
sim.evaluate("dm = 0 kg/s")
|
|
131
|
-
sim.evaluate("tfinal = 250 s")
|
|
132
|
-
sim.evaluate("dt = 10 s")
|
|
133
|
-
sim.evaluate("x = flatten(result_insertion[end,:])")
|
|
134
|
-
sim.evaluate("result_unpowered2 = ndsolve([drdt, dvdt, dmdt, dphidt, dgammadt, dtdt], x, dt, tfinal)")
|
|
135
|
-
|
|
136
|
-
// Now it's time to prepare results for plotting
|
|
137
|
-
const resultNames = ['stage1', 'interstage', 'stage2', 'unpowered1', 'insertion', 'unpowered2']
|
|
138
|
-
.map(stageName => `result_${stageName}`)
|
|
139
|
-
|
|
140
|
-
// Concat result matrices
|
|
141
|
-
sim.set('result',
|
|
142
|
-
math.concat(
|
|
143
|
-
...resultNames.map(resultName =>
|
|
144
|
-
sim.evaluate(`${resultName}[:end-1, :]`) // Avoid overlap
|
|
145
|
-
),
|
|
146
|
-
0 // Concat in row-dimension
|
|
147
|
-
)
|
|
148
|
-
)
|
|
149
|
-
|
|
150
|
-
const mainDatasets = resultNames.map((resultName, i) => ({
|
|
151
|
-
label: resultName.slice(7),
|
|
152
|
-
data: sim.evaluate(
|
|
153
|
-
'concat('
|
|
154
|
-
+ `(${resultName}[:,4] - phi0) * r0 / rad / km,` // Surface distance from start (in km)
|
|
155
|
-
+ `(${resultName}[:,1] - r0) / km` // Height above surface (in km)
|
|
156
|
-
+ ')'
|
|
157
|
-
).toArray().map(([x, y]) => ({ x, y })),
|
|
158
|
-
borderColor: i % 2 ? '#999' : '#dc3912',
|
|
159
|
-
fill: false,
|
|
160
|
-
pointRadius: 0,
|
|
161
|
-
}))
|
|
162
|
-
new Chart(document.getElementById('canvas'), {
|
|
163
|
-
type: 'line',
|
|
164
|
-
data: { datasets: mainDatasets },
|
|
165
|
-
options: getMainChartOptions()
|
|
166
|
-
})
|
|
167
|
-
|
|
168
|
-
createChart([{
|
|
169
|
-
label: 'velocity (in m/s)',
|
|
170
|
-
data: sim.evaluate("result[:,[2,6]]")
|
|
171
|
-
.toArray()
|
|
172
|
-
.map(([v, t]) => ({ x: t.toNumber('s'), y: v.toNumber('m/s') }))
|
|
173
|
-
}])
|
|
174
|
-
createChart([{
|
|
175
|
-
label: 'height (in km)',
|
|
176
|
-
data: sim.evaluate("concat((result[:, 1] - r0), result[:, 6])")
|
|
177
|
-
.toArray()
|
|
178
|
-
.map(([r, t]) => ({ x: t.toNumber('s'), y: r.toNumber('km') })),
|
|
179
|
-
}])
|
|
180
|
-
createChart([{
|
|
181
|
-
label: 'gamma (in deg)',
|
|
182
|
-
data: sim.evaluate("result[:, [5,6]]")
|
|
183
|
-
.toArray()
|
|
184
|
-
.map(([gamma, t]) => ({ x: t.toNumber('s'), y: gamma.toNumber('deg') })),
|
|
185
|
-
}])
|
|
186
|
-
createChart([{
|
|
187
|
-
label: 'acceleration (in m/s^2)',
|
|
188
|
-
data: sim.evaluate("concat(diff(result[:, 2]) ./ diff(result[:, 6]), result[:end-1, 6])")
|
|
189
|
-
.toArray()
|
|
190
|
-
.map(([acc, t]) => ({ x: t.toNumber('s'), y: acc.toNumber('m/s^2') })),
|
|
191
|
-
}])
|
|
192
|
-
createChart([{
|
|
193
|
-
label: 'drag acceleration (in m/s^2)',
|
|
194
|
-
data: sim.evaluate("concat(drag(result[:, 1], result[:, 2]) ./ result[:, 3], result[:, 6])")
|
|
195
|
-
.toArray()
|
|
196
|
-
.map(([dragAcc, t]) => ({ x: t.toNumber('s'), y: dragAcc.toNumber('m/s^2') })),
|
|
197
|
-
}])
|
|
198
|
-
createChart(
|
|
199
|
-
[
|
|
200
|
-
{
|
|
201
|
-
data: sim.evaluate("result[:, [1,4]]")
|
|
202
|
-
.toArray()
|
|
203
|
-
.map(([r, phi]) => math.rotate([r.toNumber('km'), 0], phi))
|
|
204
|
-
.map(([x, y]) => ({ x, y })),
|
|
205
|
-
},
|
|
206
|
-
{
|
|
207
|
-
data: sim.evaluate("map(0:0.25:360, function(angle) = rotate([r0/km, 0], angle))")
|
|
208
|
-
.toArray()
|
|
209
|
-
.map(([x, y]) => ({ x, y })),
|
|
210
|
-
borderColor: "#999",
|
|
211
|
-
fill: true
|
|
212
|
-
}
|
|
213
|
-
],
|
|
214
|
-
getEarthChartOptions()
|
|
215
|
-
)
|
|
216
|
-
|
|
217
|
-
// Helper functions for plotting data (nothing to learn about math.js from here on)
|
|
218
|
-
function createChart(datasets, options = {}) {
|
|
219
|
-
const container = document.createElement("div")
|
|
220
|
-
document.querySelector("#canvas-grid").appendChild(container)
|
|
221
|
-
const canvas = document.createElement("canvas")
|
|
222
|
-
container.appendChild(canvas)
|
|
223
|
-
new Chart(canvas, {
|
|
224
|
-
type: 'line',
|
|
225
|
-
data: {
|
|
226
|
-
datasets: datasets.map(dataset => ({
|
|
227
|
-
borderColor: "#dc3912",
|
|
228
|
-
fill: false,
|
|
229
|
-
pointRadius: 0,
|
|
230
|
-
...dataset
|
|
231
|
-
}))
|
|
232
|
-
},
|
|
233
|
-
options: getChartOptions(options)
|
|
234
|
-
})
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
function getMainChartOptions() {
|
|
238
|
-
return {
|
|
239
|
-
scales: {
|
|
240
|
-
xAxes: [{
|
|
241
|
-
type: 'linear',
|
|
242
|
-
position: 'bottom',
|
|
243
|
-
scaleLabel: {
|
|
244
|
-
display: true,
|
|
245
|
-
labelString: 'surface distance travelled (in km)'
|
|
246
|
-
}
|
|
247
|
-
}],
|
|
248
|
-
yAxes: [{
|
|
249
|
-
type: 'linear',
|
|
250
|
-
scaleLabel: {
|
|
251
|
-
display: true,
|
|
252
|
-
labelString: 'height above surface (in km)'
|
|
253
|
-
}
|
|
254
|
-
}]
|
|
255
|
-
},
|
|
256
|
-
animation: false
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
function getChartOptions(options) {
|
|
261
|
-
return {
|
|
262
|
-
scales: {
|
|
263
|
-
xAxes: [{
|
|
264
|
-
type: 'linear',
|
|
265
|
-
position: 'bottom',
|
|
266
|
-
scaleLabel: {
|
|
267
|
-
display: true,
|
|
268
|
-
labelString: 'time (in s)'
|
|
269
|
-
}
|
|
270
|
-
}]
|
|
271
|
-
},
|
|
272
|
-
animation: false,
|
|
273
|
-
...options
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
function getEarthChartOptions() {
|
|
278
|
-
return {
|
|
279
|
-
aspectRatio: 1,
|
|
280
|
-
scales: {
|
|
281
|
-
xAxes: [{
|
|
282
|
-
type: 'linear',
|
|
283
|
-
position: 'bottom',
|
|
284
|
-
min: -8000,
|
|
285
|
-
max: 8000,
|
|
286
|
-
display: false
|
|
287
|
-
}],
|
|
288
|
-
yAxes: [{
|
|
289
|
-
type: 'linear',
|
|
290
|
-
min: -8000,
|
|
291
|
-
max: 8000,
|
|
292
|
-
display: false
|
|
293
|
-
}]
|
|
294
|
-
},
|
|
295
|
-
legend: { display: false }
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
</script>
|
|
299
|
-
</body>
|
|
300
|
-
|
|
301
|
-
</html>
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<title>math.js | web workers</title>
|
|
6
|
-
</head>
|
|
7
|
-
<body>
|
|
8
|
-
|
|
9
|
-
<p>
|
|
10
|
-
In this example, a math.js parser is running in a separate
|
|
11
|
-
<a href="https://www.html5rocks.com/en/tutorials/workers/basics/">web worker</a>,
|
|
12
|
-
preventing the user interface from freezing during heavy calculations.
|
|
13
|
-
</p>
|
|
14
|
-
|
|
15
|
-
<p id="results"></p>
|
|
16
|
-
|
|
17
|
-
<script>
|
|
18
|
-
/**
|
|
19
|
-
* MathWorker evaluates expressions asynchronously in a web worker.
|
|
20
|
-
*
|
|
21
|
-
* Example usage:
|
|
22
|
-
*
|
|
23
|
-
* const worker = new MathWorker()
|
|
24
|
-
* const expr = '12 / (2.3 + 0.7)'
|
|
25
|
-
* worker.evaluate(expr, function (err, result) {
|
|
26
|
-
* console.log(err, result)
|
|
27
|
-
* })
|
|
28
|
-
*/
|
|
29
|
-
function MathWorker () {
|
|
30
|
-
this.worker = new Worker('worker.js')
|
|
31
|
-
this.callbacks = {}
|
|
32
|
-
this.seq = 0
|
|
33
|
-
|
|
34
|
-
// create a listener to receive responses from the web worker
|
|
35
|
-
const me = this
|
|
36
|
-
this.worker.addEventListener('message', function(event) {
|
|
37
|
-
const response = JSON.parse(event.data)
|
|
38
|
-
|
|
39
|
-
// find the callback corresponding to this response
|
|
40
|
-
const callback = me.callbacks[response.id]
|
|
41
|
-
delete me.callbacks[response.id]
|
|
42
|
-
|
|
43
|
-
// call the requests callback with the result
|
|
44
|
-
callback(response.err, response.result)
|
|
45
|
-
}, false)
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Evaluate an expression
|
|
50
|
-
* @param {string} expr
|
|
51
|
-
* @param {Function} callback Called as callback(err, result)
|
|
52
|
-
*/
|
|
53
|
-
MathWorker.prototype.evaluate = function evaluate (expr, callback) {
|
|
54
|
-
// build a request,
|
|
55
|
-
// add an id so we can link returned responses to the right callback
|
|
56
|
-
const id = this.seq++
|
|
57
|
-
const request = {
|
|
58
|
-
id: id,
|
|
59
|
-
expr: expr
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// queue the callback, it will be called when the worker returns the result
|
|
63
|
-
this.callbacks[id] = callback
|
|
64
|
-
|
|
65
|
-
// send the request to the worker
|
|
66
|
-
this.worker.postMessage(JSON.stringify(request))
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// create a MathWorker
|
|
70
|
-
const worker = new MathWorker()
|
|
71
|
-
|
|
72
|
-
// evaluate an expression via the worker
|
|
73
|
-
worker.evaluate('12 / (2.3 + 0.7)', function (err, result) {
|
|
74
|
-
document.getElementById('results').innerHTML += 'result: ' + result + '<br>'
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
</script>
|
|
78
|
-
|
|
79
|
-
</body>
|
|
80
|
-
</html>
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
importScripts('../../../lib/browser/math.js')
|
|
2
|
-
|
|
3
|
-
// create a parser
|
|
4
|
-
const parser = self.math.parser()
|
|
5
|
-
|
|
6
|
-
self.addEventListener('message', function (event) {
|
|
7
|
-
const request = JSON.parse(event.data)
|
|
8
|
-
let result = null
|
|
9
|
-
let err = null
|
|
10
|
-
|
|
11
|
-
try {
|
|
12
|
-
// evaluate the expression
|
|
13
|
-
result = parser.evaluate(request.expr)
|
|
14
|
-
} catch (e) {
|
|
15
|
-
// return the error
|
|
16
|
-
err = e
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
// build a response
|
|
20
|
-
const response = {
|
|
21
|
-
id: request.id,
|
|
22
|
-
result: self.math.format(result),
|
|
23
|
-
err: err
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// send the response back
|
|
27
|
-
self.postMessage(JSON.stringify(response))
|
|
28
|
-
}, false)
|
package/examples/chaining.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
// chaining
|
|
2
|
-
|
|
3
|
-
// load math.js (using node.js)
|
|
4
|
-
const math = require('..')
|
|
5
|
-
|
|
6
|
-
// create a chained operation using the function `chain(value)`
|
|
7
|
-
// end a chain using done(). Let's calculate (3 + 4) * 2
|
|
8
|
-
const a = math.chain(3)
|
|
9
|
-
.add(4)
|
|
10
|
-
.multiply(2)
|
|
11
|
-
.done()
|
|
12
|
-
print(a) // 14
|
|
13
|
-
|
|
14
|
-
// Another example, calculate square(sin(pi / 4))
|
|
15
|
-
const b = math.chain(math.pi)
|
|
16
|
-
.divide(4)
|
|
17
|
-
.sin()
|
|
18
|
-
.square()
|
|
19
|
-
.done()
|
|
20
|
-
print(b) // 0.5
|
|
21
|
-
|
|
22
|
-
// A chain has a few special methods: done, toString, valueOf, get, and set.
|
|
23
|
-
// these are demonstrated in the following examples
|
|
24
|
-
|
|
25
|
-
// toString will return a string representation of the chain's value
|
|
26
|
-
const chain = math.chain(2).divide(3)
|
|
27
|
-
const str = chain.toString()
|
|
28
|
-
print(str) // "0.6666666666666666"
|
|
29
|
-
|
|
30
|
-
// a chain has a function .valueOf(), which returns the value hold by the chain.
|
|
31
|
-
// This allows using it in regular operations. The function valueOf() acts the
|
|
32
|
-
// same as function done().
|
|
33
|
-
print(chain.valueOf()) // 0.66666666666667
|
|
34
|
-
print(chain + 2) // 2.6666666666667
|
|
35
|
-
|
|
36
|
-
// the function subset can be used to get or replace sub matrices
|
|
37
|
-
const array = [[1, 2], [3, 4]]
|
|
38
|
-
const v = math.chain(array)
|
|
39
|
-
.subset(math.index(1, 0))
|
|
40
|
-
.done()
|
|
41
|
-
print(v) // 3
|
|
42
|
-
|
|
43
|
-
const m = math.chain(array)
|
|
44
|
-
.subset(math.index(0, 0), 8)
|
|
45
|
-
.multiply(3)
|
|
46
|
-
.done()
|
|
47
|
-
print(m) // [[24, 6], [9, 12]]
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Helper function to output a value in the console. Value will be formatted.
|
|
51
|
-
* @param {*} value
|
|
52
|
-
*/
|
|
53
|
-
function print (value) {
|
|
54
|
-
const precision = 14
|
|
55
|
-
console.log(math.format(value, precision))
|
|
56
|
-
}
|