mathjs 10.5.2 → 10.5.3

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