UNPKG

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