mathjs 10.5.2 → 10.5.3

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