UNPKG

108 kBMarkdownView Raw
1# History
2
3# 2022-11-18, 11.4.0
4
5- Implemented more wildcards to describe rules for `simplify`, making it easier
6 for example to describe unary minus (#1915). Thanks @thatcomputerguy0101.
7- Implemented functions `schur`, `sylvester`, and `lyap` (#2646).
8 Thanks @egidioln.
9- Implemented function `polynomialRoot`, and use it in a benchmark (#2839).
10 Thanks @gwhitney.
11- Fix #2825 partly: improve simplifying operations on constants in
12 non-commutative contexts (#2827). Thanks @samueltlg.
13- Fix #2840: a bug in the docs and type definitions of `Node.traverse` and
14 `Node.forEach`, they do return `void`.
15
16
17# 2022-11-07, 11.3.3
18
19- Fix #2830: Prevent inserting zero values when creating a `SparseMatrix` from a
20 `DenseMatrix` (#2836). Thanks @AlexandreAlvesDB.
21- Fix #2835: a regression in the type definitions of `FunctionNode`, introduced
22 in `v11.3.2`. See #2733. Thanks @dsteve.
23
24
25# 2022-10-25, 11.3.2
26
27- Add generics to remaining Node type definitions (#2733). Thanks @mattvague.
28- Allow unit prefixes for (absolute) temperatures `kelvin`, `rankine`,
29 `celsius`, and `fahrenheit` (#2824). Thanks @jfeist
30
31
32# 2022-10-19, 11.3.1
33
34- Fix #2809: code completion issues in some IDE's (#2812).
35- Fix #2818: throw an error when a function assignment has duplicate
36 parameter names (#2819).
37- Update `decimal.js` to version `10.4.2`.
38
39
40# 2022-10-11, 11.3.0
41
42- Allow creating new subclasses of `Node` in TypeScript (#2772).
43 Note that this disables being able to narrow MathNodes by using the `.type`
44 property. Use typeguards like `isOperatorNode(...)` instead (see #2810).
45 Thanks @mattvague.
46- Fix #2793: `flatten()` cloning entries of array/Matrix (#2799).
47- Fix #2627: TypeScript definitions of `pinv` missing (#2804).
48 Thanks @HanchaiN.
49- Update dependencies to `decimal.js@10.4.1`.
50
51
52# 2022-09-13, 11.2.1
53
54- Fix doc generator being broken, not generating a function reference.
55
56
57# 2022-09-12, 11.2.0
58
59- Implement function `isRelationalNode` (#2731). Thanks @isaacbyr.
60- Added missing types `'largerEq'` and `'or'` in `OperatorNodeMap` in the
61 TypeScript definitions. Thanks @ajinkyac03.
62- Fixed typos in min func type defs (#2768). Thanks @mabdullahadeel.
63- Improved the TypeScript definitions for `pickRandom`. Thanks @mattvague.
64- Fixed documentation of unit `min` which means `minutes`, not `minim` (#2773).
65 Thanks @jasonhornsby.
66
67
68# 2022-08-23, 11.1.0
69
70- Add Unit constructor from value and pure (valueless) Unit (#2628).
71 Thanks @costerwi
72- Fix #2144: `examples/advanced/custom_loading.js` was broken.
73- Fix JSON `replacer` function missing in the TypeScript definitions.
74 Thanks @mattvague.
75- Update dependencies to `typed-function@4.1.0` and `decimal.js@10.4.0`.
76
77
78# 2022-07-25, version 11.0.1
79
80- Fix #2632: TypeScript issue of `simplifyConstant` and `simplifyCore`
81 not having a return type defined.
82
83
84# 2022-07-23, version 11.0.0
85
86!!! BE CAREFUL: BREAKING CHANGES !!!
87
88Breaking changes:
89
90- Dropped official support for IE11.
91- Upgraded to `typed-function@3`, see [josdejong/typed-function/HISTORY.md](https://github.com/josdejong/typed-function/blob/develop/HISTORY.md#2022-05-12-version-300). Thanks @gwhitney. Most importantly:
92 - Conversions now have preference over `any`.
93 - The `this` variable is no longer bound to the typed function itself.
94 - The properties `typed.types`, `typed.conversions`, and `typed.ignore`
95 have been removed.
96 - There are new static functions available like `typed.referTo`,
97 `typed.referToSelf`, `typed.addTypes`, `typed.addConversions`.
98- Implement amended "Rule 2" for implicit multiplication (#2370, #2460):
99 when having a division followed by an implicit multiplication, the division
100 gets higher precedence over the implicit multiplication when (a) the
101 numerator is a constant with optionally a prefix operator (`-`, `+`, `~`),
102 and (b) the denominator is a constant. For example: formerly `-1 / 2 x` was
103 interpreted as `-1 / (2 * x)` and now it is interpreted as `(-1 / 2) * x`.
104 Thanks @gwhitney.
105- Drop elementwise matrix support for trigonometric functions, exp, log, gamma,
106 square, sqrt, cube, and cbrt to prevent confusion with standard matrix
107 functions (#2440, #2465). Instead, use `math.map(matrix, fn)`.
108 Thanks @gwhitney.
109- Simplify: convert equivalent function calls into operators, for example,
110 `add(2, x)` will now be simplified into `2 + x` (#2415, #2466).
111 Thanks @gwhitney.
112- Removed the automatic conversion from `number` to `string` (#2482).
113 Thanks @gwhitney.
114- Fix #2412: let function `diff` return an empty matrix when the input contains
115 only one element (#2422).
116- Internal refactoring in the `simplifyCore` logic (#2490, #2484, #2459).
117 The function `simplifyCore` will no longer (partially) merge constants, that
118 behavior has been moved to `simplifyConstant`. The combination of
119 `simplifyConstant` and `simplifyCore` is still close to the old behavior
120 of `simplifyCore`, but there are some differences. To reproduce the same
121 behavior as the old `simplifyCore`, you can use
122 `math.simplify(expr, [math.simplifyCore, math.simplifyConstant])`.
123 Thanks to the refactoring, `simplify` is more thorough in reducing constants.
124 Thanks @gwhitney.
125- Disable support for splitting rest parameters in chained calculations
126 (#2485, #2474). For example: `math.chain(3).max(4, 2).done()` will now throw
127 an error rather than return `4`, because the rest parameter of
128 `math.max(...number)` has been split between the contents of the chain and
129 the arguments to the max call. Thanks @gwhitney.
130- Function `typeOf` now returns `function` (lowercase) for a function instead
131 of `Function` (#2560). Thanks @gwhitney.
132
133Non-breaking changes:
134
135- Fix #2600: improve the TypeScript definitions of `simplify`.
136 Thanks @laureen-m and @mattvague.
137- Fix #2607: improve type definition of `createUnit`. Thanks @egziko.
138- Fix #2608: clarify the docs on the need to configure a smaller `epsilon`
139 when using BigNumbers.
140- Fix #2613: describe matrix methods `get` and `set` in the docs.
141- Fix link to `math.rationalize` in the docs (#2616). Thanks @nukisman.
142- Fix #2621: add TypeScript definitions for `count` (#2622). Thanks @Hansuku.
143- Improved TypeScript definitions of `multiply` (#2623). Thanks @Windrill.
144
145
146# 2022-06-28, version 10.6.4
147
148- Improve TypeScript definitions of the `factory` function, thanks @mattvague.
149
150
151# 2022-06-24, version 10.6.3
152
153- Revert the TypeScript definition fixes for `factory` applied in `v10.6.2`,
154 they give some complications.
155
156
157# 2022-06-24, version 10.6.2
158
159- Improve TypeScript definitions of `ParenthesisNode`. Thanks @mattvague.
160- Change the TypeScript definition of `MathNodeCommon['type']` into a less
161 strict string, so it is possible to extend with new Node classes.
162 Thanks @mattvague.
163- Improve TypeScript definitions of the `factory` function, thanks @mattvague.
164
165
166# 2022-05-31, version 10.6.1
167
168- Improve the TypeScript types For `OperatorNode`: you can now define generic
169 types like `OperatorNode<'+', 'add'>`. Thanks @mattvague.
170
171
172# 2022-05-24, version 10.6.0
173
174- Implementation of fourier transform functions `fft` and `ifft` (#2540).
175 Thanks @HanchaiN.
176- Fix TypeScript types not being listed in the exported fields (#2569).
177 Thanks @mattvague.
178- Large improvements in TypeScript definitions for chained expressions (#2537).
179 Thanks @mattvague.
180- Fix #2571: improve TypeScript definition of functions `clone` and `cloneDeep`
181 (#2572). Thanks @mattvague.
182- Fix the first argument of `derivative` holding the expression not correctly
183 being converted when using `.toTex()` (#2564). Thanks @mattvague.
184
185
186# 2022-05-11, version 10.5.3
187
188- Fix #2337: npm package containing examples and docs to solve security
189 vulnerabilities being reported on the examples and their dependencies.
190- Fix core, construction, and some other functions missing in docs.
191- Drop official support for Node.js 12 which has reached its end of life.
192
193
194# 2022-05-09, version 10.5.2
195
196- Fix #2553: `@types/mocha` defined in `dependencies` instead of
197 `devDependencies`, causing problems in projects that use a different version
198 of this dependency. Thanks @Kolahzary.
199- Fix #2550: remove `examples/node_modules` folder from the npm package.
200- Fix #2528: improve contribution guidelines (#2548).
201- Document `SymbolNode.onUndefinedSymbol` and
202 `FunctionNode.onUndefinedFunction`.
203
204
205# 2022-05-02, version 10.5.1
206
207- Fix #2526, #2529: improve TypeScript definitions of function `round`, `fix`,
208 `floor`, `ceil`, and `nthRoot`, and improved the number only implementations
209 of those functions (#2531, #2539). Thanks @simlaticak and @gwhitney.
210- Fix #2532: matrix index symbol `end` not working when used inside
211 a sub-expression.
212- Fix #2524: In generating AUTHORS list, ignore a list of specific commits
213 (e.g., to avoid spurious duplicates in list). (#2543)
214- Add type definitions of function `resolve` (#2536). Thanks @mattvague.
215
216
217# 2022-04-19, version 10.5.0
218
219- Implement #1563: function `pinv`, Moore–Penrose inverse (#2521).
220 Thanks @HanchaiN.
221- Optimize function `det` for integers by switching to the Bareiss algorithm:
222 no more round-off errors for integer input (#2516). Thanks @HanchaiN.
223- Implement #2463: allow negative integer powers of invertible square matrices
224 (#2517). Thanks @HanchaiN.
225- Implement the `lgamma` function (defined as log(gamma(z))) for number and
226 Complex types. Supersedes #320. (#2417). Thanks @yifanwww.
227- Fix #2523: update to the latest complex.js to improve `sin(z)` for small
228 `im(z)` (#2525). Thanks @gwhitney.
229- Fix #2526: update TypeScript definition of `ceil` (#2531). Thanks @simlaticak
230- Change mocha reporter to 'dot' to avoid excessively long log files. (#2520)
231
232
233# 2022-04-08, version 10.4.3
234
235- Fix #2508: improve the precision of stirlingS2 (#2509). Thanks @gwhitney.
236- Fix #2514: implement optional argument `base` in the number implementation
237 of function `log` (#2515). Thanks @gwhitney.
238- Improve the documentation on operator `;` (#2512). Thanks @gwhitney.
239
240
241# 2022-03-29, version 10.4.2
242
243- Fix #2499: different behavior for unit conversion "degC" and "K" (#2501).
244 Also disables getting the sign for units with an offset, which is ambiguous.
245 Thanks @gwhitney.
246- Fix #2503: fix an issue in `log()` for complex numbers in which the imaginary
247 part is much larger in absolute value than the real part, fixed in
248 `complex.js@2.1.0` (#2505), thanks @gwhitney, @infusion.
249- Fix #2493: unclear error message when an entity that is not a function
250 is being called as a function (#2494). Thanks @gwhitney.
251- Some fixes in the docs on units (#2498). Thanks @dvd101x.
252- Add `forEach` example in embedded docs (#2507). Thanks @dvd101x.
253- Correct approx.deepEqual() to accept an epsilon argument giving the
254 comparison tolerance. It was already being called this way, but was
255 silently ignoring the tolerance. Thanks @yifanwww.
256
257
258# 2022-03-23, version 10.4.1
259
260- Improve TypeScript definitions for function `unit` (#2479).
261 Thanks @SinanAkkoyun.
262- Add tests for type declarations (#2448). Thanks @samestep.
263- Further improvement to TypeScript definitions of `std` and `variance`
264 (make dimension parameter optional, #2474). Thanks @NattapongSiri.
265- Next step (as per #2431) for full publication of "is" functions like
266 `isMatrix` etc: Provide TypeScript definitions of "is" functions and
267 make them type guards. (#2432). Thanks @ChristopherChudzicki.
268- Fix #2491: Multi line object expressions don't work with comments (#2492).
269 Thanks @gwhitney.
270- Fix #2478: a bug in calculating the eigenvectors when dealing with complex
271 numbers (#2496). Thanks @gwhitney.
272- Update project dependencies and devDependencies.
273
274
275# 2022-03-07, version 10.4.0
276
277- Fix #2461: make sure `simplifyCore` recurses over all binary nodes (#2462).
278 Thanks @gwhitney.
279- Fix #2429: fix the TypeScript definitions of functions `std` and `variance`
280 (#2455). Thanks @NattapongSiri.
281- Fix #1633: implement a `cumsum` function generating cumulative sums of a list
282 of values or a matrix. (#1870). Thanks @hjonasson.
283- Upgrade to the latest version of `Fraction.js`, having more strict input,
284 only accepting an integer numerator and denominator. See #2427.
285- Fix typo in documentation example for `format`. (#2468) Thanks @abranhe.
286- Write unit tests for all jsdoc examples. See #2452. Thanks @gwhitney.
287
288
289# 2021-03-02, version 10.3.0
290
291- Fix #1260: implement function `symbolicEqual` (#2424). Thanks @gwhitney.
292- Fix #2441, #2442: support passing a function as argument to functions created
293 in the expression parser (#2443). Thanks @gwhitney.
294- Fix #2325: improve documentation of subset indices (#2446). Thanks @gwhitney.
295- Fix #2439: fix a bug in `complexEigs` in which real-valued norms were
296 inadvertently being typed as complex numbers (#2445). Thanks @gwhitney.
297- Fix #2436: improve documentation and error message of function `map` (#2457).
298 Thanks @gwhitney.
299
300
301# 2022-03-01, version 10.2.0
302
303- Implemented context options to control simplifications allowed in `simplify`,
304 see #2399, #2391. Thanks @gwhitney.
305- Implemented function `leafCount` as a first simple measure of the complexity
306 of an expression, see #2411, #2389. Thanks @gwhitney.
307- Fix #2413: improve `combinations` to return an integer result without rounding
308 errors for larger values, see #2414. Thanks @gwhitney.
309- Fix #2385: function `rotate` missing in TypeScript definitions.
310 Thanks @DIVYA-19.
311- Fix #2450: Add BigNumber to parameter type in `math.unit` and add TypeScript
312 types for `Unit.simplify` and `Unit.units` (#2353). Thanks @joshhansen.
313- Fix #2383: detect infinite loops in `simplify` (#2405). Thanks @gwhitney.
314- Fix #1423: collect like factors and cancel like terms in sums (#2388).
315 Thanks @gwhitney.
316
317
318# 2022-02-02, version 10.1.1
319
320- Improvements and fixes in function `simplify`, thanks @gwhitney:
321 - Fix #2393: regression bug in `simplify('2-(x+1)')`.
322 - Ad option `consoleDebug` to `simplify` to see what is going on.
323- Fix TypeScript definition of `ConfigOptions`, which was missing option
324 `predictable`.
325
326
327# 2022-01-15, version 10.1.0
328
329- Implemented function `invmod`, see #2368, #1744. Thanks @thetazero.
330- Improvements and fixes in function `simplify`, thanks @gwhitney:
331 - Fix #1179, #1290: improve collection of non-constant like terms (#2384).
332 - Fix #2152: do not transform strings into numbers (#2372).
333 - Fix #1913: implement support for array and object simplification (#2382).
334- Fix #2379: add embedded documentation for function `print`.
335- Remove broken example from the embedded documentation of function `forEach`.
336
337
338# 2021-12-29, version 10.0.2
339
340- Fix #2156: simplify expressions like `-1 / (-x)` to `1/x`. Thanks @ony3000.
341- Fix #2363: remove a redundant part of the regex to split a number.
342- Fix #2291: add support for fractions in function `intersect`.
343 Thanks @thetazero.
344- Fix #2358: bug in `SparseMatrix` when replacing a subset of a matrix with
345 a non-consecutive index. Thanks @Al-0.
346
347
348# 2021-12-22, version 10.0.1
349
350- Fix #1681: function `gamma` giving inaccurate complex results in some cases.
351 Thanks @kmdrGroch.
352- Fixed a typo in an example, see #2366. Thanks @blackwindforce.
353
354
355# 2021-11-03, version 10.0.0
356
357!!! BE CAREFUL: BREAKING CHANGES IN THE TYPESCRIPT DEFINITIONS !!!
358
359- Improvements to the Typescript typings (commit fc5c202e).
360 Thanks @joshhansen. First introduced in v9.5.1, but reverted because
361 it contains breaking changes.
362
363 Breaking changes: interface `MathNode` is now renamed to `MathNodeCommon`
364 and the related interfaces are structured in a different way.
365
366- Fixed a typo in the TypeScript definition of toHTML. Thanks @TheToto.
367
368
369# 2021-11-03, version 9.5.2`
370
371- Revert the improvements to the Typescript typings because they contain
372 breaking changes. The improvements will be published in v10.0.0. See #2339.
373
374
375# 2021-10-13, version 9.5.1
376
377- Various improvements to the Typescript typings.
378 Thanks @joshhansen and @DianaTdr.
379
380
381# 2021-09-22, version 9.5.0
382
383- Implemented support for calculations with percentage, see #2303.
384 Thanks @rvramesh.
385- Fix #2319: make the API of `Parser.evaluate` consistent with `math.evaluate`:
386 support a list with expressions as input.
387- Improved documentation of function `setCartesian`. Thanks @fieldfoxWim.
388
389
390# 2021-09-15, version 9.4.5
391
392- Improved the performance of `Node.equals` by improving the internal
393 function `deepStrictEqual`. Thanks @tomlarkworthy.
394- Fixes in the TypeScript definitions:
395 - Define `hasNumericValue`. Thanks @write2kcl.
396 - Define `MathNode.isRelationalNode`. Thanks @m93a.
397 - Fix typo in `MathNode.isConditionalNode`. Thanks @m93a.
398
399
400# 2021-07-07, version 9.4.4
401
402- Fixed `ArrayNode.toTex()`: remove the row delimiter on the last row,
403 see #2267. Thanks @davidtranhq.
404- Fix #2269: `intersect` not returning `null` for matrix input. Thanks @m93a.
405- Fix #2245: mathjs not working in IE11 anymore due to a missing polyfill for
406 `Symbol`. The browser bundle now includes the necessary polyfills (it is
407 larger now because of that, see also #2266). Thanks @m93a.
408- Update dependencies (`complex.js@2.0.15`, `decimal.js@10.3.1`)
409- Drop official support for node.js 10, which has reached end of life.
410 See #2258.
411
412
413# 2021-06-23, version 9.4.3
414
415- Fix #2222: mathjs polluting the `Decimal` prototype. Thanks @m93a.
416- Fix #2253: expression parser throwing an error when accessing nested object
417 properties named `e`.
418- Fixes in the TypeScript definitions:
419 - function `floor`, #2159, #2246. Thanks @write2kcl.
420 - function `simplify`, see #2252. Thanks @nitroin.
421- Upgraded to `decimal.js@10.3.0`
422
423
424# 2021-06-05, version 9.4.2
425
426- Implemented iterative eigenvalue finder for `eigs`, making it much more
427 robust. See #2179, #2237. Thanks @m93a.
428- Improved TypeScript definitions of function `parse`. Thanks @OpportunityLiu.
429
430
431# 2021-05-24, version 9.4.1
432
433- Fix #2100: add TypeScript declaration for `eigs`. Thanks @andrebianchessi.
434- Fix #2220: add TypeScript files to published npm package. Thanks @dhritzkiv.
435- Update readme regarding TypeScript definition files. Thanks @dhritzkiv.
436- Update to `fraction.js@4.1.1`
437
438
439# 2021-05-16, version 9.4.0
440
441- Implemented support to use objects with a `Map` interface as scope,
442 see #2143, #2166. Thanks @jhugman.
443- Extend `eigs` to support general complex matrices, see #1741. Thanks @m93a.
444- DenseMatrix and SparseMatrix are now iterable, see #1184. Thanks @m93a.
445- Implemented utility functions `matrixFromRows`, `matrixFromColumns`, and
446 `matrixFromFunction`, see #2155, #2153. Thanks @m93a.
447- Added TypeScript definitions to the project, making it redundant to install
448 `@types/mathjs`, and making it easier to improve the definitions. See #2187,
449 #2192. Thanks @CatsMiaow.
450- Upgraded dependencies
451 - `complex.js@2.0.13` (fixing #2211). Thanks @infusion
452 - `fraction.js@4.1.0` (`pow` now supporting rational exponents).
453- Fix #2174: function `pickRandom` having no name. Thanks @HK-SHAO.
454- Fix #2019: VSCode auto import keeps adding import { null } from 'mathjs'.
455- Fix #2185: Fix TypeScript definition of unit division, which can also return
456 a number.
457- Fix #2123: add type definitions for functions `row` and `column`.
458- Fix some files not exposed in the package, see #2213. Thanks @javiermarinros.
459
460
461# 2021-04-12, version 9.3.2
462
463- Fix #2169: mathjs requesting `@babel/runtime` dependency.
464 Regression introduced in `v9.3.1`.
465
466
467# 2021-04-10, version 9.3.1
468
469- Fix #2133: strongly improved the performance of `isPrime`, see #2139.
470 Thanks @Yaffle.
471- Fix #2150: give a clear error "Error: Undefined function ..." instead when
472 evaluating a non-existing function.
473- Fix #660: expose internal functions `FunctionNode.onUndefinedFunction(name)`
474 and `SymbolNode.onUndefinedSymbol(name)`, allowing to override the behavior.
475 By default, an Error is thrown.
476
477
478# 2021-03-10, version 9.3.0
479
480- Implemented support for parsing non decimal numbers with radix point,
481 see #2122, #2121. Thanks @clnhlzmn.
482- Fix #2128: typo in docs of `luSolveAll` and `usolveAll`.
483
484
485# 2021-02-03, version 9.2.0
486
487- Implemented function `count` to count the total elements in a matrix,
488 see #2085. Thanks @Josef37.
489- Fix #2096: cleanup old reference to external dependency `crypto`.
490- Some refactoring in the code to remove duplications, see #2093.
491 Thanks @Josef37.
492
493
494# 2021-01-27, version 9.1.0
495
496- Extended function `reshape` with support for a wildcard `-1` to automatically
497 calculate the remaining size, like `reshape([1, 2, 3, 4, 5, 6], [-1, 2])`
498 which will output `[[0, 1], [2, 3], [4, 5]]`. See #2075. Thanks @Josef37.
499- Fix #2087: function `simplify` ignores second argument of `log`, for example
500 in `simplify('log(e, 9)')` . Thanks @quentintruong.
501
502
503# 2021-01-16, version 9.0.0
504
505- Improved support for bin, hex, and oct literals. See #1996. Thanks @clnhlzmn.
506 - **Breaking change**: parse literals with prefixes `0b`, `0c`, and `0x` are
507 now unsigned by default. To parse them as signed, you have to specify a
508 suffix specifying the word size such as `i16` or `i32`.
509 - Function `format` now supports more notations: `bin`, 'hex', and `oct`,
510 for example `format(255, {notation: "hex"})`.
511 - The functions `format`, `bin`, `hex`, `oct` now allow specifying a wordSize,
512 like `bin(10, 32)` and `format(10, {notation: "bin", wordSize: 32})`.
513 - BigNumber support for the bin, hex, and oct literals.
514- Extended and improved the example rocket_trajectory_optimization.html.
515 Thanks @Josef37.
516
517
518# 2020-12-30, version 8.1.1
519
520- Improved the performance of parsing and evaluating units a lot, see #2065.
521 Thanks @flaviut.
522- Upgraded dependency `fraction.js` to `v4.0.13`.
523- Moved continuous integration testing from Travis CI to Github Workflow,
524 see #2024, #2041. Thanks @harrysarson.
525
526
527# 2020-12-04, version 8.1.0
528
529- Implemented units `kilogramforce` (`kgf`). Thanks @rnd-debug.
530- Fix #2026: Implement a new option `fractionsLimit` for function `simplify`,
531 defaulting to `Infinity`.
532- Improved the documentation of function `clone`. Thanks @redbar0n.
533
534
535# 2020-11-09, version 8.0.1
536
537- Fix #1979: missing "subset" dependency when using "mathjs/number" entry point.
538- Fix #2022: update pretty printing with MathJax example to the latest version
539 of MathJax. Thanks @pkra.
540
541
542# 2020-11-06, version 8.0.0
543
544!!! BE CAREFUL: BREAKING CHANGES !!!
545
546- You can now use mathjs directly in node.js using ES modules without need for
547 a transpiler (see #1928, #1941, #1962).
548 Automatically loading either commonjs code or ES modules code is improved.
549 All generated code is moved under `/lib`: the browser bundle is moved from
550 `/dist` to `/lib/browser`, ES module files are moved to `/lib/esm`,
551 and commonjs files are moved to `/lib/cjs`. Thanks @GreenImp.
552- Non-minified bundle `dist/math.js` is no longer provided. Either use the
553 minified bundle, or create a bundle yourself.
554- Replaced random library `seed-random` with `seedrandom`, see #1955.
555 Thanks @poppinlp.
556- Breaking changes in `pickRandom`, see #1990, #1976.
557 - Will no longer return the input matrix when the given number is greater
558 than the length of the provided possibles. Instead, the function always
559 returns results with the requested number of picks.
560 - Will now return a `Matrix` as output when input was a `Matrix`.
561 - Introduced a new syntax:
562
563 ```
564 math.pickRandom(array, { weights, number, elementWise })
565 ```
566 - Introduced a new option `elementWise`, which is `true` by default.
567 When setting `elementWise` to false, an array containing arrays will return
568 random pick of arrays instead of the elements inside of the nested arrays.
569
570
571# 2020-11-02, version 7.6.0
572
573- Implemented function `rotate(w, theta)`. See #1992, #1160. Thanks @rnd-debug.
574- Implemented support for custom characters in Units via `Unit.isValidAlpha`.
575 See #1663, #2000. Thanks @rnd-debug.
576
577
578# 2020-10-10, version 7.5.1
579
580- Fix object pollution vulnerability in `math.config`. Thanks Snyk.
581
582
583# 2020-10-07, version 7.5.0
584
585- Function `pickRandom` now allows randomly picking elements from matrices
586 with 2 or more dimensions instead of only from a vector, see #1974.
587 Thanks @KonradLinkowski.
588
589
590# 2020-10-07, version 7.4.0
591
592- Implemented support for passing a precision in functions `ceil`, `floor`,
593 and `fix`, similar to `round`, see #1967, #1901. Thanks @rnd-debug.
594- Implemented function `rotationMatrix`, see #1160, #1984. Thanks @rnd-debug.
595- Implement a clear error message when using `sqrtm` with a matrix having
596 more than two dimensions. Thanks @KonradLinkowski.
597- Update dependency `decimal.js` to `10.2.1`.
598
599
600# 2020-09-26, version 7.3.0
601
602- Implemented functions `usolveAll` and `lsolveAll`, see #1916. Thanks @m93a.
603- Implemented support for units in functions `std` and `variance`, see #1950.
604 Thanks @rnd-debug.
605- Implemented support for binary, octal, and hexadecimal notation in the
606 expression parser, and implemented functions `bin`, `oct`, and `hex` for
607 formatting. Thanks @clnhlzmn.
608- Fix #1964: inconsistent calculation of negative dividend modulo for
609 `BigNumber` and `Fraction`. Thanks @ovk.
610
611
612# 2020-08-24, version 7.2.0
613
614- Implemented new function `diff`, see #1634, #1920. Thanks @Veeloxfire.
615- Implemented support for norm 2 for matrices in function `norm`.
616 Thanks @rnd-debug.
617
618
619# 2020-07-13, version 7.1.0
620
621- Implement support for recursion (self-referencing) of typed-functions,
622 new in `typed-function@2.0.0`. This fixes #1885: functions which where
623 extended with a new data type did not always work. Thanks @nickewing.
624- Fix #1899: documentation on expression trees still using old namespace
625 `math.expression.node.*` instead of `math.*`.
626
627
628# 2020-06-24, version 7.0.2
629
630- Fix #1882: have `DenseMatrix.resize` and `SparseMatrix.resize` accept
631 `DenseMatrix` and `SparseMatrix` as inputs too, not only `Array`.
632- Fix functions `sum`, `prod`, `min`, and `max` not throwing a conversion error
633 when passing a single string, like `sum("abc")`.
634
635
636# 2020-05-30, version 7.0.1
637
638- Fix #1844: clarify the documentation of function `eigs`. Thanks @Lazersmoke.
639- Fix #1855: Fix error in the documentation for `math.nthRoots(x)`.
640- Fix #1856: make the library robust against Object prototype pollution.
641
642
643# 2020-05-07, version 7.0.0
644
645Breaking changes:
646
647- Improvements in calculation of the `dot` product of complex values.
648 The first argument is now conjugated. See #1761. Thanks @m93a.
649- Dropped official support for Node.js v8 which has reached end of life.
650- Removed all deprecation warnings introduced in v6.
651 To upgrade smoothly from v5 to v7 or higher, upgrade to v6 first
652 and resolve all deprecation warnings.
653
654
655# 2020-05-04, version 6.6.5
656
657- Fix #1834: value `Infinity` cannot be serialized and deserialized.
658 This is solved now with a new `math.replacer` function used as
659 `JSON.stringify(value, math.replacer)`.
660- Fix #1842: value `Infinity` not turned into the latex symbol `\\infty`.
661
662
663# 2020-04-15, version 6.6.4
664
665- Fix published files containing Windows line endings (CRLF instead of LF).
666
667
668# 2020-04-10, version 6.6.3
669
670- Fix #1813: bug in engineering notation for numbers of function `format`,
671 sometimes resulting in needless trailing zeros.
672- Fix #1808: methods `.toNumber()` and `.toNumeric()` not working on a
673 unitless unit.
674- Fix #1645: not being able to use named operators `mod`, `and`, `not`, `or`,
675 `xor`, `to`, `in` as object keys. Thanks @Veeloxfire.
676- Fix `eigs` not using `config.epsilon`.
677
678
679# 2020-03-29, version 6.6.2
680
681- Fix #1789: Function `eigs` not calculating with BigNumber precision
682 when input contains BigNumbers.
683- Run the build script during npm `prepare`, so you can use the library
684 directly when installing directly from git. See #1751. Thanks @cinderblock.
685
686
687# 2020-02-26, version 6.6.1
688
689- Fix #1725: simplify `a/(b/c)`. Thanks @dbramwell.
690- Fix examples in documentation of `row` and `column`.
691
692
693# 2020-02-01, version 6.6.0
694
695- Implemented function `eigs`, see #1705, #542 #1175. Thanks @arkajitmandal.
696- Fixed #1727: validate matrix size when creating a `DenseMatrix` using
697 `fromJSON`.
698- Fixed `DenseMatrix.map` copying the size and datatype from the original
699 matrix instead of checking the returned dimensions and type of the callback.
700- Add a caret to dependencies (like) `^1.2.3`) to allow downstream updates
701 without having to await a new release of mathjs.
702
703
704# 2020-01-08, version 6.5.0
705
706- Implemented `baseName` option for `createUnit`, see #1707.
707 Thanks @ericman314.
708
709
710# 2020-01-06, version 6.4.0
711
712- Extended function `dimension` with support for n-dimensional points.
713 Thanks @Veeloxfire.
714
715
716# 2019-12-31, version 6.3.0
717
718- Improved performance of `factorial` for `BigNumber` up to a factor two,
719 see #1687. Thanks @kmdrGroch.
720
721
722# 2019-11-20, version 6.2.5
723
724- Fixed `IndexNode` using a hardcoded, one-based implementation of `index`,
725 making it impossible to instantiate a zero-based version of the expression
726 parser. See #782.
727
728
729# 2019-11-20, version 6.2.4
730
731- Fixed #1669: function 'qr' threw an error if the pivot was zero,
732 thanks @kevinkelleher12 and @harrysarson.
733- Resolves #942: remove misleading assert in 'qr'. Thanks @harrysarson.
734- Work around a bug in complex.js where `sign(0)` returns complex NaN.
735 Thanks @harrysarson.
736
737
738# 2019-10-06, version 6.2.3
739
740- Fixed #1640: function `mean` not working for units. Thanks @clintonc.
741- Fixed #1639: function `min` listed twice in the "See also" section of the
742 embedded docs of function `std`.
743- Improved performance of `isPrime`, see #1641. Thanks @arguiot.
744
745
746# 2019-09-23, version 6.2.2
747
748- Fixed methods `map` and `clone` not copying the `dotNotation` property of
749 `IndexNode`. Thanks @rianmcguire.
750- Fixed a typo in the documentation of `toHTML`. Thanks @maytanthegeek.
751- Fixed #1615: error in the docs of `isNumeric`.
752- Fixed #1628: Cannot call methods on empty strings or numbers with value `0`.
753
754
755# 2019-08-31, version 6.2.1
756
757- Fixed #1606: function `format` not working for expressions.
758
759
760# 2019-08-28, version 6.2.0
761
762- Improved performance of `combinationsWithRep`. Thanks @waseemyusuf.
763- Add unit aliases `bit` and `byte`.
764- Fix docs referring to `bit` and `byte` instead of `bits` and `bytes`.
765- Updated dependency `typed-function@1.1.1`.
766
767
768# 2019-08-17, version 6.1.0
769
770- Implemented function `combinationsWithRep` (see #1329). Thanks @waseemyusuf.
771
772
773# 2019-08-05, version 6.0.4
774
775- Fixed #1554, #1565: ES Modules where not transpiled to ES5, giving issues on
776 old browsers. Thanks @mockdeep for helping to find a solution.
777
778
779# 2019-07-07, version 6.0.3
780
781- Add `unpkg` and `jsdelivr` fields in package.json pointing to UMD build.
782 Thanks @tmcw.
783- Fix #1550: nested user defined function not receiving variables of an
784 outer user defined function.
785
786
787# 2019-06-11, version 6.0.2
788
789- Fix not being able to set configuration after disabling function `import`
790 (regression since v6.0.0).
791
792
793# 2019-06-09, version 6.0.1
794
795- Fix function reference not published in npm library.
796- Fix function `evaluate` and `parse` missing in generated docs.
797
798
799# 2019-06-08, version 6.0.0
800
801!!! BE CAREFUL: BREAKING CHANGES !!!
802
803### Most notable changes
804
8051. Full support for **ES modules**. Support for tree-shaking out of the box.
806
807 Load all functions:
808
809 ```js
810 import * as math from 'mathjs'
811 ```
812
813 Use a few functions:
814
815 ```js
816 import { add, multiply } from 'mathjs'
817 ```
818
819 Load all functions with custom configuration:
820
821 ```js
822 import { create, all } from 'mathjs'
823 const config = { number: 'BigNumber' }
824 const math = create(all, config)
825 ```
826
827 Load a few functions with custom configuration:
828
829 ```js
830 import { create, addDependencies, multiplyDependencies } from 'mathjs'
831 const config = { number: 'BigNumber' }
832 const { add, multiply } = create({
833 addDependencies,
834 multiplyDependencies
835 }, config)
836 ```
837
8382. Support for **lightweight, number-only** implementations of all functions:
839
840 ```
841 import { add, multiply } from 'mathjs/number'
842 ```
843
8443. New **dependency injection** solution used under the hood.
845
846
847### Breaking changes
848
849- Node 6 is no longer supported.
850
851- Functions `config` and `import` are not available anymore in the global
852 context:
853
854 ```js
855 // v5
856 import * as mathjs from 'mathjs'
857 mathjs.config(...) // error in v6.0.0
858 mathjs.import(...) // error in v6.0.0
859 ```
860
861 Instead, create your own mathjs instance and pass config and imports
862 there:
863
864 ```js
865 // v6
866 import { create, all } from 'mathjs'
867 const config = { number: 'BigNumber' }
868 const mathjs = create(all, config)
869 mathjs.import(...)
870 ```
871
872- Renamed function `typeof` to `typeOf`, `var` to `variance`,
873 and `eval` to `evaluate`. (the old function names are reserved keywords
874 which can not be used as a variable name).
875- Deprecated the `Matrix.storage` function. Use `math.matrix` instead to create
876 a matrix.
877- Deprecated function `math.expression.parse`, use `math.parse` instead.
878 Was used before for example to customize supported characters by replacing
879 `math.parse.isAlpha`.
880- Moved all classes like `math.type.Unit` and `math.expression.Parser` to
881 `math.Unit` and `math.Parser` respectively.
882- Fixed #1428: transform iterating over replaced nodes. New behavior
883 is that it stops iterating when a node is replaced.
884- Dropped support for renaming factory functions when importing them.
885- Dropped fake BigNumber support of function `erf`.
886- Removed all index.js files used to load specific functions instead of all, like:
887
888 ```
889 // v5
890 // ... set up empty instance of mathjs, then load a set of functions:
891 math.import(require('mathjs/lib/function/arithmetic'))
892 ```
893
894 Individual functions are now loaded simply like:
895
896 ```js
897 // v6
898 import { add, multiply } from 'mathjs'
899 ```
900
901 To set a specific configuration on the functions:
902
903 ```js
904 // v6
905 import { create, addDependencies, multiplyDependencies } from 'mathjs'
906 const config = { number: 'BigNumber' }
907 const math = create({ addDependencies, multiplyDependencies }, config)
908 ```
909
910 See example `advanced/custom_loading.js`.
911
912- Updated the values of all physical units to their latest official values.
913 See #1529. Thanks @ericman314.
914
915### Non breaking changes
916
917- Implemented units `t`, `tonne`, `bel`, `decibel`, `dB`, and prefixes
918 for `candela`. Thanks @mcvladthegoat.
919- Fixed `epsilon` setting being applied globally to Complex numbers.
920- Fix `math.simplify('add(2, 3)')` throwing an error.
921- Fix #1530: number formatting first applied `lowerExp` and `upperExp`
922 and after that rounded the value instead of the other way around.
923- Fix #1473: remove `'use strict'` in every file, not needed anymore.
924
925
926# 2019-05-18, version 5.10.3
927
928- Fixed dependency `del` being a dependency instead of devDependency.
929
930
931# 2019-05-18, version 5.10.2
932
933- Fix #1515, #1516, #1517: broken package due to a naming conflict in
934 the build folder of a util file `typeOf.js` and `typeof.js`.
935 Solved by properly cleaning all build folders before building.
936
937
938# 2019-05-17, version 5.10.1
939
940- Fix #1512: format using notation `engineering` can give wrong results
941 when the value has less significant digits than the number of digits in
942 the output.
943
944
945# 2019-05-08, version 5.10.0
946
947- Fix `lib/header.js` not having filled in date and version. Thanks @kevjin.
948- Upgraded dependency `decimal.js@10.2.0`, fixing an issue on node.js 12.
949
950
951# 2019-04-08, version 5.9.0
952
953- Implemented functions `row` and `column` (see #1413). Thanks @SzechuanSage.
954- Fixed #1459: `engineering` notation of function `format` not available
955 for `BigNumber`.
956- Fixed #1465: `node.toHTML()` not correct for unary operators like
957 `factorial`.
958
959
960# 2019-03-20, version 5.8.0
961
962- Implemented new function `apply`. Thanks @bnlcas.
963- Implemented passing an optional `dimension` argument to `std` and `var`.
964 Thanks @bnlcas.
965
966
967# 2019-03-10, version 5.7.0
968
969- Implemented support for `pow()` in `derivative`. Thanks @sam-19.
970- Gracefully handle round-off errors in fix, ceil, floor, and range
971 (Fixes #1429, see also #1434, #1432). Thanks @ericman314.
972
973
974# 2019-03-02, version 5.6.0
975
976- Upgrade decimal.js to v10.1.1 (#1421).
977- Fixed #1418: missing whitespace when stringifying an expression
978 containing "not".
979
980
981# 2019-02-20, version 5.5.0
982
983- Fixed #1401: methods `map` and `forEach` of `SparseMatrix` not working
984 correctly when indexes are unordered.
985- Fixed #1404: inconsistent rounding of negative numbers.
986- Upgrade tiny-emitter to v2.1.0 (#1397).
987
988
989# 2019-01-25, version 5.4.2
990
991- Fixed `math.format` not working for BigNumbers with a precision above
992 1025 digits (see #1385). Thanks @ericman314.
993- Fixed incorrect LaTeX output of `RelationalNode`. Thanks @rianmcguire.
994- Fixed a bug the methods `map`, `forEach`, `traverse`, and `transform`
995 of `FunctionNode`.
996
997
998# 2019-01-10, version 5.4.1
999
1000- Fix #1378: negative bignumbers not formatted correctly.
1001- Upgrade fraction.js to version 4.0.12 (#1369).
1002
1003
1004# 2018-12-09, version 5.4.0
1005
1006- Extended sum.js to accept a dimension input to calculate the sum over a
1007 specific axis. Thanks @bnlcas.
1008- Fix #1328: objects can't be written multi-line. Thanks @GHolk.
1009- Remove side effects caused by `Unit.format` and `Unit.toString`,
1010 making changes to the unit on execution. Thanks @ericman314.
1011
1012
1013# 2018-12-03, version 5.3.1
1014
1015- Fixed #1336: Unit.toSI() returning units with prefix like `mm` instead
1016 of `m`. Thanks @ericman314.
1017
1018
1019# 2018-11-29, version 5.3.0
1020
1021- Implemented function `hasNumericValue`. Thanks @Sathish-kumar-Subramani.
1022- Fix #1326: non-ascii character in print.js.
1023- Fix #1337: `math.format` not working correctly with `{ precision: 0 }`.
1024 Thanks @dkenul.
1025
1026
1027# 2018-10-30, version 5.2.3
1028
1029- Fixed #1293: non-unicode characters in `escape-latex` giving issues in some
1030 specific cases. Thanks @dangmai.
1031- Fixed incorrect LaTeX output of function `bitNot`, see #1299. Thanks @FSMaxB.
1032- Fixed #1304: function `pow` not supporting inputs `pow(Unit, BigNumber)`.
1033- Upgraded dependencies (`escape-latex@1.2.0`)
1034
1035
1036# 2018-10-23, version 5.2.2
1037
1038- Fixed #1286: Fixed unit base recognition and formatting for
1039 user-defined units. Thanks @ericman314.
1040
1041
1042# 2018-10-18, version 5.2.1
1043
1044- Fixed unit `rod` being defined as `5.02921` instead of `5.0292`.
1045 Thanks @ericman314.
1046- Upgraded dependencies (`fraction.js@4.0.10`)
1047- Upgraded devDependencies (`@babel/core@7.1.2`, `nyc@13.1.0`,
1048 `webpack@4.21.0`).
1049
1050
1051# 2018-10-05, version 5.2.0
1052
1053- Implemented support for chained conditionals like `10 < x <= 50`.
1054 Thanks @ericman314.
1055- Add an example showing a proof of concept of using `BigInt` in mathjs.
1056- Fixed #1269: Bugfix for BigNumber divided by unit. Thanks @ericman314.
1057- Fixed #1240: allow units having just a value and no unit.
1058 Thanks @ericman314.
1059
1060
1061## 2018-09-09, version 5.1.2
1062
1063- Fixed a typo in the docs of `parse`. Thanks @mathiasvr.
1064- Fixed #1222: a typo in the docs of `subset`.
1065- Fixed #1236: `quantileSeq` has inconsistent return.
1066- Fixed #1237: norm sometimes returning a complex number instead of
1067 number.
1068- Upgraded dependencies (`fraction.js@4.0.9`)
1069- Upgraded devDependencies (`babel@7`, `karma-webpack@3.0.4`,
1070 `nyc@13.0.1`, `standard@12.0.0`, `uglify-js@3.4.9`, `webpack@4.17.2`)
1071
1072
1073## 2018-08-21, version 5.1.1
1074
1075- Function `isNumeric` now recognizes more types.
1076- Fixed #1214: functions `sqrt`, `max`, `min`, `var`, `std`, `mode`, `mad`,
1077 `median`, and `partitionSelect` not neatly handling `NaN` inputs. In some
1078 cases (`median`, `mad`, and `partitionSelect`) this resulted in an infinite
1079 loop.
1080- Upgraded dependencies (`escape-latex@1.1.1`)
1081- Upgraded devDependencies (`webpack@4.17.0`)
1082
1083
1084## 2018-08-12, version 5.1.0
1085
1086- Implemented support for strings enclosed in single quotes.
1087 Thanks @jean-emmanuel.
1088- Implemented function `getMatrixDataType`. Thanks @JasonShin.
1089- Implemented new `options` argument in `simplify`. Thanks @paulobuchsbaum.
1090- Bug fixes in `rationalize`, see #1173. Thanks @paulobuchsbaum.
1091
1092
1093## 2018-07-22, version 5.0.4
1094
1095- Strongly improved the performance of functions `factorial` for numbers.
1096 This improves performance of functions `gamma`, `permutation`, and
1097 `combination` too. See #1170. Thanks @honeybar.
1098- Strongly improved the performance of function `reshape`, thanks to a
1099 friend of @honeybar.
1100
1101
1102## 2018-07-14, version 5.0.3
1103
1104- Fixed many functions (for example `add` and `subtract`) not working
1105 with matrices having a `datatype` defined.
1106- Fixed #1147: bug in `format` with `engineering` notation in outputting
1107 the correct number of significant figures. Thanks @ericman314.
1108- Fixed #1162: transform functions not being cleaned up when overriding
1109 it by importing a factory function with the same name.
1110- Fixed broken links in the documentation. Thanks @stropitek.
1111- Refactored the code of `parse` into a functional approach.
1112 Thanks @harrysarson.
1113- Changed `decimal.js` import to ES6. Thanks @weinshel.
1114
1115
1116## 2018-07-07, version 5.0.2
1117
1118- Fixed #1136: rocket trajectory example broken (since v4.0.0).
1119- Fixed #1137: `simplify` unnecessarily replacing implicit multiplication with
1120 explicit multiplication.
1121- Fixed #1146: `rationalize` throwing exceptions for some input with decimals.
1122 Thanks @maruta.
1123- Fixed #1088: function arguments not being passed to `rawArgs` functions.
1124- Fixed advanced example `add_new_datatypes`.
1125- Fixed mathjs core constants not working without complex numbers.
1126 Thanks @ChristopherChudzicki.
1127- Fixed a broken link in the documentation on units. Thanks @stropitek.
1128- Upgraded dependencies (`typed-function@1.0.4`, `complex.js@2.0.11`).
1129- Upgraded devDependencies (`babel-loader@7.1.5 `, `uglify-js@3.4.3`,
1130 `expr-eval@1.2.2`, `webpack@4.15.1`).
1131
1132
1133## 2018-07-01, version 5.0.1
1134
1135- Improved error messaging when converting units. Thanks @gap777.
1136- Upgraded devDependencies (`kerma`, `uglify-js`, `webpack`).
1137
1138
1139## 2018-06-16, version 5.0.0
1140
1141!!! BE CAREFUL: BREAKING CHANGES !!!
1142
1143- Implemented complex conjugate transpose `math.ctranspose`. See #1097.
1144 Thanks @jackschmidt.
1145- Changed the behavior of `A'` (transpose) in the expression parser to
1146 calculate the complex conjugate transpose. See #1097. Thanks @jackschmidt.
1147- Added support for `complex({abs: 1, arg: 1})`, and improved the docs on
1148 complex numbers. Thanks @ssaket.
1149- Renamed `eye` to `identity`, see #1054.
1150- Math.js code can now contain ES6. The ES6 source code is moved from `lib`
1151 to `src`, and `lib` now contains the compiled ES5 code.
1152- Upgraded dependencies:
1153 - `decimal.js` from `9.0.1` to `10.0.1`
1154 - Upgraded dev dependencies
1155- Changed code style to https://standardjs.com/, run linter on `npm test`.
1156 See #1110.
1157- Dropped support for bower. Use npm or an other package manages instead.
1158- Dropped support for (non-primitive) instances of `Number`, `Boolean`, and
1159 `String` from functions `clone` and `typeof`.
1160- Dropped official support for IE9 (probably still works, but it's not tested).
1161- Fixed #851: More consistent behavior of sqrt, nthRoot, and pow.
1162 Thanks @dakotablair.
1163- Fixed #1103: Calling `toTex` on node that contains `derivative` causing
1164 an exception. Thanks @joelhoover.
1165
1166
1167## 2018-06-02, version 4.4.2
1168
1169- Drastically improved the performance of `det`. Thanks @ericman314.
1170- Fixed #1065, #1121: Fixed wrong documentation of function
1171 `compareNatural` and clarified the behavior for strings.
1172- Fixed #1122 a regression in function `inv` (since `v4.4.1`).
1173 Thanks @ericman314.
1174
1175
1176## 2018-05-29, version 4.4.1
1177
1178- Fixed #1109: a bug in `inv` when dealing with values close to zero.
1179 Thanks @ericman314.
1180
1181
1182## 2018-05-28, version 4.4.0
1183
1184- Implemented functions `equalText` and `compareText`. See #1085.
1185
1186
1187## 2018-05-21, version 4.3.0
1188
1189- Implemented matrix exponential `math.expm`. Thanks @ericman314.
1190- Fixed #1101: math.js bundle not working when loading in a WebWorker.
1191- Upgraded dependencies
1192 - `complex.js` from `v2.0.2` to `v2.0.10`.
1193 - `fraction.js` from `v4.0.4` to `v4.0.8`.
1194- Upgraded devDependencies (`mocha`, `uglify-js`, `webpack`).
1195
1196
1197## 2018-05-05, version 4.2.2
1198
1199- Fixed calculating the Frobenius norm of complex matrices correctly,
1200 see #1098. Thanks @jackschmidt.
1201- Fixed #1076: cannot use mathjs in React VR by updating to
1202 `escape-latex@1.0.3`.
1203
1204
1205## 2018-05-02, version 4.2.1
1206
1207- Fixed `dist/math.js` being minified.
1208
1209
1210## 2018-05-02, version 4.2.0
1211
1212- Implemented function `math.sqrtm`. Thanks @ferrolho.
1213- Implemented functions `math.log2`, `math.log1p`, and `math.expm1`.
1214 Thanks @BigFav and @harrysarson.
1215- Fixed some unit tests broken on nodejs v10.
1216- Upgraded development dependencies.
1217- Dropped integration testing on nodejs v4.
1218
1219
1220## 2018-04-18, version 4.1.2
1221
1222- Fixed #1082: implemented support for unit plurals `decades`, `centuries`,
1223 and `millennia`.
1224- Fixed #1083: units `decade` and `watt` having a wrong name when stringifying.
1225 Thanks @ericman314.
1226
1227
1228## 2018-04-11, version 4.1.1
1229
1230- Fixed #1063: derivative not working when resolving a variable with unary
1231 minus like `math.derivative('-x', 'x')`.
1232
1233
1234## 2018-04-08, version 4.1.0
1235
1236- Extended function `math.print` with support for arrays and matrices.
1237 Thanks @jean-emmanuel.
1238- Fixed #1077: Serialization/deserialization to JSON with reviver not being
1239 supported by nodes.
1240- Fixed #1016: Extended `math.typeof` with support for `ResultSet` and nodes
1241 like `SymbolNode`.
1242- Fixed #1072: Added support for long and short prefixes for the unit `bar`
1243 (i.e. `millibar` and `mbar`).
1244
1245
1246## 2018-03-17, version 4.0.1
1247
1248- Fixed #1062: mathjs not working on ES5 browsers like IE11 and Safari 9.3.
1249- Fixed #1061: `math.unit` not accepting input like `1/s`.
1250
1251
1252## 2018-02-25, version 4.0.0
1253
1254!!! BE CAREFUL: BREAKING CHANGES !!!
1255
1256Breaking changes (see also #682):
1257
1258- **New expression compiler**
1259
1260 The compiler of the expression parser is replaced with one that doesn't use
1261 `eval` internally. See #1019. This means:
1262
1263 - a slightly improved performance on most browsers.
1264 - less risk of security exploits.
1265 - the code of the new compiler is easier to understand, maintain, and debug.
1266
1267 Breaking change here: When using custom nodes in the expression parser,
1268 the syntax of `_compile` has changed. This is an undocumented feature though.
1269
1270- **Parsed expressions**
1271
1272 - The class `ConstantNode` is changed such that it just holds a value
1273 instead of holding a stringified value and it's type.
1274 `ConstantNode(valueStr, valueType`) is now `ConstantNode(value)`
1275 Stringification uses `math.format`, which may result in differently
1276 formatted numeric output.
1277
1278 - The constants `true`, `false`, `null`, `undefined`, `NaN`, `Infinity`,
1279 and `uninitialized` are now parsed as ConstantNodes instead of
1280 SymbolNodes in the expression parser. See #833.
1281
1282- **Implicit multiplication**
1283
1284 - Changed the behavior of implicit multiplication to have higher
1285 precedence than explicit multiplication and division, except in
1286 a number of specific cases. This gives a more natural behavior
1287 for implicit multiplications. For example `24h / 6h` now returns `4`,
1288 whilst `1/2 kg` evaluates to `0.5 kg`. Thanks @ericman314. See: #792.
1289 Detailed documentation: https://github.com/josdejong/mathjs/blob/v4/docs/expressions/syntax.md#implicit-multiplication.
1290
1291 - Immediately invoking a function returned by a function like `partialAdd(2)(3)`
1292 is no longer supported, instead these expressions are evaluated as
1293 an implicit multiplication `partialAdd(2) * (3)`. See #1035.
1294
1295- **String formatting**
1296
1297 - In function `math.format`, the options `{exponential: {lower: number, upper: number}}`
1298 (where `lower` and `upper` are values) are replaced with `{lowerExp: number, upperExp: number}`
1299 (where `lowerExp` and `upperExp` are exponents). See #676. For example:
1300 ```js
1301 math.format(2000, {exponential: {lower: 1e-2, upper: 1e2}})
1302 ```
1303 is now:
1304 ```js
1305 math.format(2000, {lowerExp: -2, upperExp: 2})
1306 ```
1307
1308 - In function `math.format`, the option `notation: 'fixed'` no longer rounds to
1309 zero digits when no precision is specified: it leaves the digits as is.
1310 See #676.
1311
1312- **String comparison**
1313
1314 Changed the behavior of relational functions (`compare`, `equal`,
1315 `equalScalar`, `larger`, `largerEq`, `smaller`, `smallerEq`, `unequal`)
1316 to compare strings by their numeric value they contain instead of
1317 alphabetically. This also impacts functions `deepEqual`, `sort`, `min`,
1318 `max`, `median`, and `partitionSelect`. Use `compareNatural` if you
1319 need to sort an array with text. See #680.
1320
1321- **Angle units**
1322
1323 Changed `rad`, `deg`, and `grad` to have short prefixes,
1324 and introduced `radian`, `degree`, and `gradian` and their plurals
1325 having long prefixes. See #749.
1326
1327- **Null**
1328
1329 - `null` is no longer implicitly casted to a number `0`, so input like
1330 `math.add(2, null)` is no longer supported. See #830, #353.
1331
1332 - Dropped constant `uninitialized`, which was used to initialize
1333 leave new entries undefined when resizing a matrix is removed.
1334 Use `undefined` instead to indicate entries that are not explicitly
1335 set. See #833.
1336
1337- **New typed-function library**
1338
1339 - The `typed-function` library used to check the input types
1340 of functions is completely rewritten and doesn't use `eval` under
1341 the hood anymore. This means a reduced security risk, and easier
1342 to debug code. The API is the same, but error messages may differ
1343 a bit. Performance is comparable but may differ in specific
1344 use cases and browsers.
1345
1346Non breaking changes:
1347
1348- Thanks to the new expression compiler and `typed-function` implementation,
1349 mathjs doesn't use JavaScript's `eval` anymore under the hood.
1350 This allows using mathjs in environments with security restrictions.
1351 See #401.
1352- Implemented additional methods `isUnary()` and `isBinary()` on
1353 `OperatorNode`. See #1025.
1354- Improved error messages for statistical functions.
1355- Upgraded devDependencies.
1356- Fixed #1014: `derivative` silently dropping additional arguments
1357 from operator nodes with more than two arguments.
1358
1359
1360## 2018-02-07, version 3.20.2
1361
1362- Upgraded to `typed-function@0.10.7` (bug-fix release).
1363- Fixed option `implicit` not being copied from an `OperatorNode`
1364 when applying function `map`. Thanks @HarrySarson.
1365- Fixed #995: spaces and underscores not property being escaped
1366 in `toTex()`. Thanks @FSMaxB.
1367
1368
1369## 2018-01-17, version 3.20.1
1370
1371- Fixed #1018: `simplifyCore` failing in some cases with parentheses.
1372 Thanks @firepick1.
1373
1374
1375## 2018-01-14, version 3.20.0
1376
1377- Implement support for 3 or more arguments for operators `+` and `*` in
1378 `derivative`. Thanks @HarrySarson. See #1002.
1379- Fixed `simplify` evalution of `simplify` of functions with more than two
1380 arguments wrongly: `simplify('f(x, y, z)') evaluated to `f(f(x, y), z)`
1381 instead of `f(x, y, z)`. Thanks @joelhoover.
1382- Fixed `simplify` throwing an error in some cases when simplifying unknown
1383 functions, for example `simplify('f(4)')`. Thanks @joelhoover.
1384- Fixed #1013: `simplify` wrongly simplifing some expressions containing unary
1385 minus, like `0 - -x`. Thanks @joelhoover.
1386- Fixed an error in an example in the documentation of `xor`. Thanks @denisx.
1387
1388
1389## 2018-01-06, version 3.19.0
1390
1391- Extended functions `distance` and `intersect` with support for BigNumbers.
1392 Thanks @ovk.
1393- Improvements in function `simplify`: added a rule that allows combining
1394 of like terms in embedded quantities. Thanks @joelhoover.
1395
1396
1397## 2017-12-28, version 3.18.1
1398
1399- Fixed #998: An issue with simplifying an expression containing a subtraction.
1400 Thanks @firepick1.
1401
1402
1403## 2017-12-16, version 3.18.0
1404
1405- Implemented function `rationalize`. Thanks @paulobuchsbaum.
1406- Upgraded dependencies:
1407 ```
1408 decimal.js 7.2.3 → 9.0.1 (no breaking changes affecting mathjs)
1409 fraction.js 4.0.2 → 4.0.4
1410 tiny-emitter 2.0.0 → 2.0.2
1411 ```
1412- Upgraded dev dependencies.
1413- Fixed #975: a wrong example in the docs of lusolve.
1414- Fixed #983: `pickRandom` returning an array instead of single value
1415 when input was an array with just one value. Clarified docs.
1416- Fixed #969: preven issues with yarn autoclean by renaming an
1417 interally used folder "docs" to "embeddedDocs".
1418
1419
1420## 2017-11-18, version 3.17.0
1421
1422- Improved `simplify` for nested exponentiations. Thanks @IvanVergiliev.
1423- Fixed a security issue in `typed-function` allowing arbitrary code execution
1424 in the JavaScript engine by creating a typed function with JavaScript code
1425 in the name. Thanks Masato Kinugawa.
1426- Fixed a security issue where forbidden properties like constructor could be
1427 replaced by using unicode characters when creating an object. No known exploit,
1428 but could possibly allow arbitrary code execution. Thanks Masato Kinugawa.
1429
1430
1431## 2017-10-18, version 3.16.5
1432
1433- Fixed #954: Functions `add` and `multiply` not working when
1434 passing three or more arrays or matrices.
1435
1436
1437## 2017-10-01, version 3.16.4
1438
1439- Fixed #948, #949: function `simplify` returning wrong results or
1440 running into an infinite recursive loop. Thanks @ericman314.
1441- Fixed many small issues in the embedded docs. Thanks @Schnark.
1442
1443
1444## 2017-08-28, version 3.16.3
1445
1446- Fixed #934: Wrong simplification of unary minus. Thanks @firepick1.
1447- Fixed #933: function `simplify` reordering operations. Thanks @firepick1.
1448- Fixed #930: function `isNaN` returning wrong result for complex
1449 numbers having just one of their parts (re/im) being `NaN`.
1450- Fixed #929: `FibonacciHeap.isEmpty` returning wrong result.
1451
1452
1453## 2017-08-20, version 3.16.2
1454
1455- Fixed #924: a regression in `simplify` not accepting the signature
1456 `simplify(expr, rules, scope)` anymore. Thanks @firepick1.
1457- Fixed missing parenthesis when stringifying expressions containing
1458 implicit multiplications (see #922). Thanks @FSMaxB.
1459
1460
1461## 2017-08-12, version 3.16.1
1462
1463- For security reasons, type checking is now done in a more strict
1464 way using functions like `isComplex(x)` instead of duck type checking
1465 like `x && x.isComplex === true`.
1466- Fixed #915: No access to property "name".
1467- Fixed #901: Simplify units when calling `unit.toNumeric()`.
1468 Thanks @AlexanderBeyn.
1469- Fixed `toString` of a parsed expression tree containing an
1470 immediately invoked function assignment not being wrapped in
1471 parenthesis (for example `(f(x) = x^2)(4)`).
1472
1473
1474## 2017-08-06, version 3.16.0
1475
1476- Significant performance improvements in `math.simplify`.
1477 Thanks @firepick1.
1478- Improved API for `math.simplify`, optionally pass a scope with
1479 variables which are resolved, see #907. Thanks @firepick1.
1480- Fixed #912: math.js didn't work on IE10 anymore (regression
1481 since 3.15.0).
1482
1483
1484## 2017-07-29, version 3.15.0
1485
1486- Added support for the dollar character `$` in symbol names (see #895).
1487- Allow objects with prototypes as scope again in the expression parser,
1488 this was disabled for security reasons some time ago. See #888, #899.
1489 Thanks @ThomasBrierley.
1490- Fixed #846: Issues in the functions `map`, `forEach`, and `filter`
1491 when used in the expression parser:
1492 - Not being able to use a function assignment as inline expression
1493 for the callback function.
1494 - Not being able to pass an inline expression as callback for `map`
1495 and `forEach`.
1496 - Index and original array/matrix not passed in `map` and `filter`.
1497
1498
1499## 2017-07-05, version 3.14.2
1500
1501- Upgraded to `fraction.js@4.0.2`
1502- Fixed #891 using BigNumbers not working in browser environments.
1503
1504
1505## 2017-06-30, version 3.14.1
1506
1507- Reverted to `fraction.js@4.0.0`, there is an issue with `4.0.1`
1508 in the browser.
1509
1510
1511## 2017-06-30, version 3.14.0
1512
1513- Implemented set methods `setCartesian`, `setDifference`,
1514 `setDistinct`, `setIntersect`, `setIsSubset`, `setPowerset`,
1515 `setSize`. Thanks @Nekomajin42.
1516- Implemented method `toHTML` on nodes. Thanks @Nekomajin42.
1517- Implemented `compareNatural` and `sort([...], 'natural')`.
1518- Upgraded dependencies to the latest versions:
1519 - `complex.js@2.0.4`
1520 - `decimal.js@7.2.3`
1521 - `fraction.js@4.0.1`
1522 - `tiny-emitter@2.0.0`
1523 - And all devDependencies.
1524- Fixed #865: `splitUnit` can now deal with round-off errors.
1525 Thanks @ericman314.
1526- Fixed #876: incorrect definition for unit `erg`. Thanks @pjhampton.
1527- More informative error message when using single quotes instead of
1528 double quotes around a string. Thanks @HarrySarson.
1529
1530
1531## 2017-05-27, version 3.13.3
1532
1533- Fixed a bug in function `intersection` of line and plane.
1534 Thanks @viclai.
1535- Fixed security vulnerabilities.
1536
1537
1538## 2017-05-26, version 3.13.2
1539
1540- Disabled function `chain` inside the expression parser for security
1541 reasons (it's not needed there anyway).
1542- Fixed #856: function `subset` not returning non-primitive scalars
1543 from Arrays correctly. (like `math.eval('arr[1]', {arr: [math.bignumber(2)]})`.
1544- Fixed #861: physical constants not available in the expression parser.
1545
1546
1547## 2017-05-12, version 3.13.1
1548
1549- Fixed creating units with an alias not working within the expression
1550 parser.
1551- Fixed security vulnerabilities. Thanks Sam.
1552
1553
1554## 2017-05-12, version 3.13.0
1555
1556- Command line application can now evaluate inline expressions
1557 like `mathjs 1+2`. Thanks @slavaGanzin.
1558- Function `derivative` now supports `abs`. Thanks @tetslee.
1559- Function `simplify` now supports BigNumbers. Thanks @tetslee.
1560- Prevent against endless loops in `simplify`. Thanks @tetslee.
1561- Fixed #813: function `simplify` converting small numbers to inexact
1562 Fractions. Thanks @tetslee.
1563- Fixed #838: Function `simplify` now supports constants like `e`.
1564 Thanks @tetslee.
1565
1566
1567## 2017-05-05, version 3.12.3
1568
1569- Fixed security vulnerabilities. Thanks Dan and Sam.
1570
1571
1572## 2017-04-30, version 3.12.2
1573
1574- Added a rocket trajectory optimization example.
1575
1576
1577## 2017-04-24, version 3.12.1
1578
1579- Fixed #804
1580 - Improved handling of powers of `Infinity`. Thanks @HarrySarson.
1581 - Fixed wrong formatting of complex NaN.
1582- Fixed security vulnerabilities in the expression parser.
1583 Thanks Sam and Dan.
1584
1585
1586## 2017-04-17, version 3.12.0
1587
1588- Implemented QR decomposition, function `math.qr`. Thanks @HarrySarson.
1589- Fixed #824: Calling `math.random()` freezes IE and node.js.
1590
1591
1592## 2017-04-08, version 3.11.5
1593
1594- More security measures in the expression parser.
1595 WARNING: the behavior of the expression parser is now more strict,
1596 some undocumented features may not work any longer.
1597 - Accessing and assigning properties is now only allowed on plain
1598 objects, not on classes, arrays, and functions anymore.
1599 - Accessing methods is restricted to a set of known, safe methods.
1600
1601
1602## 2017-04-03, version 3.11.4
1603
1604- Fixed a security vulnerability in the expression parser. Thanks @xfix.
1605
1606
1607## 2017-04-03, version 3.11.3
1608
1609- Fixed a security vulnerability in the expression parser. Thanks @xfix.
1610
1611
1612## 2017-04-03, version 3.11.2
1613
1614- Fixed a security vulnerability in the expression parser. Thanks @xfix.
1615
1616
1617## 2017-04-02, version 3.11.1
1618
1619- Fixed security vulnerabilities in the expression parser.
1620 Thanks Joe Vennix and @xfix.
1621
1622
1623## 2017-04-02, version 3.11.0
1624
1625- Implemented method Unit.toSI() to convert a unit to base SI units.
1626 Thanks @ericman314.
1627- Fixed #821, #822: security vulnerabilities in the expression parser.
1628 Thanks @comex and @xfix.
1629
1630
1631## 2017-03-31, version 3.10.3
1632
1633- More security fixes related to the ones fixed in `v3.10.2`.
1634
1635
1636## 2017-03-31, version 3.10.2
1637
1638- Fixed a security vulnerability in the expression parser allowing
1639 execution of arbitrary JavaScript. Thanks @CapacitorSet and @denvit.
1640
1641
1642## 2017-03-26, version 3.10.1
1643
1644- Fixed `xgcd` for negative values. Thanks @litmit.
1645- Fixed #807: function transform of existing functions not being removed when
1646 overriding such a function.
1647
1648
1649## 2017-03-05, version 3.10.0
1650
1651- Implemented function `reshape`. Thanks @patgrasso and @ericman314.
1652- Implemented configuration option `seedRandom` for deterministic random
1653 numbers. Thanks @morsecodist.
1654- Small fixes in the docs. Thanks @HarrySarson.
1655- Dropped support for component package manager (which became deprecated about
1656 one and a half year ago).
1657
1658
1659## 2017-02-22, version 3.9.3
1660
1661- Fixed #797: issue with production builds of React Native projects.
1662- Fixed `math.round` not accepting inputs `NaN`, `Infinity`, `-Infinity`.
1663- Upgraded all dependencies.
1664
1665
1666## 2017-02-16, version 3.9.2
1667
1668- Fixed #795: Parse error in case of a multi-line expression with just comments.
1669
1670
1671## 2017-02-06, version 3.9.1
1672
1673- Fixed #789: Math.js not supporting conversion of `string` to `BigNumber`,
1674 `Fraction`, or `Complex` number.
1675- Fixed #790: Expression parser did not pass function arguments of enclosing
1676 functions via `scope` to functions having `rawArgs = true`.
1677- Small fixes in the docs. Thanks @HarrySarson.
1678
1679
1680## 2017-01-23, version 3.9.0
1681
1682- Implemented support for algebra: powerful new functions `simplify` and
1683 `derivative`. Thanks @ericman314, @tetslee, and @BigFav.
1684- Implemented Kronecker Product `kron`. Thanks @adamisntdead.
1685- Reverted `FunctionNode` not accepting a string as function name anymore.
1686- Fixed #765: `FunctionAssignmentNode.toString()` returning a string
1687 incompatible with the function assignment syntax.
1688
1689
1690## 2016-12-15, version 3.8.1
1691
1692- Implemented function `mad` (median absolute deviation). Thanks @ruhleder.
1693- Fixed #762: expression parser failing to invoke a function returned
1694 by a function.
1695
1696
1697## 2016-11-18, version 3.8.0
1698
1699- Functions `add` and `multiply` now accept more than two arguments. See #739.
1700- `OperatorNode` now supports more than two arguments. See #739. Thanks @FSMaxB.
1701- Implemented a method `Node.cloneDeep` for the expression nodes. See #745.
1702- Fixed a bug in `Node.clone()` not cloning implicit multiplication correctly.
1703 Thanks @FSMaxB.
1704- Fixed #737: Improved algorithm determining the best prefix for units.
1705 It will now retain the original unit like `1 cm` when close enough,
1706 instead of returning `10 mm`. Thanks @ericman314.
1707- Fixed #732: Allow letter-like unicode characters like Ohm `\u2126`.
1708- Fixed #749: Units `rad`, `deg`, and `grad` can now have prefixes like `millirad`.
1709- Some fixes in the docs and comments of examples. Thanks @HarrySarson.
1710
1711
1712## 2016-11-05, version 3.7.0
1713
1714- Implemented method `Node.equals(other)` for all nodes of the expression parser.
1715- Implemented BigNumber support in function `arg()`.
1716- Command Line Interface loads faster.
1717- Implicit conversions between Fractions and BigNumbers throw a neat error now
1718 (See #710).
1719
1720
1721## 2016-10-21, version 3.6.0
1722
1723- Implemented function `erf()`. THanks @patgrasso.
1724- Extended function `cross()` to support n-d vectors. Thanks @patgrasso.
1725- Extended function `pickRandom` with the option to pick multiple values from
1726 an array and give the values weights: `pickRandom(possibles, number, weights)`.
1727 Thanks @woylie.
1728- Parser now exposes test functions like `isAlpha` which can be replaced in
1729 order to adjust the allowed characters in variables names (See #715).
1730- Fixed #727: Parser not throwing an error for invalid implicit multiplications
1731 like `-2 2` and `2^3 4` (right after the second value of an operator).
1732- Fixed #688: Describe allowed variable names in the docs.
1733
1734
1735## 2016-09-21, version 3.5.3
1736
1737- Some more fixes regarding numbers ending with a decimal mark (like `2.`).
1738
1739
1740## 2016-09-20, version 3.5.2
1741
1742- Fixed numbers ending with a decimal mark (like `2.`) not being supported by
1743 the parser, solved the underlying ambiguity in the parser. See #707, #711.
1744
1745
1746## 2016-09-12, version 3.5.1
1747
1748- Removed a left over console.log statement. Thanks @eknkc.
1749
1750
1751## 2016-09-07, version 3.5.0
1752
1753- Comments of expressions are are now stored in the parsed nodes. See #690.
1754- Fixed function `print` not accepting an Object with formatting options as
1755 third parameter Thanks @ThomasBrierley.
1756- Fixed #707: The expression parser no longer accepts numbers ending with a dot
1757 like `2.`.
1758
1759
1760## 2016-08-08, version 3.4.1
1761
1762- Fixed broken bundle files (`dist/math.js`, `dist/math.min.js`).
1763- Fixed some layout issues in the function reference docs.
1764
1765
1766## 2016-08-07, version 3.4.0
1767
1768- Implemented support for custom units using `createUnit`. Thanks @ericman314.
1769- Implemented function `splitUnits`. Thanks @ericman314.
1770- Implemented function `isPrime`. Thanks @MathBunny.
1771
1772
1773## 2016-07-05, version 3.3.0
1774
1775- Implemented function `isNaN`.
1776- Function `math.filter` now passes three arguments to the callback function:
1777 value, index, and array.
1778- Removed the check on the number of arguments from functions defined in the
1779 expression parser (see #665).
1780- Fixed #665: functions `map`, `forEach`, and `filter` now invoke callbacks
1781 which are a typed-function with the correct number of arguments.
1782
1783
1784## 2016-04-26, version 3.2.1
1785
1786- Fixed #651: unable to perform calculations on "Unit-less" units.
1787- Fixed matrix.subset mutating the replacement matrix when unsqueezing it.
1788
1789
1790## 2016-04-16, version 3.2.0
1791
1792- Implemented #644: method `Parser.getAll()` to retrieve all defined variables.
1793- Upgraded dependencies (decimal.js@5.0.8, fraction.js@3.3.1,
1794 typed-function@0.10.4).
1795- Fixed #601: Issue with unnamed typed-functions by upgrading to
1796 typed-function v0.10.4.
1797- Fixed #636: More strict `toTex` templates, reckon with number of arguments.
1798- Fixed #641: Bug in expression parser parsing implicit multiplication with
1799 wrong precedence in specific cases.
1800- Fixed #645: Added documentation about `engineering` notation of function
1801 `math.format`.
1802
1803
1804## 2016-04-03, version 3.1.4
1805
1806- Using ES6 Math functions like `Math.sinh`, `Math.cbrt`, `Math.sign`, etc when
1807 available.
1808- Fixed #631: unit aliases `weeks`, `months`, and `years` where missing.
1809- Fixed #632: problem with escaped backslashes at the end of strings.
1810- Fixed #635: `Node.toString` options where not passed to function arguments.
1811- Fixed #629: expression parser throws an error when passing a number with
1812 decimal exponent instead of parsing them as implicit multiplication.
1813- Fixed #484, #555: inaccuracy of `math.sinh` for values between -1 and 1.
1814- Fixed #625: Unit `in` (`inch`) not always working due to ambiguity with
1815 the operator `a in b` (alias of `a to b`).
1816
1817
1818## 2016-03-24, version 3.1.3
1819
1820- Fix broken bundle.
1821
1822
1823## 2016-03-24, version 3.1.2
1824
1825- Fix broken npm release.
1826
1827
1828## 2016-03-24, version 3.1.1
1829
1830- Fixed #621: a bug in parsing implicit multiplications like `(2)(3)+4`.
1831- Fixed #623: `nthRoot` of zero with a negative root returned `0` instead of
1832 `Infinity`.
1833- Throw an error when functions `min`, `max`, `mean`, or `median` are invoked
1834 with multiple matrices as arguments (see #598).
1835
1836
1837## 2016-03-19, version 3.1.0
1838
1839- Hide multiplication operator by default when outputting `toTex` and `toString`
1840 for implicit multiplications. Implemented and option to output the operator.
1841- Implemented unit `kip` and alias `kips`. Thanks @hgupta9.
1842- Added support for prefixes for units `mol` and `mole`. Thanks @stu-blair.
1843- Restored support for implicit multiplications like `2(3+4)` and `(2+3)(4+5)`.
1844- Some improvements in the docs.
1845- Added automatic conversions from `boolean` and `null` to `Fraction`,
1846 and conversions from `Fraction` to `Complex`.
1847
1848
1849## 2016-03-04, version 3.0.0
1850
1851### breaking changes
1852
1853- More restricted support for implicit multiplication in the expression
1854 parser: `(...)(...)` is now evaluated as a function invocation,
1855 and `[...][...]` as a matrix subset.
1856- Matrix multiplication no longer squeezes scalar outputs to a scalar value,
1857 but leaves them as they are: a vector or matrix containing a single value.
1858 See #529.
1859- Assignments in the expression parser now return the assigned value rather
1860 than the created or updated object (see #533). Example:
1861
1862 ```
1863 A = eye(3)
1864 A[1,1] = 2 # this assignment now returns 2 instead of A
1865 ```
1866
1867- Expression parser now supports objects. This involves a refactoring and
1868 extension in expression nodes:
1869 - Implemented new node `ObjectNode`.
1870 - Refactored `AssignmentNode`, `UpdateNode`, and `IndexNode` are refactored
1871 into `AccessorNode`, `AssignmentNode`, and `IndexNode` having a different API.
1872- Upgraded the used BigNumber library `decimal.js` to v5. Replaced the
1873 trigonometric functions of math.js with those provided in decimal.js v5.
1874 This can give slightly different behavior qua round-off errors.
1875- Replaced the internal `Complex.js` class with the `complex.js` library
1876 created by @infusion.
1877- Entries in a matrix (typically numbers, BigNumbers, Units, etc) are now
1878 considered immutable, they are no longer copied when performing operations on
1879 the entries, improving performance.
1880- Implemented nearly equal comparison for relational functions (`equal`,
1881 `larger`, `smaller`, etc.) when using BigNumbers.
1882- Changed the casing of the configuration options `matrix` (`Array` or `Matrix`)
1883 and `number` (`number`, `BigNumber`, `Fraction`) such that they now match
1884 the type returned by `math.typeof`. Wrong casing gives a console warning but
1885 will still work.
1886- Changed the default config value for `epsilon` from `1e-14` to `1e-12`,
1887 see #561.
1888
1889### non-breaking changes
1890
1891- Extended function `pow` to return the real root for cubic roots of negative
1892 numbers. See #525, #482, #567.
1893- Implemented support for JSON objects in the expression parser and the
1894 function `math.format`.
1895- Function `math.fraction` now supports `BigNumber`, and function
1896 `math.bignumber` now supports `Fraction`.
1897- Expression parser now allows function and/or variable assignments inside
1898 accessors and conditionals, like `A[x=2]` or `a > 2 ? b="ok" : b="fail"`.
1899- Command line interface:
1900 - Outputs the variable name of assignments.
1901 - Fixed not rounding BigNumbers to 14 digits like numbers.
1902 - Fixed non-working autocompletion of user defined variables.
1903- Reorganized and extended docs, added docs on classes and more. Thanks @hgupta9.
1904- Added new units `acre`, `hectare`, `torr`, `bar`, `mmHg`, `mmH2O`, `cmH2O`,
1905 and added new aliases `acres`, `hectares`, `sqfeet`, `sqyard`, `sqmile`,
1906 `sqmiles`, `mmhg`, `mmh2o`, `cmh2o`. Thanks @hgupta9.
1907- Fixed a bug in the toString method of an IndexNode.
1908- Fixed angle units `deg`, `rad`, `grad`, `cycle`, `arcsec`, and `arcmin` not
1909 being defined as BigNumbers when configuring to use BigNumbers.
1910
1911
1912## 2016-02-03, version 2.7.0
1913
1914- Added more unit aliases for time: `secs`, `mins`, `hr`, `hrs`. See #551.
1915- Added support for doing operations with mixed `Fractions` and `BigNumbers`.
1916- Fixed #540: `math.intersect()` returning null in some cases. Thanks @void42.
1917- Fixed #546: Cannot import BigNumber, Fraction, Matrix, Array.
1918 Thanks @brettjurgens.
1919
1920
1921## 2016-01-08, version 2.6.0
1922
1923- Implemented (complex) units `VA` and `VAR`.
1924- Implemented time units for weeks, months, years, decades, centuries, and
1925 millennia. Thanks @owenversteeg.
1926- Implemented new notation `engineering` in function `math.format`.
1927 Thanks @johnmarinelli.
1928- Fixed #523: In some circumstances, matrix subset returned a scalar instead
1929 of the correct subset.
1930- Fixed #536: A bug in an internal method used for sparse matrices.
1931
1932
1933## 2015-12-05, version 2.5.0
1934
1935- Implemented support for numeric types `Fraction` and `BigNumber` in units.
1936- Implemented new method `toNumeric` for units.
1937- Implemented new units `arcsec`, `arcsecond`, `arcmin`, `arcminute`.
1938 Thanks @devdevdata222.
1939- Implemented new unit `Herts` (`Hz`). Thanks @SwamWithTurtles.
1940- Fixed #485: Scoping issue with variables both used globally as well as in a
1941 function definition.
1942- Fixed: Function `number` didn't support `Fraction` as input.
1943
1944
1945## 2015-11-14, version 2.4.2
1946
1947- Fixed #502: Issue with `format` in some JavaScript engines.
1948- Fixed #503: Removed trailing commas and the use of keyword `import` as
1949 property, as this gives issues with old JavaScript engines.
1950
1951
1952## 2015-10-29, version 2.4.1
1953
1954- Fixed #480: `nthRoot` not working on Internet Explorer (up to IE11).
1955- Fixed #490: `nthRoot` returning an error for negative values like
1956 `nthRoot(-2, 3)`.
1957- Fixed #489: an issue with initializing a sparse matrix without data.
1958 Thanks @Retsam.
1959- Fixed: #493: function `combinations` did not throw an exception for
1960 non-integer values of `k`.
1961- Fixed: function `import` did not override typed functions when the option
1962 override was set true.
1963- Fixed: added functions `math.sparse` and `math.index` to the reference docs,
1964 they where missing.
1965- Fixed: removed memoization from `gamma` and `factorial` functions, this
1966 could blow up memory.
1967
1968
1969## 2015-10-09, version 2.4.0
1970
1971- Added support in the expression parser for mathematical alphanumeric symbols
1972 in the expression parser: unicode range \u{1D400} to \u{1D7FF} excluding
1973 invalid code points.
1974- Extended function `distance` with more signatures. Thanks @kv-kunalvyas.
1975- Fixed a bug in functions `sin` and `cos`, which gave wrong results for
1976 BigNumber integer values around multiples of tau (i.e. `sin(bignumber(7))`).
1977- Fixed value of unit `stone`. Thanks @Esvandiary for finding the error.
1978
1979
1980## 2015-09-19, version 2.3.0
1981
1982- Implemented function `distance`. Thanks @devanp92.
1983- Implemented support for Fractions in function `lcm`. Thanks @infusion.
1984- Implemented function `cbrt` for numbers, complex numbers, BigNumbers, Units.
1985- Implemented function `hypot`.
1986- Upgraded to fraction.js v3.0.0.
1987- Fixed #450: issue with non sorted index in sparse matrices.
1988- Fixed #463, #322: inconsistent handling of implicit multiplication.
1989- Fixed #444: factorial of infinity not returning infinity.
1990
1991
1992## 2015-08-30, version 2.2.0
1993
1994- Units with powers (like `m^2` and `s^-1`) now output with the best prefix.
1995- Implemented support for units to `abs`, `cube`, `sign`, `sqrt`, `square`.
1996 Thanks @ericman314.
1997- Implemented function `catalan` (Combinatorics). Thanks @devanp92.
1998- Improved the `canDefineProperty` check to return false in case of IE8, which
1999 has a broken implementation of `defineProperty`. Thanks @golmansax.
2000- Fixed function `to` not working in case of a simplified unit.
2001- Fixed #437: an issue with row swapping in `lup`, also affecting `lusolve`.
2002
2003
2004## 2015-08-12, version 2.1.1
2005
2006- Fixed wrong values of the physical constants `speedOfLight`, `molarMassC12`,
2007 and `magneticFluxQuantum`. Thanks @ericman314 for finding two of them.
2008
2009
2010## 2015-08-11, version 2.1.0
2011
2012- Implemented derived units (like `110 km/h in m/s`). Thanks @ericman314.
2013- Implemented support for electric units. Thanks @ericman314.
2014- Implemented about 50 physical constants like `speedOfLight`, `gravity`, etc.
2015- Implemented function `kldivergence` (Kullback-Leibler divergence).
2016 Thanks @saromanov.
2017- Implemented function `mode`. Thanks @kv-kunalvyas.
2018- Added support for unicode characters in the expression parser: greek letters
2019 and latin letters with accents. See #265.
2020- Internal functions `Unit.parse` and `Complex.parse` now throw an Error
2021 instead of returning null when passing invalid input.
2022
2023
2024## 2015-07-29, version 2.0.1
2025
2026- Fixed operations with mixed fractions and numbers be converted to numbers
2027 instead of fractions.
2028
2029
2030## 2015-07-28, version 2.0.0
2031
2032- Large internal refactoring:
2033 - performance improvements.
2034 - allows to create custom bundles
2035 - functions are composed using `typed-function` and are extensible
2036- Implemented support for fractions, powered by the library `fraction.js`.
2037- Implemented matrix LU decomposition with partial pivoting and a LU based
2038 linear equations solver (functions `lup` and `lusolve`). Thanks @rjbaucells.
2039- Implemented a new configuration option `predictable`, which can be set to
2040 true in order to ensure predictable function output types.
2041- Implemented function `intersect`. Thanks @kv-kunalvyas.
2042- Implemented support for adding `toTex` properties to custom functions.
2043 Thanks @FSMaxB.
2044- Implemented support for complex values to `nthRoot`. Thanks @gangachris.
2045- Implemented util functions `isInteger`, `isNegative`, `isNumeric`,
2046 `isPositive`, and `isZero`.
2047
2048### breaking changes
2049
2050- String input is now converted to numbers by default for all functions.
2051- Adding two strings will no longer concatenate them, but will convert the
2052 strings to numbers and add them.
2053- Function `index` does no longer accept an array `[start, end, step]`, but
2054 instead accepts an array with arbitrary index values. It also accepts
2055 a `Range` object as input.
2056- Function `typeof` no longer returns lower case names, but now returns lower
2057 case names for primitives (like `number`, `boolean`, `string`), and
2058 upper-camel-case for non-primitives (like `Array`, `Complex`, `Function`).
2059- Function `import` no longer supports a module name as argument. Instead,
2060 modules can be loaded using require: `math.import(require('module-name'))`.
2061- Function `import` has a new option `silent` to ignore errors, and throws
2062 errors on duplicates by default.
2063- Method `Node.compile()` no longer needs `math` to be passed as argument.
2064- Reintroduced method `Node.eval([scope])`.
2065- Function `sum` now returns zero when input is an empty array. Thanks @FSMAxB.
2066- The size of Arrays is no longer validated. Matrices will validate this on
2067 creation.
2068
2069
2070## 2015-07-12, version 1.7.1
2071
2072- Fixed #397: Inaccuracies in nthRoot for very large values, and wrong results
2073 for very small values. (backported from v2)
2074- Fixed #405: Parser throws error when defining a function in a multiline
2075 expression.
2076
2077
2078## 2015-05-31, version 1.7.0
2079
2080- Implemented function `quantileSeq` and `partitionSelect`. Thanks @BigFav.
2081- Implemented functions `stirlingS2`, `bellNumbers`, `composition`, and
2082 `multinomial`. Thanks @devanp92.
2083- Improved the performance of `median` (see #373). Thanks @BigFav.
2084- Extended the command line interface with a `mode` option to output either
2085 the expressions result, string representation, or tex representation.
2086 Thanks @FSMaxB.
2087- Fixed #309: Function median mutating the input matrix. Thanks @FSMaxB.
2088- Fixed `Node.transform` not recursing over replaced parts of the
2089 node tree (see #349).
2090- Fixed #381: issue in docs of `randomInt`.
2091
2092
2093## 2015-04-22, version 1.6.0
2094
2095- Improvements in `toTex`. Thanks @FSMaxB.
2096- Fixed #328: `abs(0 + 0i)` evaluated to `NaN`.
2097- Fixed not being able to override lazy loaded constants.
2098
2099
2100## 2015-04-09, version 1.5.2
2101
2102- Fixed #313: parsed functions did not handle recursive calls correctly.
2103- Fixed #251: binary prefix and SI prefix incorrectly used for byte. Now
2104 following SI standards (`1 KiB == 1024 B`, `1 kB == 1000 B`).
2105- Performance improvements in parsed functions.
2106
2107
2108## 2015-04-08, version 1.5.1
2109
2110- Fixed #316: a bug in rounding values when formatting.
2111- Fixed #317, #319: a bug in formatting negative values.
2112
2113
2114## 2015-03-28, version 1.5.0
2115
2116- Added unit `stone` (6.35 kg).
2117- Implemented support for sparse matrices. Thanks @rjbaucells.
2118- Implemented BigNumber support for function `atan2`. Thanks @BigFav.
2119- Implemented support for custom LaTeX representations. Thanks @FSMaxB.
2120- Improvements and bug fixes in outputting parentheses in `Node.toString` and
2121 `Node.toTex` functions. Thanks @FSMaxB.
2122- Fixed #291: function `format` sometimes returning exponential notation when
2123 it should return a fixed notation.
2124
2125
2126## 2015-02-28, version 1.4.0
2127
2128- Implemented trigonometric functions:
2129 `acosh`, `acoth`, `acsch`, `asech`, `asinh`, `atanh`, `acot`, `acsc`, `asec`.
2130 Thanks @BigFav.
2131- Added BigNumber support for functions: `cot`, `csc`, `sec`, `coth`,
2132 `csch`, `sech`. Thanks @BigFav.
2133- Implemented support for serialization and deserialization of math.js data
2134 types.
2135- Fixed the calculation of `norm()` and `abs()` for large complex numbers.
2136 Thanks @rjbaucells.
2137- Fixed #281: improved formatting complex numbers. Round the real or imaginary
2138 part to zero when the difference is larger than the configured precision.
2139
2140
2141## 2015-02-09, version 1.3.0
2142
2143- Implemented BigNumber implementations of most trigonometric functions: `sin`,
2144 `cos`, `tan`, `asin`, `acos`, `atan`, `cosh`, `sinh`, `tanh`. Thanks @BigFav.
2145- Implemented function `trace`. Thanks @pcorey.
2146- Faster loading of BigNumber configuration with a high precision by lazy
2147 loading constants like `pi` and `e`.
2148- Fixed constants `NaN` and `Infinity` not being BigNumber objects when
2149 BigNumbers are configured.
2150- Fixed missing parentheses in the `toTex` representation of function
2151 `permutations`.
2152- Some minor fixes in the docs. Thanks @KenanY.
2153
2154
2155## 2014-12-25, version 1.2.0
2156
2157- Support for bitwise operations `bitAnd`, `bitNot`, `bitOr`, `bitXor`,
2158 `leftShift`, `rightArithShift`, and `rightLogShift`. Thanks @BigFav.
2159- Support for boolean operations `and`, `not`, `or`, `xor`. Thanks @BigFav.
2160- Support for `gamma` function. Thanks @BigFav.
2161- Converting a unit without value will now result in a unit *with* value,
2162 i.e. `inch in cm` will return `2.54 cm` instead of `cm`.
2163- Improved accuracy of `sinh` and complex `cos` and `sin`. Thanks @pavpanchekha.
2164- Renamed function `select` to `chain`. The old function `select` will remain
2165 functional until math.js v2.0.
2166- Upgraded to decimal.js v4.0.1 (BigNumber library).
2167
2168
2169## 2014-11-22, version 1.1.1
2170
2171- Fixed Unit divided by Number returning zero.
2172- Fixed BigNumber downgrading to Number for a negative base in `pow`.
2173- Fixed some typos in error messaging (thanks @andy0130tw) and docs.
2174
2175
2176## 2014-11-15, version 1.1.0
2177
2178- Implemented functions `dot` (dot product), `cross` (cross product), and
2179 `nthRoot`.
2180- Officially opened up the API of expression trees:
2181 - Documented the API.
2182 - Implemented recursive functions `clone`, `map`, `forEach`, `traverse`,
2183 `transform`, and `filter` for expression trees.
2184 - Parameter `index` in the callbacks of `map` and `forEach` are now cloned
2185 for every callback.
2186 - Some internal refactoring inside nodes to make the API consistent:
2187 - Renamed `params` to `args` and vice versa to make things consistent.
2188 - Renamed `Block.nodes` to `Block.blocks`.
2189 - `FunctionNode` now has a `name: string` instead of a `symbol: SymbolNode`.
2190 - Changed constructor of `RangeNode` to
2191 `new RangeNode(start: Node, end: Node [, step: Node])`.
2192 - Nodes for a `BlockNode` must now be passed via the constructor instead
2193 of via a function `add`.
2194- Fixed `2e` giving a syntax error instead of being parsed as `2 * e`.
2195
2196
2197## 2014-09-12, version 1.0.1
2198
2199- Disabled array notation for ranges in a matrix index in the expression parser
2200 (it is confusing and redundant there).
2201- Fixed a regression in the build of function subset not being able to return
2202 a scalar.
2203- Fixed some missing docs and broken links in the docs.
2204
2205
2206## 2014-09-04, version 1.0.0
2207
2208- Implemented a function `filter(x, test)`.
2209- Removed `math.distribution` for now, needs some rethinking.
2210- `math.number` can convert units to numbers (requires a second argument)
2211- Fixed some precedence issues with the range and conversion operators.
2212- Fixed an zero-based issue when getting a matrix subset using an index
2213 containing a matrix.
2214
2215
2216## 2014-08-21, version 0.27.0
2217
2218- Implemented functions `sort(x [, compare])` and `flatten(x)`.
2219- Implemented support for `null` in all functions.
2220- Implemented support for "rawArgs" functions in the expression parser. Raw
2221 functions are invoked with unevaluated parameters (nodes).
2222- Expressions in the expression parser can now be spread over multiple lines,
2223 like '2 +\n3'.
2224- Changed default value of the option `wrap` of function `math.import` to false.
2225- Changed the default value for new entries in a resized matrix when to zero.
2226 To leave new entries uninitialized, use the new constant `math.uninitialized`
2227 as default value.
2228- Renamed transform property from `__transform__` to `transform`, and documented
2229 the transform feature.
2230- Fixed a bug in `math.import` not applying options when passing a module name.
2231- A returned matrix subset is now only squeezed when the `index` consists of
2232 scalar values, and no longer for ranges resolving into a single value.
2233
2234
2235## 2014-08-03, version 0.26.0
2236
2237- A new instance of math.js can no longer be created like `math([options])`,
2238 to prevent side effects from math being a function instead of an object.
2239 Instead, use the function `math.create([options])` to create a new instance.
2240- Implemented `BigNumber` support for all constants: `pi`, `tau`, `e`, `phi`,
2241 `E`, `LN2`, `LN10`, `LOG2E`, `LOG10E`, `PI`, `SQRT1_2`, and `SQRT2`.
2242- Implemented `BigNumber` support for functions `gcd`, `xgcd`, and `lcm`.
2243- Fixed function `gxcd` returning an Array when math.js was configured
2244 as `{matrix: 'matrix'}`.
2245- Multi-line expressions now return a `ResultSet` instead of an `Array`.
2246- Implemented transforms (used right now to transform one-based indices to
2247 zero-based for expressions).
2248- When used inside the expression parser, functions `concat`, `min`, `max`,
2249 and `mean` expect an one-based dimension number.
2250- Functions `map` and `forEach` invoke the callback with one-based indices
2251 when used from within the expression parser.
2252- When adding or removing dimensions when resizing a matrix, the dimensions
2253 are added/removed from the inner side (right) instead of outer side (left).
2254- Improved index out of range errors.
2255- Fixed function `concat` not accepting a `BigNumber` for parameter `dim`.
2256- Function `squeeze` now squeezes both inner and outer singleton dimensions.
2257- Output of getting a matrix subset is not automatically squeezed anymore
2258 except for scalar output.
2259- Renamed `FunctionNode` to `FunctionAssignmentNode`, and renamed `ParamsNode`
2260 to `FunctionNode` for more clarity.
2261- Fixed broken auto completion in CLI.
2262- Some minor fixes.
2263
2264
2265## 2014-07-01, version 0.25.0
2266
2267- The library now immediately returns a default instance of mathjs, there is
2268 no need to instantiate math.js in a separate step unless one ones to set
2269 configuration options:
2270
2271 // instead of:
2272 var mathjs = require('mathjs'), // load math.js
2273 math = mathjs(); // create an instance
2274
2275 // just do:
2276 var math = require('mathjs');
2277- Implemented support for implicit multiplication, like `math.eval('2a', {a:3})`
2278 and `math.eval('(2+3)(1-3)')`. This changes behavior of matrix indexes as
2279 well: an expression like `[...][...]` is not evaluated as taking a subset of
2280 the first matrix, but as an implicit multiplication of two matrices.
2281- Removed utility function `ifElse`. This function is redundant now the
2282 expression parser has a conditional operator `a ? b : c`.
2283- Fixed a bug with multiplying a number with a temperature,
2284 like `math.eval('10 * celsius')`.
2285- Fixed a bug with symbols having value `undefined` not being evaluated.
2286
2287
2288## 2014-06-20, version 0.24.1
2289
2290- Something went wrong with publishing on npm.
2291
2292
2293## 2014-06-20, version 0.24.0
2294
2295- Added constant `null`.
2296- Functions `equal` and `unequal` support `null` and `undefined` now.
2297- Function `typeof` now recognizes regular expressions as well.
2298- Objects `Complex`, `Unit`, and `Help` now return their string representation
2299 when calling `.valueOf()`.
2300- Changed the default number of significant digits for BigNumbers from 20 to 64.
2301- Changed the behavior of the conditional operator (a ? b : c) to lazy
2302 evaluating.
2303- Fixed imported, wrapped functions not accepting `null` and `undefined` as
2304 function arguments.
2305
2306
2307## 2014-06-10, version 0.23.0
2308
2309- Renamed some functions (everything now has a logical, camel case name):
2310 - Renamed functions `edivide`, `emultiply`, and `epow` to `dotDivide`,
2311 `dotMultiply`, and `dotPow` respectively.
2312 - Renamed functions `smallereq` and `largereq` to `smallerEq` and `largerEq`.
2313 - Renamed function `unary` to `unaryMinus` and added support for strings.
2314- `end` is now a reserved keyword which cannot be used as function or symbol
2315 name in the expression parser, and is not allowed in the scope against which
2316 an expression is evaluated.
2317- Implemented function `unaryPlus` and unary plus operator.
2318- Implemented function `deepEqual` for matrix comparisons.
2319- Added constant `phi`, the golden ratio (`phi = 1.618...`).
2320- Added constant `version`, returning the version number of math.js as string.
2321- Added unit `drop` (`gtt`).
2322- Fixed not being able to load math.js using AMD/require.js.
2323- Changed signature of `math.parse(expr, nodes)` to `math.parse(expr, options)`
2324 where `options: {nodes: Object.<String, Node>}`
2325- Removed matrix support from conditional function `ifElse`.
2326- Removed automatic assignment of expression results to variable `ans`.
2327 This functionality can be restored by pre- or postprocessing every evaluation,
2328 something like:
2329
2330 function evalWithAns (expr, scope) {
2331 var ans = math.eval(expr, scope);
2332 if (scope) {
2333 scope.ans = ans;
2334 }
2335 return ans;
2336 }
2337
2338
2339## 2014-05-22, version 0.22.0
2340
2341- Implemented support to export expressions to LaTeX. Thanks Niels Heisterkamp
2342 (@nheisterkamp).
2343- Output of matrix multiplication is now consistently squeezed.
2344- Added reference documentation in the section /docs/reference.
2345- Fixed a bug in multiplying units without value with a number (like `5 * cm`).
2346- Fixed a bug in multiplying two matrices containing vectors (worked fine for
2347 arrays).
2348- Fixed random functions not accepting Matrix as input, and always returning
2349 a Matrix as output.
2350
2351
2352## 2014-05-13, version 0.21.1
2353
2354- Removed `crypto` library from the bundle.
2355- Deprecated functions `Parser.parse` and `Parser.compile`. Use
2356 `math.parse` and `math.compile` instead.
2357- Fixed function `add` not adding strings and matrices element wise.
2358- Fixed parser not being able to evaluate an exponent followed by a unary minus
2359 like `2^-3`, and a transpose followed by an index like `[3]'[1]`.
2360
2361
2362## 2014-04-24, version 0.21.0
2363
2364- Implemented trigonometric hyperbolic functions `cosh`, `coth`, `csch`,
2365 `sech`, `sinh`, `tanh`. Thanks Rogelio J. Baucells (@rjbaucells).
2366- Added property `type` to all expression nodes in an expression tree.
2367- Fixed functions `log`, `log10`, `pow`, and `sqrt` not supporting complex
2368 results from BigNumber input (like `sqrt(bignumber(-4))`).
2369
2370
2371## 2014-04-16, version 0.20.0
2372
2373- Switched to module `decimal.js` for BigNumber support, instead of
2374 `bignumber.js`.
2375- Implemented support for polar coordinates to the `Complex` datatype.
2376 Thanks Finn Pauls (@finnp).
2377- Implemented BigNumber support for functions `exp`, `log`, and `log10`.
2378- Implemented conditional operator `a ? b : c` in expression parser.
2379- Improved floating point comparison: the functions now check whether values
2380 are nearly equal, against a configured maximum relative difference `epsilon`.
2381 Thanks Rogelio J. Baucells (@rjbaucells).
2382- Implemented function `norm`. Thanks Rogelio J. Baucells (@rjbaucells).
2383- Improved function `ifElse`, is now specified for special data types too.
2384- Improved function `det`. Thanks Bryan Cuccioli (@bcuccioli).
2385- Implemented `BigNumber` support for functions `det` and `diag`.
2386- Added unit alias `lbs` (pound mass).
2387- Changed configuration option `decimals` to `precision` (applies to BigNumbers
2388 only).
2389- Fixed support for element-wise comparisons between a string and a matrix.
2390- Fixed: expression parser now trows IndexErrors with one-based indices instead
2391 of zero-based.
2392- Minor bug fixes.
2393
2394
2395## 2014-03-30, version 0.19.0
2396
2397- Implemented functions `compare`, `sum`, `prod`, `var`, `std`, `median`.
2398- Implemented function `ifElse` Thanks @mtraynham.
2399- Minor bug fixes.
2400
2401
2402## 2014-02-15, version 0.18.1
2403
2404- Added unit `feet`.
2405- Implemented function `compile` (shortcut for parsing and then compiling).
2406- Improved performance of function `pow` for matrices. Thanks @hamadu.
2407- Fixed broken auto completion in the command line interface.
2408- Fixed an error in function `combinations` for large numbers, and
2409 improved performance of both functions `combinations` and `permutations`.
2410
2411
2412## 2014-01-18, version 0.18.0
2413
2414- Changed matrix index notation of expression parser from round brackets to
2415 square brackets, for example `A[1, 1:3]` instead of `A(1, 1:3)`.
2416- Removed need to use the `function` keyword for function assignments in the
2417 expression parser, you can define a function now like `f(x) = x^2`.
2418- Implemented a compilation step in the expression parser: expressions are
2419 compiled into JavaScript, giving much better performance (easily 10x as fast).
2420- Renamed unit conversion function and operator `in` to `to`. Operator `in` is
2421 still available in the expression parser as an alias for `to`. Added unit
2422 `in`, an abbreviation for `inch`. Thanks Elijah Insua (@tmpvar).
2423- Added plurals and aliases for units.
2424- Implemented an argument `includeEnd` for function `range` (false by default).
2425- Ranges in the expression parser now support big numbers.
2426- Implemented functions `permutations` and `combinations`.
2427 Thanks Daniel Levin (@daniel-levin).
2428- Added lower case abbreviation `l` for unit litre.
2429
2430
2431## 2013-12-19, version 0.17.1
2432
2433- Fixed a bug with negative temperatures.
2434- Fixed a bug with prefixes of units squared meter `m2` and cubic meter `m3`.
2435
2436
2437## 2013-12-12, version 0.17.0
2438
2439- Renamed and flattened configuration settings:
2440 - `number.defaultType` is now `number`.
2441 - `number.precision` is now `decimals`.
2442 - `matrix.defaultType` is now `matrix`.
2443- Function `multiply` now consistently outputs a complex number on complex input.
2444- Fixed `mod` and `in` not working as function (only as operator).
2445- Fixed support for old browsers (IE8 and older), compatible when using es5-shim.
2446- Fixed support for Java's ScriptEngine.
2447
2448
2449## 2013-11-28, version 0.16.0
2450
2451- Implemented BigNumber support for arbitrary precision calculations.
2452 Added settings `number.defaultType` and `number.precision` to configure
2453 big numbers.
2454- Documentation is extended.
2455- Removed utility functions `isScalar`, `toScalar`, `isVector`, `toVector`
2456 from `Matrix` and `Range`. Use `math.squeeze` and `math.size` instead.
2457- Implemented functions `get` and `set` on `Matrix`, for easier and faster
2458 retrieval/replacement of elements in a matrix.
2459- Implemented function `resize`, handling matrices, scalars, and strings.
2460- Functions `ones` and `zeros` now return an empty matrix instead of a
2461 number 1 or 0 when no arguments are provided.
2462- Implemented functions `min` and `max` for `Range` and `Index`.
2463- Resizing matrices now leaves new elements undefined by default instead of
2464 filling them with zeros. Function `resize` now has an extra optional
2465 parameter `defaultValue`.
2466- Range operator `:` in expression parser has been given a higher precedence.
2467- Functions don't allow arguments of unknown type anymore.
2468- Options be set when constructing a math.js instance or using the new function
2469 `config(options`. Options are no longer accessible via `math.options`.
2470- Renamed `scientific` notation to `exponential` in function `format`.
2471- Function `format` outputs exponential notation with positive exponents now
2472 always with `+` sign, so outputs `2.1e+3` instead of `2.1e3`.
2473- Fixed function `squeeze` not being able squeeze into a scalar.
2474- Some fixes and performance improvements in the `resize` and `subset`
2475 functions.
2476- Function `size` now adheres to the option `matrix.defaultType` for scalar
2477 input.
2478- Minor bug fixes.
2479
2480
2481## 2013-10-26, version 0.15.0
2482
2483- Math.js must be instantiated now, static calls are no longer supported. Usage:
2484 - node.js: `var math = require('mathjs')();`
2485 - browser: `var math = mathjs();`
2486- Implemented support for multiplying vectors with matrices.
2487- Improved number formatting:
2488 - Function `format` now support various options: precision, different
2489 notations (`fixed`, `scientific`, `auto`), and more.
2490 - Numbers are no longer rounded to 5 digits by default when formatted.
2491 - Implemented a function `format` for `Matrix`, `Complex`, `Unit`, `Range`,
2492 and `Selector` to format using options.
2493 - Function `format` does only stringify values now, and has a new parameter
2494 `precision` to round to a specific number of digits.
2495 - Removed option `math.options.precision`,
2496 use `math.format(value [, precision])` instead.
2497 - Fixed formatting numbers as scientific notation in some cases returning
2498 a zero digit left from the decimal point. (like "0.33333e8" rather than
2499 "3.3333e7"). Thanks @husayt.
2500- Implemented a function `print` to interpolate values in a template string,
2501 this functionality was moved from the function `format`.
2502- Implemented statistics function `mean`. Thanks Guillermo Indalecio Fernandez
2503 (@guillermobox).
2504- Extended and changed `max` and `min` for multi dimensional matrices: they now
2505 return the maximum and minimum of the flattened array. An optional second
2506 argument `dim` allows to calculate the `max` or `min` for specified dimension.
2507- Renamed option `math.options.matrix.default` to
2508 `math.options.matrix.defaultType`.
2509- Removed support for comparing complex numbers in functions `smaller`,
2510 `smallereq`, `larger`, `largereq`. Complex numbers cannot be ordered.
2511
2512
2513## 2013-10-08, version 0.14.0
2514
2515- Introduced an option `math.options.matrix.default` which can have values
2516 `matrix` (default) or `array`. This option is used by the functions `eye`,
2517 `ones`, `range`, and `zeros`, to determine the type of matrix output.
2518- Getting a subset of a matrix will automatically squeeze the resulting subset,
2519 setting a subset of a matrix will automatically unsqueeze the given subset.
2520- Removed concatenation of nested arrays in the expression parser.
2521 You can now input nested arrays like in JavaScript. Matrices can be
2522 concatenated using the function `concat`.
2523- The matrix syntax `[...]` in the expression parser now creates 1 dimensional
2524 matrices by default. `math.eval('[1,2,3,4]')` returns a matrix with
2525 size `[4]`, `math.eval('[1,2;3,4]')` returns a matrix with size `[2,2]`.
2526- Documentation is restructured and extended.
2527- Fixed non working operator `mod` (modulus operator).
2528
2529
2530## 2013-09-03, version 0.13.0
2531
2532- Implemented support for booleans in all relevant functions.
2533- Implemented functions `map` and `forEach`. Thanks Sebastien Piquemal (@sebpic).
2534- All construction functions can be used to convert the type of variables,
2535 also element-wise for all elements in an Array or Matrix.
2536- Changed matrix indexes of the expression parser to one-based with the
2537 upper-bound included, similar to most math applications. Note that on a
2538 JavaScript level, math.js uses zero-based indexes with excluded upper-bound.
2539- Removed support for scalars in the function `subset`, it now only supports
2540 Array, Matrix, and String.
2541- Removed the functions `get` and `set` from a selector, they are a duplicate
2542 of the function `subset`.
2543- Replaced functions `get` and `set` of `Matrix` with a single function
2544 `subset`.
2545- Some moving around with code and namespaces:
2546 - Renamed namespace `math.expr` to `math.expression` (contains Scope, Parser,
2547 node objects).
2548 - Renamed namespace `math.docs` to `math.expression.docs`.
2549 - Moved `math.expr.Selector` to `math.chaining.Selector`.
2550- Fixed some edge cases in functions `lcm` and `xgcd`.
2551
2552
2553## 2013-08-22, version 0.12.1
2554
2555- Fixed outdated version of README.md.
2556- Fixed a broken unit test.
2557
2558
2559## 2013-08-22, version 0.12.0
2560
2561- Implemented functions `random([min, max])`, `randomInt([min, max])`,
2562 `pickRandom(array)`. Thanks Sebastien Piquemal (@sebpic).
2563- Implemented function `distribution(name)`, generating a distribution object
2564 with functions `random`, `randomInt`, `pickRandom` for different
2565 distributions. Currently supporting `uniform` and `normal`.
2566- Changed the behavior of `range` to exclude the upper bound, so `range(1, 4)`
2567 now returns `[1, 2, 3]` instead of `[1, 2, 3, 4]`.
2568- Changed the syntax of `range`, which is now `range(start, end [, step])`
2569 instead of `range(start, [step, ] end)`.
2570- Changed the behavior of `ones` and `zeros` to geometric dimensions, for
2571 example `ones(3)` returns a vector with length 3, filled with ones, and
2572 `ones(3,3)` returns a 2D array with size [3, 3].
2573- Changed the return type of `ones` and `zeros`: they now return an Array when
2574 arguments are Numbers or an Array, and returns a Matrix when the argument
2575 is a Matrix.
2576- Change matrix index notation in parser from round brackets to square brackets,
2577 for example `A[0, 0:3]`.
2578- Removed the feature introduced in v0.10.0 to automatically convert a complex
2579 value with an imaginary part equal to zero to a number.
2580- Fixed zeros being formatted as null. Thanks @TimKraft.
2581
2582
2583## 2013-07-23, version 0.11.1
2584
2585- Fixed missing development dependency
2586
2587
2588## 2013-07-23, version 0.11.0
2589
2590- Changed math.js from one-based to zero-based indexes.
2591 - Getting and setting matrix subset is now zero-based.
2592 - The dimension argument in function `concat` is now zero-based.
2593- Improvements in the string output of function help.
2594- Added constants `true` and `false`.
2595- Added constructor function `boolean`.
2596- Fixed function `select` not accepting `0` as input.
2597 Thanks Elijah Manor (@elijahmanor).
2598- Parser now supports multiple unary minus operators after each other.
2599- Fixed not accepting empty matrices like `[[], []]`.
2600- Some fixes in the end user documentation.
2601
2602
2603## 2013-07-08, version 0.10.0
2604
2605- For complex calculations, all functions now automatically replace results
2606 having an imaginary part of zero with a Number. (`2i * 2i` now returns a
2607 Number `-4` instead of a Complex `-4 + 0i`).
2608- Implemented support for injecting custom node handlers in the parser. Can be
2609 used for example to implement a node handler for plotting a graph.
2610- Implemented end user documentation and a new `help` function.
2611- Functions `size` and `squeeze` now return a Matrix instead of an Array as
2612 output on Matrix input.
2613- Added a constant tau (2 * pi). Thanks Zak Zibrat (@palimpsests).
2614- Renamed function `unaryminus` to `unary`.
2615- Fixed a bug in determining node dependencies in function assignments.
2616
2617
2618## 2013-06-14, version 0.9.1
2619
2620- Implemented element-wise functions and operators: `emultiply` (`x .* y`),
2621 `edivide` (`x ./ y`), `epow` (`x .^ y`).
2622- Added constants `Infinity` and `NaN`.
2623- Removed support for Workspace to keep the library focused on its core task.
2624- Fixed a bug in the Complex constructor, not accepting NaN values.
2625- Fixed division by zero in case of pure complex values.
2626- Fixed a bug in function multiply multiplying a pure complex value with
2627 Infinity.
2628
2629
2630## 2013-05-29, version 0.9.0
2631
2632- Implemented function `math.parse(expr [,scope])`. Optional parameter scope can
2633 be a plain JavaScript Object containing variables.
2634- Extended function `math.expr(expr [, scope])` with an additional parameter
2635 `scope`, similar to `parse`. Example: `math.eval('x^a', {x:3, a:2});`.
2636- Implemented function `subset`, to get or set a subset from a matrix, string,
2637 or other data types.
2638- Implemented construction functions number and string (mainly useful inside
2639 the parser).
2640- Improved function `det`. Thanks Bryan Cuccioli (@bcuccioli).
2641- Moved the parse code from prototype math.expr.Parser to function math.parse,
2642 simplified Parser a little bit.
2643- Strongly simplified the code of Scope and Workspace.
2644- Fixed function mod for negative numerators, and added error messages in case
2645 of wrong input.
2646
2647
2648## 2013-05-18, version 0.8.2
2649
2650- Extended the import function and some other minor improvements.
2651- Fixed a bug in merging one dimensional vectors into a matrix.
2652- Fixed a bug in function subtract, when subtracting a complex number from a
2653 real number.
2654
2655
2656## 2013-05-10, version 0.8.1
2657
2658- Fixed an npm warning when installing mathjs globally.
2659
2660
2661## 2013-05-10, version 0.8.0
2662
2663- Implemented a command line interface. When math.js is installed globally via
2664 npm, the application is available on your system as 'mathjs'.
2665- Implemented `end` keyword for index operator, and added support for implicit
2666 start and end (expressions like `a(2,:)` and `b(2:end,3:end-1)` are supported
2667 now).
2668- Function math.eval is more flexible now: it supports variables and multi-line
2669 expressions.
2670- Removed the read-only option from Parser and Scope.
2671- Fixed non-working unequal operator != in the parser.
2672- Fixed a bug in resizing matrices when replacing a subset.
2673- Fixed a bug in updating a subset of a non-existing variable.
2674- Minor bug fixes.
2675
2676
2677## 2013-05-04, version 0.7.2
2678
2679- Fixed method unequal, which was checking for equality instead of inequality.
2680 Thanks @FJS2.
2681
2682
2683## 2013-04-27, version 0.7.1
2684
2685- Improvements in the parser:
2686 - Added support for chained arguments.
2687 - Added support for chained variable assignments.
2688 - Added a function remove(name) to remove a variable from the parsers scope.
2689 - Renamed nodes for more consistency and to resolve naming conflicts.
2690 - Improved stringification of an expression tree.
2691 - Some simplifications in the code.
2692 - Minor bug fixes.
2693- Fixed a bug in the parser, returning NaN instead of throwing an error for a
2694 number with multiple decimal separators like `2.3.4`.
2695- Fixed a bug in Workspace.insertAfter.
2696- Fixed: math.js now works on IE 6-8 too.
2697
2698
2699## 2013-04-20, version 0.7.0
2700
2701- Implemented method `math.eval`, which uses a readonly parser to evaluate
2702 expressions.
2703- Implemented method `xgcd` (extended eucledian algorithm). Thanks Bart Kiers
2704 (@bkiers).
2705- Improved math.format, which now rounds values to a maximum number of digits
2706 instead of decimals (default is 5 digits, for example `math.format(math.pi)`
2707 returns `3.1416`).
2708- Added examples.
2709- Changed methods square and cube to evaluate matrices element wise (consistent
2710 with all other methods).
2711- Changed second parameter of method import to an object with options.
2712- Fixed method math.typeof on IE.
2713- Minor bug fixes and improvements.
2714
2715
2716## 2013-04-13, version 0.6.0
2717
2718- Implemented chained operations via method math.select(). For example
2719 `math.select(3).add(4).subtract(2).done()` will return `5`.
2720- Implemented methods gcd and lcm.
2721- Implemented method `Unit.in(unit)`, which creates a clone of the unit with a
2722 fixed representation. For example `math.unit('5.08 cm').in('inch')` will
2723 return a unit which string representation always is in inch, thus `2 inch`.
2724 `Unit.in(unit)` is the same as method `math.in(x, unit)`.
2725- Implemented `Unit.toNumber(unit)`, which returns the value of the unit when
2726 represented with given unit. For example
2727 `math.unit('5.08 cm').toNumber('inch')` returns the number `2`, as the
2728 representation of the unit in inches has 2 as value.
2729- Improved: method `math.in(x, unit)` now supports a string as second parameter,
2730 for example `math.in(math.unit('5.08 cm'), 'inch')`.
2731- Split the end user documentation of the parser functions from the source
2732 files.
2733- Removed function help and the built-in documentation from the core library.
2734- Fixed constant i being defined as -1i instead of 1i.
2735- Minor bug fixes.
2736
2737
2738## 2013-04-06, version 0.5.0
2739
2740- Implemented data types Matrix and Range.
2741- Implemented matrix methods clone, concat, det, diag, eye, inv, ones, size,
2742 squeeze, transpose, zeros.
2743- Implemented range operator `:`, and transpose operator `'` in parser.
2744- Changed: created construction methods for easy object creation for all data
2745 types and for the parser. For example, a complex value is now created
2746 with `math.complex(2, 3)` instead of `new math.Complex(2, 3)`, and a parser
2747 is now created with `math.parser()` instead of `new math.parser.Parser()`.
2748- Changed: moved all data types under the namespace math.type, and moved the
2749 Parser, Workspace, etc. under the namespace math.expr.
2750- Changed: changed operator precedence of the power operator:
2751 - it is now right associative instead of left associative like most scripting
2752 languages. So `2^3^4` is now calculated as `2^(3^4)`.
2753 - it has now higher precedence than unary minus most languages, thus `-3^2` is
2754 now calculated as `-(3^2)`.
2755- Changed: renamed the parsers method 'put' into 'set'.
2756- Fixed: method 'in' did not check for units to have the same base.
2757
2758
2759## 2013-03-16, version 0.4.0
2760
2761- Implemented Array support for all methods.
2762- Implemented Array support in the Parser.
2763- Implemented method format.
2764- Implemented parser for units, math.Unit.parse(str).
2765- Improved parser for complex values math.Complex.parse(str);
2766- Improved method help: it now evaluates the examples.
2767- Fixed: a scoping issue with the Parser when defining functions.
2768- Fixed: method 'typeof' was not working well with minified and mangled code.
2769- Fixed: errors in determining the best prefix for a unit.
2770
2771
2772## 2013-03-09, version 0.3.0
2773
2774- Implemented Workspace
2775- Implemented methods cot, csc, sec.
2776- Implemented Array support for methods with one parameter.
2777
2778
2779## 2013-02-25, version 0.2.0
2780
2781- Parser, Scope, and expression tree with Nodes implemented.
2782- Implemented method import which makes it easy to extend math.js.
2783- Implemented methods arg, conj, cube, equal, factorial, im, largereq,
2784 log(x, base), log10, mod, re, sign, smallereq, square, unequal.
2785
2786
2787## 2013-02-18, version 0.1.0
2788
2789- Reached full compatibility with Javascripts built-in Math library.
2790- More functions implemented.
2791- Some bugfixes.
2792
2793
2794## 2013-02-16, version 0.0.2
2795
2796- All constants of Math implemented, plus the imaginary unit i.
2797- Data types Complex and Unit implemented.
2798- First set of functions implemented.
2799
2800
2801## 2013-02-15, version 0.0.1
2802
2803- First publish of the mathjs package. (package is still empty)
2804
\No newline at end of file