UNPKG

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