mathjs 10.5.2 → 10.6.1

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