mathjs 10.1.0 → 10.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (341) hide show
  1. package/HISTORY.md +38 -0
  2. package/docs/expressions/algebra.md +27 -0
  3. package/docs/expressions/syntax.md +31 -2
  4. package/docs/reference/functions/abs.md +6 -0
  5. package/docs/reference/functions/acos.md +6 -0
  6. package/docs/reference/functions/acosh.md +6 -0
  7. package/docs/reference/functions/acot.md +6 -0
  8. package/docs/reference/functions/acoth.md +6 -0
  9. package/docs/reference/functions/acsc.md +6 -0
  10. package/docs/reference/functions/acsch.md +6 -0
  11. package/docs/reference/functions/add.md +6 -0
  12. package/docs/reference/functions/and.md +6 -0
  13. package/docs/reference/functions/apply.md +6 -0
  14. package/docs/reference/functions/arg.md +6 -0
  15. package/docs/reference/functions/asec.md +6 -0
  16. package/docs/reference/functions/asech.md +6 -0
  17. package/docs/reference/functions/asin.md +6 -0
  18. package/docs/reference/functions/asinh.md +6 -0
  19. package/docs/reference/functions/atan.md +6 -0
  20. package/docs/reference/functions/atan2.md +6 -0
  21. package/docs/reference/functions/atanh.md +6 -0
  22. package/docs/reference/functions/bellNumbers.md +6 -0
  23. package/docs/reference/functions/bin.md +6 -0
  24. package/docs/reference/functions/bitAnd.md +6 -0
  25. package/docs/reference/functions/bitNot.md +6 -0
  26. package/docs/reference/functions/bitOr.md +6 -0
  27. package/docs/reference/functions/bitXor.md +6 -0
  28. package/docs/reference/functions/catalan.md +6 -0
  29. package/docs/reference/functions/cbrt.md +6 -0
  30. package/docs/reference/functions/ceil.md +6 -0
  31. package/docs/reference/functions/clone.md +6 -0
  32. package/docs/reference/functions/column.md +6 -0
  33. package/docs/reference/functions/combinations.md +6 -0
  34. package/docs/reference/functions/combinationsWithRep.md +6 -0
  35. package/docs/reference/functions/compare.md +6 -0
  36. package/docs/reference/functions/compareNatural.md +6 -0
  37. package/docs/reference/functions/compareText.md +6 -0
  38. package/docs/reference/functions/compile.md +6 -0
  39. package/docs/reference/functions/composition.md +6 -0
  40. package/docs/reference/functions/concat.md +6 -0
  41. package/docs/reference/functions/conj.md +6 -0
  42. package/docs/reference/functions/cos.md +6 -0
  43. package/docs/reference/functions/cosh.md +6 -0
  44. package/docs/reference/functions/cot.md +6 -0
  45. package/docs/reference/functions/coth.md +6 -0
  46. package/docs/reference/functions/count.md +6 -0
  47. package/docs/reference/functions/cross.md +6 -0
  48. package/docs/reference/functions/csc.md +6 -0
  49. package/docs/reference/functions/csch.md +6 -0
  50. package/docs/reference/functions/ctranspose.md +6 -0
  51. package/docs/reference/functions/cube.md +6 -0
  52. package/docs/reference/functions/deepEqual.md +6 -0
  53. package/docs/reference/functions/derivative.md +6 -0
  54. package/docs/reference/functions/det.md +6 -0
  55. package/docs/reference/functions/diag.md +6 -0
  56. package/docs/reference/functions/diff.md +6 -0
  57. package/docs/reference/functions/distance.md +6 -0
  58. package/docs/reference/functions/divide.md +6 -0
  59. package/docs/reference/functions/dot.md +6 -0
  60. package/docs/reference/functions/dotDivide.md +6 -0
  61. package/docs/reference/functions/dotMultiply.md +6 -0
  62. package/docs/reference/functions/dotPow.md +6 -0
  63. package/docs/reference/functions/eigs.md +6 -0
  64. package/docs/reference/functions/equal.md +6 -0
  65. package/docs/reference/functions/equalText.md +6 -0
  66. package/docs/reference/functions/erf.md +6 -0
  67. package/docs/reference/functions/evaluate.md +6 -0
  68. package/docs/reference/functions/exp.md +6 -0
  69. package/docs/reference/functions/expm.md +6 -0
  70. package/docs/reference/functions/expm1.md +6 -0
  71. package/docs/reference/functions/factorial.md +6 -0
  72. package/docs/reference/functions/filter.md +6 -0
  73. package/docs/reference/functions/fix.md +6 -0
  74. package/docs/reference/functions/flatten.md +6 -0
  75. package/docs/reference/functions/floor.md +6 -0
  76. package/docs/reference/functions/forEach.md +6 -0
  77. package/docs/reference/functions/format.md +6 -0
  78. package/docs/reference/functions/gamma.md +6 -0
  79. package/docs/reference/functions/gcd.md +6 -0
  80. package/docs/reference/functions/getMatrixDataType.md +6 -0
  81. package/docs/reference/functions/hasNumericValue.md +6 -0
  82. package/docs/reference/functions/help.md +6 -0
  83. package/docs/reference/functions/hex.md +6 -0
  84. package/docs/reference/functions/hypot.md +6 -0
  85. package/docs/reference/functions/identity.md +6 -0
  86. package/docs/reference/functions/im.md +6 -0
  87. package/docs/reference/functions/intersect.md +6 -0
  88. package/docs/reference/functions/inv.md +6 -0
  89. package/docs/reference/functions/invmod.md +6 -0
  90. package/docs/reference/functions/isInteger.md +6 -0
  91. package/docs/reference/functions/isNaN.md +6 -0
  92. package/docs/reference/functions/isNegative.md +6 -0
  93. package/docs/reference/functions/isNumeric.md +6 -0
  94. package/docs/reference/functions/isPositive.md +6 -0
  95. package/docs/reference/functions/isPrime.md +6 -0
  96. package/docs/reference/functions/isZero.md +6 -0
  97. package/docs/reference/functions/kldivergence.md +6 -0
  98. package/docs/reference/functions/kron.md +6 -0
  99. package/docs/reference/functions/larger.md +6 -0
  100. package/docs/reference/functions/largerEq.md +6 -0
  101. package/docs/reference/functions/lcm.md +6 -0
  102. package/docs/reference/functions/leafCount.md +52 -0
  103. package/docs/reference/functions/leftShift.md +6 -0
  104. package/docs/reference/functions/log.md +6 -0
  105. package/docs/reference/functions/log10.md +6 -0
  106. package/docs/reference/functions/log1p.md +6 -0
  107. package/docs/reference/functions/log2.md +6 -0
  108. package/docs/reference/functions/lsolve.md +6 -0
  109. package/docs/reference/functions/lsolveAll.md +6 -0
  110. package/docs/reference/functions/lup.md +6 -0
  111. package/docs/reference/functions/lusolve.md +6 -0
  112. package/docs/reference/functions/mad.md +6 -0
  113. package/docs/reference/functions/map.md +28 -5
  114. package/docs/reference/functions/matrixFromColumns.md +6 -0
  115. package/docs/reference/functions/matrixFromFunction.md +6 -0
  116. package/docs/reference/functions/matrixFromRows.md +6 -0
  117. package/docs/reference/functions/max.md +6 -0
  118. package/docs/reference/functions/mean.md +6 -0
  119. package/docs/reference/functions/median.md +6 -0
  120. package/docs/reference/functions/min.md +6 -0
  121. package/docs/reference/functions/mod.md +6 -0
  122. package/docs/reference/functions/mode.md +6 -0
  123. package/docs/reference/functions/multinomial.md +6 -0
  124. package/docs/reference/functions/multiply.md +6 -0
  125. package/docs/reference/functions/norm.md +6 -0
  126. package/docs/reference/functions/not.md +6 -0
  127. package/docs/reference/functions/nthRoot.md +6 -0
  128. package/docs/reference/functions/nthRoots.md +6 -0
  129. package/docs/reference/functions/numeric.md +6 -0
  130. package/docs/reference/functions/oct.md +6 -0
  131. package/docs/reference/functions/ones.md +6 -0
  132. package/docs/reference/functions/or.md +6 -0
  133. package/docs/reference/functions/parser.md +6 -0
  134. package/docs/reference/functions/partitionSelect.md +6 -0
  135. package/docs/reference/functions/permutations.md +6 -0
  136. package/docs/reference/functions/pickRandom.md +6 -0
  137. package/docs/reference/functions/pow.md +6 -0
  138. package/docs/reference/functions/print.md +6 -0
  139. package/docs/reference/functions/prod.md +6 -0
  140. package/docs/reference/functions/qr.md +6 -0
  141. package/docs/reference/functions/quantileSeq.md +6 -0
  142. package/docs/reference/functions/random.md +6 -0
  143. package/docs/reference/functions/randomInt.md +6 -0
  144. package/docs/reference/functions/range.md +6 -0
  145. package/docs/reference/functions/rationalize.md +7 -1
  146. package/docs/reference/functions/re.md +6 -0
  147. package/docs/reference/functions/reshape.md +7 -0
  148. package/docs/reference/functions/resize.md +6 -0
  149. package/docs/reference/functions/resolve.md +46 -0
  150. package/docs/reference/functions/rightArithShift.md +6 -0
  151. package/docs/reference/functions/rightLogShift.md +6 -0
  152. package/docs/reference/functions/rotate.md +6 -0
  153. package/docs/reference/functions/rotationMatrix.md +6 -0
  154. package/docs/reference/functions/round.md +6 -0
  155. package/docs/reference/functions/row.md +6 -0
  156. package/docs/reference/functions/sec.md +6 -0
  157. package/docs/reference/functions/sech.md +6 -0
  158. package/docs/reference/functions/setCartesian.md +6 -0
  159. package/docs/reference/functions/setDifference.md +6 -0
  160. package/docs/reference/functions/setDistinct.md +6 -0
  161. package/docs/reference/functions/setIntersect.md +6 -0
  162. package/docs/reference/functions/setIsSubset.md +6 -0
  163. package/docs/reference/functions/setMultiplicity.md +6 -0
  164. package/docs/reference/functions/setPowerset.md +6 -0
  165. package/docs/reference/functions/setSize.md +6 -0
  166. package/docs/reference/functions/setSymDifference.md +6 -0
  167. package/docs/reference/functions/setUnion.md +6 -0
  168. package/docs/reference/functions/sign.md +6 -0
  169. package/docs/reference/functions/simplify.md +47 -7
  170. package/docs/reference/functions/simplifyCore.md +50 -0
  171. package/docs/reference/functions/sin.md +6 -0
  172. package/docs/reference/functions/sinh.md +6 -0
  173. package/docs/reference/functions/size.md +6 -0
  174. package/docs/reference/functions/slu.md +6 -0
  175. package/docs/reference/functions/smaller.md +6 -0
  176. package/docs/reference/functions/smallerEq.md +6 -0
  177. package/docs/reference/functions/sort.md +6 -0
  178. package/docs/reference/functions/sqrt.md +6 -0
  179. package/docs/reference/functions/sqrtm.md +6 -0
  180. package/docs/reference/functions/square.md +6 -0
  181. package/docs/reference/functions/squeeze.md +6 -0
  182. package/docs/reference/functions/std.md +6 -0
  183. package/docs/reference/functions/stirlingS2.md +6 -0
  184. package/docs/reference/functions/subset.md +16 -2
  185. package/docs/reference/functions/subtract.md +6 -0
  186. package/docs/reference/functions/sum.md +6 -0
  187. package/docs/reference/functions/symbolicEqual.md +62 -0
  188. package/docs/reference/functions/tan.md +6 -0
  189. package/docs/reference/functions/tanh.md +6 -0
  190. package/docs/reference/functions/to.md +6 -0
  191. package/docs/reference/functions/trace.md +6 -0
  192. package/docs/reference/functions/transpose.md +6 -0
  193. package/docs/reference/functions/typeOf.md +6 -0
  194. package/docs/reference/functions/unaryMinus.md +6 -0
  195. package/docs/reference/functions/unaryPlus.md +6 -0
  196. package/docs/reference/functions/unequal.md +6 -0
  197. package/docs/reference/functions/usolve.md +6 -0
  198. package/docs/reference/functions/usolveAll.md +6 -0
  199. package/docs/reference/functions/variance.md +6 -0
  200. package/docs/reference/functions/xgcd.md +6 -0
  201. package/docs/reference/functions/xor.md +6 -0
  202. package/docs/reference/functions/zeros.md +6 -0
  203. package/docs/reference/functions.md +5 -1
  204. package/lib/browser/math.js +6 -6
  205. package/lib/browser/math.js.map +1 -1
  206. package/lib/cjs/core/create.js +4 -4
  207. package/lib/cjs/core/function/import.js +3 -3
  208. package/lib/cjs/core/function/typed.js +2 -2
  209. package/lib/cjs/defaultInstance.js +3 -3
  210. package/lib/cjs/entry/allFactoriesAny.js +1 -1
  211. package/lib/cjs/entry/allFactoriesNumber.js +1 -1
  212. package/lib/cjs/entry/configReadonly.js +1 -1
  213. package/lib/cjs/entry/dependenciesAny/dependenciesLeafCount.generated.js +23 -0
  214. package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +3 -0
  215. package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +32 -0
  216. package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +6 -0
  217. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +65 -0
  218. package/lib/cjs/entry/dependenciesAny/dependenciesSymbolicEqual.generated.js +29 -0
  219. package/lib/cjs/entry/dependenciesAny.generated.js +32 -0
  220. package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +3 -0
  221. package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +32 -0
  222. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +6 -0
  223. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +65 -0
  224. package/lib/cjs/entry/dependenciesNumber.generated.js +16 -0
  225. package/lib/cjs/entry/impureFunctionsAny.generated.js +80 -34
  226. package/lib/cjs/entry/impureFunctionsNumber.generated.js +96 -64
  227. package/lib/cjs/entry/pureFunctionsAny.generated.js +62 -64
  228. package/lib/cjs/entry/pureFunctionsNumber.generated.js +46 -48
  229. package/lib/cjs/expression/Help.js +4 -0
  230. package/lib/cjs/expression/Parser.js +1 -1
  231. package/lib/cjs/expression/embeddedDocs/core/typed.js +1 -1
  232. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +247 -235
  233. package/lib/cjs/expression/embeddedDocs/function/algebra/leafCount.js +15 -0
  234. package/lib/cjs/expression/embeddedDocs/function/algebra/resolve.js +16 -0
  235. package/lib/cjs/expression/embeddedDocs/function/algebra/simplify.js +1 -1
  236. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +15 -0
  237. package/lib/cjs/expression/embeddedDocs/function/algebra/symbolicEqual.js +15 -0
  238. package/lib/cjs/expression/embeddedDocs/function/matrix/subset.js +2 -2
  239. package/lib/cjs/expression/node/FunctionNode.js +80 -61
  240. package/lib/cjs/expression/node/IndexNode.js +1 -1
  241. package/lib/cjs/expression/node/Node.js +3 -3
  242. package/lib/cjs/expression/node/ObjectNode.js +1 -1
  243. package/lib/cjs/expression/node/utils/access.js +1 -1
  244. package/lib/cjs/expression/node/utils/assign.js +1 -1
  245. package/lib/cjs/expression/parse.js +13 -13
  246. package/lib/cjs/factoriesAny.js +32 -0
  247. package/lib/cjs/factoriesNumber.js +16 -0
  248. package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
  249. package/lib/cjs/function/algebra/leafCount.js +66 -0
  250. package/lib/cjs/function/algebra/rationalize.js +24 -41
  251. package/lib/cjs/function/algebra/resolve.js +106 -0
  252. package/lib/cjs/function/algebra/simplify/simplifyConstant.js +5 -5
  253. package/lib/cjs/function/algebra/simplify/util.js +171 -33
  254. package/lib/cjs/function/algebra/simplify.js +588 -211
  255. package/lib/cjs/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +67 -43
  256. package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
  257. package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
  258. package/lib/cjs/function/algebra/symbolicEqual.js +88 -0
  259. package/lib/cjs/function/arithmetic/ceil.js +3 -3
  260. package/lib/cjs/function/arithmetic/floor.js +3 -3
  261. package/lib/cjs/function/arithmetic/invmod.js +1 -1
  262. package/lib/cjs/function/arithmetic/norm.js +1 -1
  263. package/lib/cjs/function/arithmetic/round.js +1 -1
  264. package/lib/cjs/function/matrix/eigs/complexEigs.js +13 -11
  265. package/lib/cjs/function/matrix/map.js +53 -15
  266. package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
  267. package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
  268. package/lib/cjs/function/matrix/subset.js +15 -5
  269. package/lib/cjs/function/probability/util/seededRNG.js +2 -2
  270. package/lib/cjs/function/relational/compareNatural.js +6 -6
  271. package/lib/cjs/header.js +2 -2
  272. package/lib/cjs/plain/bignumber/index.js +1 -1
  273. package/lib/cjs/plain/number/combinations.js +18 -6
  274. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  275. package/lib/cjs/type/bignumber/function/bignumber.js +1 -1
  276. package/lib/cjs/type/boolean.js +2 -2
  277. package/lib/cjs/type/complex/Complex.js +14 -14
  278. package/lib/cjs/type/complex/function/complex.js +1 -1
  279. package/lib/cjs/type/fraction/Fraction.js +6 -6
  280. package/lib/cjs/type/fraction/function/fraction.js +1 -1
  281. package/lib/cjs/type/matrix/DenseMatrix.js +5 -5
  282. package/lib/cjs/type/matrix/SparseMatrix.js +2 -2
  283. package/lib/cjs/type/number.js +1 -1
  284. package/lib/cjs/type/string.js +2 -2
  285. package/lib/cjs/type/unit/Unit.js +8 -8
  286. package/lib/cjs/utils/customs.js +2 -2
  287. package/lib/cjs/utils/emitter.js +1 -1
  288. package/lib/cjs/utils/function.js +2 -2
  289. package/lib/cjs/utils/is.js +6 -6
  290. package/lib/cjs/utils/latex.js +3 -3
  291. package/lib/cjs/utils/lruQueue.js +1 -1
  292. package/lib/cjs/utils/map.js +3 -3
  293. package/lib/cjs/utils/object.js +2 -2
  294. package/lib/cjs/utils/snapshot.js +7 -7
  295. package/lib/cjs/utils/string.js +2 -2
  296. package/lib/cjs/version.js +1 -1
  297. package/lib/esm/entry/dependenciesAny/dependenciesLeafCount.generated.js +12 -0
  298. package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
  299. package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +18 -0
  300. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +4 -0
  301. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +40 -0
  302. package/lib/esm/entry/dependenciesAny/dependenciesSymbolicEqual.generated.js +16 -0
  303. package/lib/esm/entry/dependenciesAny.generated.js +4 -0
  304. package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
  305. package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +18 -0
  306. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +4 -0
  307. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +40 -0
  308. package/lib/esm/entry/dependenciesNumber.generated.js +2 -0
  309. package/lib/esm/entry/impureFunctionsAny.generated.js +69 -27
  310. package/lib/esm/entry/impureFunctionsNumber.generated.js +83 -53
  311. package/lib/esm/entry/pureFunctionsAny.generated.js +49 -49
  312. package/lib/esm/entry/pureFunctionsNumber.generated.js +32 -32
  313. package/lib/esm/expression/Help.js +4 -0
  314. package/lib/esm/expression/embeddedDocs/core/typed.js +1 -1
  315. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +220 -212
  316. package/lib/esm/expression/embeddedDocs/function/algebra/leafCount.js +8 -0
  317. package/lib/esm/expression/embeddedDocs/function/algebra/resolve.js +9 -0
  318. package/lib/esm/expression/embeddedDocs/function/algebra/simplify.js +1 -1
  319. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +8 -0
  320. package/lib/esm/expression/embeddedDocs/function/algebra/symbolicEqual.js +8 -0
  321. package/lib/esm/expression/embeddedDocs/function/matrix/subset.js +2 -2
  322. package/lib/esm/expression/node/FunctionNode.js +70 -53
  323. package/lib/esm/factoriesAny.js +4 -0
  324. package/lib/esm/factoriesNumber.js +2 -0
  325. package/lib/esm/function/algebra/leafCount.js +59 -0
  326. package/lib/esm/function/algebra/rationalize.js +24 -40
  327. package/lib/esm/function/algebra/resolve.js +95 -0
  328. package/lib/esm/function/algebra/simplify/simplifyConstant.js +3 -3
  329. package/lib/esm/function/algebra/simplify/util.js +170 -34
  330. package/lib/esm/function/algebra/simplify.js +583 -206
  331. package/lib/esm/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +60 -44
  332. package/lib/esm/function/algebra/symbolicEqual.js +80 -0
  333. package/lib/esm/function/matrix/eigs/complexEigs.js +8 -6
  334. package/lib/esm/function/matrix/map.js +53 -15
  335. package/lib/esm/function/matrix/subset.js +15 -5
  336. package/lib/esm/plain/number/combinations.js +18 -6
  337. package/lib/esm/version.js +1 -1
  338. package/package.json +20 -15
  339. package/types/index.d.ts +52 -10
  340. package/lib/cjs/function/algebra/simplify/resolve.js +0 -76
  341. package/lib/esm/function/algebra/simplify/resolve.js +0 -67
