UNPKG

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