package/HISTORY.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # History
2
2
 
3
+ # 2021-03-02, version 10.3.0
4
+
5
+ - Fix #1260: implement function `symbolicEqual` (#2424). Thanks @gwhitney.
6
+ - Fix #2441, #2442: support passing a function as argument to functions created
7
+ in the expression parser (#2443). Thanks @gwhitney.
8
+ - Fix #2325: improve documentation of subset indices (#2446). Thanks @gwhitney.
9
+ - Fix #2439: fix a bug in `complexEigs` in which real-valued norms were
10
+ inadvertently being typed as complex numbers (#2445). Thanks @gwhitney.
11
+ - Fix #2436: improve documentation and error message of function `map` (#2457).
12
+ Thanks @gwhitney.
13
+
14
+
15
+ # 2022-03-01, version 10.2.0
16
+
17
+ - Implemented context options to control simplifications allowed in `simplify`,
18
+ see #2399, #2391. Thanks @gwhitney.
19
+ - Implemented function `leafCount` as a first simple measure of the complexity
20
+ of an expression, see #2411, #2389. Thanks @gwhitney.
21
+ - Fix #2413: improve `combinations` to return an integer result without rounding
22
+ errors for larger values, see #2414. Thanks @gwhitney.
23
+ - Fix #2385: function `rotate` missing in TypeScript definitions.
24
+ Thanks @DIVYA-19.
25
+ - Fix #2450: Add BigNumber to parameter type in `math.unit` and add TypeScript
26
+ types for `Unit.simplify` and `Unit.units` (#2353). Thanks @joshhansen.
27
+ - Fix #2383: detect infinite loops in `simplify` (#2405). Thanks @gwhitney.
28
+ - Fix #1423: collect like factors and cancel like terms in sums (#2388).
29
+ Thanks @gwhitney.
30
+
31
+
32
+ # 2022-02-02, version 10.1.1
33
+
34
+ - Improvements and fixes in function `simplify`, thanks @gwhitney:
35
+ - Fix #2393: regression bug in `simplify('2-(x+1)')`.
36
+ - Ad option `consoleDebug` to `simplify` to see what is going on.
37
+ - Fix TypeScript definition of `ConfigOptions`, which was missing option
38
+ `predictable`.
39
+
40
+
3
41
  # 2022-01-15, version 10.1.0
4
42
 
5
43
  - Implemented function `invmod`, see #2368, #1744. Thanks @thetazero.
@@ -27,6 +27,33 @@ console.log(simplified.toString()) // '3 * x'
27
27
  console.log(simplified.evaluate({x: 4})) // 12
28
28
  ```
29
29
 
30
+ Note that `simplify` has an optional argument `scope` that allows the definitions of variables in the expression (as numeric values, or as further expressions) to be specified and used in the simplification, e.g. continuing the previous example,
31
+
32
+ ```js
33
+ console.log(math.simplify(f, {x: 4}).toString()) // 12
34
+ console.log(math.simplify(f, {x: math.parse('y+z')}).toString()) // '3*(y+z)'
35
+ ```
36
+
37
+ In general, simplification is an inherently dfficult problem; in fact, for certain classes of expressions and algebraic equivalences, it is undecidable whether a given expression is equivalent to zero. Moreover, simplification generally depends on the properties of the operations involved; since multiplication (for example) may have different properties (e.g., it might or might not be commutative) depending on the domain under consideration, different simplifications might be appropriate.
38
+
39
+ As a result, `simplify()` has an additional optional argument, `options`, which controls its behavior. This argument is an object specifying any of various properties concerning the simplification process. See the [detailed documentation](../reference/functions/simplify.md) for a complete list, but currently the two most important properties are as follows. Note that the `options` argument may only be specified if the `scope` is as well.
40
+
41
+ - `exactFractions` - a boolean which specifies whether non-integer numerical constants should be simplified to rational numbers when possible (true), or always converted to decimal notation (false).
42
+ - `context` - an object whose keys are the names of operations ('add', 'multiply', etc.) and whose values specify algebraic properties of the corresponding operation (currently any of 'total', 'trivial', 'commutative', and 'associative'). Simplifications will only be performed if the properties they rely on are true in the given context. For example,
43
+ ```js
44
+ const expr = math.parse('x*y-y*x')
45
+ console.log(math.simplify(expr).toString()) // 0; * is commutative by default
46
+ console.log(math.simplify(expr, {}, {context: {multiply: {commutative: false}}}))
47
+ // 'x*y-y*x'; the order of the right multiplication can't be reversed.
48
+ ```
49
+
50
+ Note that the default context is very permissive (allows a lot of simplifications) but that there is also a `math.simplify.realContext` that only allows simplifications that are guaranteed to preserve the value of the expression on all real numbers:
51
+ ```js
52
+ const rational = math.parse('(x-1)*x/(x-1)')
53
+ console.log(math.simplify(expr, {}, {context: math.simplify.realContext})
54
+ // '(x-1)*x/(x-1)'; canceling the 'x-1' makes the expression defined at 1
55
+ ```
56
+
30
57
  For more details on the theory of expression simplification, see:
31
58
 
32
59
  - [Strategies for simplifying math expressions (Stackoverflow)](https://stackoverflow.com/questions/7540227/strategies-for-simplifying-math-expressions)
@@ -138,8 +138,8 @@ math.evaluate('log(10000, 3 + 7)') // 4
138
138
  math.evaluate('sin(pi / 4)') // 0.7071067811865475
139
139
  ```
140
140
 
141
- New functions can be defined using the `function` keyword. Functions can be
142
- defined with multiple variables. Function assignments are limited: they can
141
+ New functions can be defined by "assigning" an expression to a function call
142
+ with one or more variables. Such function assignments are limited: they can
143
143
  only be defined on a single line.
144
144
 
145
145
  ```js
@@ -153,6 +153,35 @@ parser.evaluate('g(x, y) = x ^ y')
153
153
  parser.evaluate('g(2, 3)') // 8
154
154
  ```
155
155
 
156
+ Note that these function assignments do _not_ create closures; put another way,
157
+ all free variables in mathjs are dynamic:
158
+
159
+ ```js
160
+ const parser = math.parser()
161
+
162
+ parser.evaluate('x = 7')
163
+ parser.evaluate('h(y) = x + y')
164
+ parser.evaluate('h(3)') // 10
165
+ parser.evaluate('x = 3')
166
+ parser.evaluate('h(3)') // 6, *not* 10
167
+ ```
168
+
169
+ It is however possible to pass functions as parameters:
170
+
171
+ ```js
172
+ const parser = math.parser()
173
+
174
+ parser.evaluate('twice(func, x) = func(func(x))')
175
+ parser.evaluate('twice(square, 2)') // 16
176
+ parser.evaluate('f(x) = 3*x')
177
+ parser.evaluate('twice(f, 2)') // 18
178
+
179
+ // a simplistic "numerical derivative":
180
+ parser.evaluate('eps = 1e-10')
181
+ parser.evaluate('nd(f, x) = (f(x+eps) - func(x-eps))/(2*eps)')
182
+ parser.evaluate('nd(square,2)') // 4.000000330961484
183
+ ```
184
+
156
185
  Math.js itself heavily uses typed functions, which ensure correct inputs and
157
186
  throws meaningful errors when the input arguments are invalid. One can create
158
187
  a [typed-function](https://github.com/josdejong/typed-function) in the
@@ -25,6 +25,12 @@ Type | Description
25
25
  number | BigNumber | Fraction | Complex | Array | Matrix | Unit | Absolute value of `x`
26
26
 
27
27
 
28
+ ### Throws
29
+
30
+ Type | Description
31
+ ---- | -----------
32
+
33
+
28
34
  ## Examples
29
35
 
30
36
  ```js
@@ -26,6 +26,12 @@ Type | Description
26
26
  number | BigNumber | Complex | Array | Matrix | The arc cosine of x
27
27
 
28
28
 
29
+ ### Throws
30
+
31
+ Type | Description
32
+ ---- | -----------
33
+
34
+
29
35
  ## Examples
30
36
 
31
37
  ```js
@@ -27,6 +27,12 @@ Type | Description
27
27
  number | Complex | Array | Matrix | Hyperbolic arccosine of x
28
28
 
29
29
 
30
+ ### Throws
31
+
32
+ Type | Description
33
+ ---- | -----------
34
+
35
+
30
36
  ## Examples
31
37
 
32
38
  ```js
@@ -26,6 +26,12 @@ Type | Description
26
26
  number | Complex | Array | Matrix | The arc cotangent of x
27
27
 
28
28
 
29
+ ### Throws
30
+
31
+ Type | Description
32
+ ---- | -----------
33
+
34
+
29
35
  ## Examples
30
36
 
31
37
  ```js
@@ -27,6 +27,12 @@ Type | Description
27
27
  number | Complex | Array | Matrix | Hyperbolic arccotangent of x
28
28
 
29
29
 
30
+ ### Throws
31
+
32
+ Type | Description
33
+ ---- | -----------
34
+
35
+
30
36
  ## Examples
31
37
 
32
38
  ```js
@@ -26,6 +26,12 @@ Type | Description
26
26
  number | Complex | Array | Matrix | The arc cosecant of x
27
27
 
28
28
 
29
+ ### Throws
30
+
31
+ Type | Description
32
+ ---- | -----------
33
+
34
+
29
35
  ## Examples
30
36
 
31
37
  ```js
@@ -27,6 +27,12 @@ Type | Description
27
27
  number | Complex | Array | Matrix | Hyperbolic arccosecant of x
28
28
 
29
29
 
30
+ ### Throws
31
+
32
+ Type | Description
33
+ ---- | -----------
34
+
35
+
30
36
  ## Examples
31
37
 
32
38
  ```js
@@ -27,6 +27,12 @@ Type | Description
27
27
  number | BigNumber | Fraction | Complex | Unit | Array | Matrix | Sum of `x` and `y`
28
28
 
29
29
 
30
+ ### Throws
31
+
32
+ Type | Description
33
+ ---- | -----------
34
+
35
+
30
36
  ## Examples
31
37
 
32
38
  ```js
@@ -26,6 +26,12 @@ Type | Description
26
26
  boolean | Array | Matrix | Returns true when both inputs are defined with a nonzero/nonempty value.
27
27
 
28
28
 
29
+ ### Throws
30
+
31
+ Type | Description
32
+ ---- | -----------
33
+
34
+
29
35
  ## Examples
30
36
 
31
37
  ```js
@@ -32,6 +32,12 @@ Type | Description
32
32
  Array | Matrix | res The residual matrix with the function applied over some dimension.
33
33
 
34
34
 
35
+ ### Throws
36
+
37
+ Type | Description
38
+ ---- | -----------
39
+
40
+
35
41
  ## Examples
36
42
 
37
43
  ```js
@@ -27,6 +27,12 @@ Type | Description
27
27
  number | BigNumber | Array | Matrix | The argument of x
28
28
 
29
29
 
30
+ ### Throws
31
+
32
+ Type | Description
33
+ ---- | -----------
34
+
35
+
30
36
  ## Examples
31
37
 
32
38
  ```js
@@ -26,6 +26,12 @@ Type | Description
26
26
  number | Complex | Array | Matrix | The arc secant of x
27
27
 
28
28
 
29
+ ### Throws
30
+
31
+ Type | Description
32
+ ---- | -----------
33
+
34
+
29
35
  ## Examples
30
36
 
31
37
  ```js
@@ -27,6 +27,12 @@ Type | Description
27
27
  number | Complex | Array | Matrix | Hyperbolic arcsecant of x
28
28
 
29
29
 
30
+ ### Throws
31
+
32
+ Type | Description
33
+ ---- | -----------
34
+
35
+
30
36
  ## Examples
31
37
 
32
38
  ```js
@@ -26,6 +26,12 @@ Type | Description
26
26
  number | BigNumber | Complex | Array | Matrix | The arc sine of x
27
27
 
28
28
 
29
+ ### Throws
30
+
31
+ Type | Description
32
+ ---- | -----------
33
+
34
+
29
35
  ## Examples
30
36
 
31
37
  ```js
@@ -27,6 +27,12 @@ Type | Description
27
27
  number | Complex | Array | Matrix | Hyperbolic arcsine of x
28
28
 
29
29
 
30
+ ### Throws
31
+
32
+ Type | Description
33
+ ---- | -----------
34
+
35
+
30
36
  ## Examples
31
37
 
32
38
  ```js
@@ -26,6 +26,12 @@ Type | Description
26
26
  number | BigNumber | Complex | Array | Matrix | The arc tangent of x
27
27
 
28
28
 
29
+ ### Throws
30
+
31
+ Type | Description
32
+ ---- | -----------
33
+
34
+
29
35
  ## Examples
30
36
 
31
37
  ```js
@@ -29,6 +29,12 @@ Type | Description
29
29
  number | Array | Matrix | Four-quadrant inverse tangent
30
30
 
31
31
 
32
+ ### Throws
33
+
34
+ Type | Description
35
+ ---- | -----------
36
+
37
+
32
38
  ## Examples
33
39
 
34
40
  ```js
@@ -27,6 +27,12 @@ Type | Description
27
27
  number | Complex | Array | Matrix | Hyperbolic arctangent of x
28
28
 
29
29
 
30
+ ### Throws
31
+
32
+ Type | Description
33
+ ---- | -----------
34
+
35
+
30
36
  ## Examples
31
37
 
32
38
  ```js
@@ -26,6 +26,12 @@ Type | Description
26
26
  Number | BigNumber | B(n)
27
27
 
28
28
 
29
+ ### Throws
30
+
31
+ Type | Description
32
+ ---- | -----------
33
+
34
+
29
35
  ## Examples
30
36
 
31
37
  ```js
@@ -25,6 +25,12 @@ Type | Description
25
25
  string | The formatted value
26
26
 
27
27
 
28
+ ### Throws
29
+
30
+ Type | Description
31
+ ---- | -----------
32
+
33
+
28
34
  ## Examples
29
35
 
30
36
  ```js
@@ -26,6 +26,12 @@ Type | Description
26
26
  number | BigNumber | Array | Matrix | AND of `x` and `y`
27
27
 
28
28
 
29
+ ### Throws
30
+
31
+ Type | Description
32
+ ---- | -----------
33
+
34
+
29
35
  ## Examples
30
36
 
31
37
  ```js
@@ -26,6 +26,12 @@ Type | Description
26
26
  number | BigNumber | Array | Matrix | NOT of `x`
27
27
 
28
28
 
29
+ ### Throws
30
+
31
+ Type | Description
32
+ ---- | -----------
33
+
34
+
29
35
  ## Examples
30
36
 
31
37
  ```js
@@ -27,6 +27,12 @@ Type | Description
27
27
  number | BigNumber | Array | Matrix | OR of `x` and `y`
28
28
 
29
29
 
30
+ ### Throws
31
+
32
+ Type | Description
33
+ ---- | -----------
34
+
35
+
30
36
  ## Examples
31
37
 
32
38
  ```js
@@ -26,6 +26,12 @@ Type | Description
26
26
  number | BigNumber | Array | Matrix | XOR of `x` and `y`
27
27
 
28
28
 
29
+ ### Throws
30
+
31
+ Type | Description
32
+ ---- | -----------
33
+
34
+
29
35
  ## Examples
30
36
 
31
37
  ```js
@@ -26,6 +26,12 @@ Type | Description
26
26
  Number | BigNumber | Cn(n)
27
27
 
28
28
 
29
+ ### Throws
30
+
31
+ Type | Description
32
+ ---- | -----------
33
+
34
+
29
35
  ## Examples
30
36
 
31
37
  ```js
@@ -28,6 +28,12 @@ Type | Description
28
28
  number | BigNumber | Complex | Unit | Array | Matrix | Returns the cubic root of `x`
29
29
 
30
30
 
31
+ ### Throws
32
+
33
+ Type | Description
34
+ ---- | -----------
35
+
36
+
31
37
  ## Examples
32
38
 
33
39
  ```js
@@ -28,6 +28,12 @@ Type | Description
28
28
  number | BigNumber | Fraction | Complex | Array | Matrix | Rounded value
29
29
 
30
30
 
31
+ ### Throws
32
+
33
+ Type | Description
34
+ ---- | -----------
35
+
36
+
31
37
  ## Examples
32
38
 
33
39
  ```js
@@ -24,6 +24,12 @@ Type | Description
24
24
  * | A clone of object x
25
25
 
26
26
 
27
+ ### Throws
28
+
29
+ Type | Description
30
+ ---- | -----------
31
+
32
+
27
33
  ## Examples
28
34
 
29
35
  ```js
@@ -25,6 +25,12 @@ Type | Description
25
25
  Array | Matrix | The retrieved column
26
26
 
27
27
 
28
+ ### Throws
29
+
30
+ Type | Description
31
+ ---- | -----------
32
+
33
+
28
34
  ## Examples
29
35
 
30
36
  ```js
@@ -29,6 +29,12 @@ Type | Description
29
29
  number | BigNumber | Number of possible combinations.
30
30
 
31
31
 
32
+ ### Throws
33
+
34
+ Type | Description
35
+ ---- | -----------
36
+
37
+
32
38
  ## Examples
33
39
 
34
40
  ```js
@@ -29,6 +29,12 @@ Type | Description
29
29
  number | BigNumber | Number of possible combinations with replacement.
30
30
 
31
31
 
32
+ ### Throws
33
+
34
+ Type | Description
35
+ ---- | -----------
36
+
37
+
32
38
  ## Examples
33
39
 
34
40
  ```js
@@ -32,6 +32,12 @@ Type | Description
32
32
  number &#124; BigNumber &#124; Fraction &#124; Array &#124; Matrix | Returns the result of the comparison: 1 when x > y, -1 when x < y, and 0 when x == y.
33
33
 
34
34
 
35
+ ### Throws
36
+
37
+ Type | Description
38
+ ---- | -----------
39
+
40
+
35
41
  ## Examples
36
42
 
37
43
  ```js
@@ -47,6 +47,12 @@ Type | Description
47
47
  number | Returns the result of the comparison: 1 when x > y, -1 when x < y, and 0 when x == y.
48
48
 
49
49
 
50
+ ### Throws
51
+
52
+ Type | Description
53
+ ---- | -----------
54
+
55
+
50
56
  ## Examples
51
57
 
52
58
  ```js
@@ -28,6 +28,12 @@ Type | Description
28
28
  number &#124; Array &#124; DenseMatrix | Returns the result of the comparison: 1 when x > y, -1 when x < y, and 0 when x == y.
29
29
 
30
30
 
31
+ ### Throws
32
+
33
+ Type | Description
34
+ ---- | -----------
35
+
36
+
31
37
  ## Examples
32
38
 
33
39
  ```js
@@ -27,6 +27,12 @@ Type | Description
27
27
  {evaluate: Function} &#124; Array.&lt;{evaluate: Function}&gt; | code An object with the compiled expression
28
28
 
29
29
 
30
+ ### Throws
31
+
32
+ Type | Description
33
+ ---- | -----------
34
+ Error |
35
+
30
36
  ## Examples
31
37
 
32
38
  ```js
@@ -28,6 +28,12 @@ Type | Description
28
28
  Number &#124; BigNumber | Returns the composition counts of n into k parts.
29
29
 
30
30
 
31
+ ### Throws
32
+
33
+ Type | Description
34
+ ---- | -----------
35
+
36
+
31
37
  ## Examples
32
38
 
33
39
  ```js
@@ -30,6 +30,12 @@ Type | Description
30
30
  Array &#124; Matrix | Concatenated matrix
31
31
 
32
32
 
33
+ ### Throws
34
+
35
+ Type | Description
36
+ ---- | -----------
37
+
38
+
33
39
  ## Examples
34
40
 
35
41
  ```js
@@ -27,6 +27,12 @@ Type | Description
27
27
  number &#124; BigNumber &#124; Complex &#124; Array &#124; Matrix | The complex conjugate of x
28
28
 
29
29
 
30
+ ### Throws
31
+
32
+ Type | Description
33
+ ---- | -----------
34
+
35
+
30
36
  ## Examples
31
37
 
32
38
  ```js
@@ -26,6 +26,12 @@ Type | Description
26
26
  number &#124; BigNumber &#124; Complex &#124; Array &#124; Matrix | Cosine of x
27
27
 
28
28
 
29
+ ### Throws
30
+
31
+ Type | Description
32
+ ---- | -----------
33
+
34
+
29
35
  ## Examples
30
36
 
31
37
  ```js