mathjs
Version:
Math.js is an extensive math library for JavaScript and Node.js. It features a flexible expression parser with support for symbolic computation, comes with a large set of built-in functions and constants, and offers an integrated solution to work with dif
1,456 lines (969 loc) • 93.3 kB
Markdown
# History
# 2021-11-03, version 10.0.0
!!! BE CAREFUL: BREAKING CHANGES IN THE TYPESCRIPT DEFINITIONS !!!
- Improvements to the Typescript typings (commit fc5c202e).
Thanks @joshhansen. First introduced in v9.5.1, but reverted because
it contains breaking changes.
Breaking changes: interface `MathNode` is now renamed to `MathNodeCommon`
and the related interfaces are structured in a different way.
- Fixed a typo in the TypeScript definition of toHTML. Thanks @TheToto.
# 2021-11-03, version 9.5.2`
- Revert the improvements to the Typescript typings because they contain
breaking changes. The improvements will be published in v10.0.0. See #2339.
# 2021-10-13, version 9.5.1
- Various improvements to the Typescript typings.
Thanks @joshhansen and @DianaTdr.
# 2021-09-22, version 9.5.0
- Implemented support for calculations with percentage, see #2303.
Thanks @rvramesh.
- Fix #2319: make the API of `Parser.evaluate` consistent with `math.evaluate`:
support a list with expressions as input.
- Improved documentation of function `setCartesian`. Thanks @fieldfoxWim.
# 2021-09-15, version 9.4.5
- Improved the performance of `Node.equals` by improving the internal
function `deepStrictEqual`. Thanks @tomlarkworthy.
- Fixes in the TypeScript definitions:
- Define `hasNumericValue`. Thanks @write2kcl.
- Define `MathNode.isRelationalNode`. Thanks @m93a.
- Fix typo in `MathNode.isConditionalNode`. Thanks @m93a.
# 2021-07-07, version 9.4.4
- Fixed `ArrayNode.toTex()`: remove the row delimiter on the last row,
see #2267. Thanks @davidtranhq.
- Fix #2269: `intersect` not returning `null` for matrix input. Thanks @m93a.
- Fix #2245: mathjs not working in IE11 anymore due to a missing polyfill for
`Symbol`. The browser bundle now includes the necessary polyfills (it is
larger now because of that, see also #2266). Thanks @m93a.
- Update dependencies (`complex.js@2.0.15`, `decimal.js@10.3.1`)
- Drop official support for node.js 10, which has reached end of life.
See #2258.
# 2021-06-23, version 9.4.3
- Fix #2222: mathjs polluting the `Decimal` prototype. Thanks @m93a.
- Fix #2253: expression parser throwing an error when accessing nested object
properties named `e`.
- Fixes in the TypeScript definitions:
- function `floor`, #2159, #2246. Thanks @write2kcl.
- function `simplify`, see #2252. Thanks @nitroin.
- Upgraded to `decimal.js@10.3.0`
# 2021-06-05, version 9.4.2
- Implemented iterative eigenvalue finder for `eigs`, making it much more
robust. See #2179, #2237. Thanks @m93a.
- Improved TypeScript definitions of function `parse`. Thanks @OpportunityLiu.
# 2021-05-24, version 9.4.1
- Fix #2100: add TypeScript declaration for `eigs`. Thanks @andrebianchessi.
- Fix #2220: add TypeScript files to published npm package. Thanks @dhritzkiv.
- Update readme regarding TypeScript definition files. Thanks @dhritzkiv.
- Update to `fraction.js@4.1.1`
# 2021-05-16, version 9.4.0
- Implemented support to use objects with a `Map` interface as scope,
see #2143, #2166. Thanks @jhugman.
- Extend `eigs` to support general complex matrices, see #1741. Thanks @m93a.
- DenseMatrix and SparseMatrix are now iterable, see #1184. Thanks @m93a.
- Implemented utility functions `matrixFromRows`, `matrixFromColumns`, and
`matrixFromFunction`, see #2155, #2153. Thanks @m93a.
- Added TypeScript definitions to the project, making it redundant to install
`@types/mathjs`, and making it easier to improve the definitions. See #2187,
#2192. Thanks @CatsMiaow.
- Upgraded dependencies
- `complex.js@2.0.13` (fixing #2211). Thanks @infusion
- `fraction.js@4.1.0` (`pow` now supporting rational exponents).
- Fix #2174: function `pickRandom` having no name. Thanks @HK-SHAO.
- Fix #2019: VSCode auto import keeps adding import { null } from 'mathjs'.
- Fix #2185: Fix TypeScript definition of unit division, which can also return
a number.
- Fix #2123: add type definitions for functions `row` and `column`.
- Fix some files not exposed in the package, see #2213. Thanks @javiermarinros.
# 2021-04-12, version 9.3.2
- Fix #2169: mathjs requesting `@babel/runtime` dependency.
Regression introduced in `v9.3.1`.
# 2021-04-10, version 9.3.1
- Fix #2133: strongly improved the performance of `isPrime`, see #2139.
Thanks @Yaffle.
- Fix #2150: give a clear error "Error: Undefined function ..." instead when
evaluating a non-existing function.
- Fix #660: expose internal functions `FunctionNode.onUndefinedFunction(name)`
and `SymbolNode.onUndefinedSymbol(name)`, allowing to override the behavior.
By default, an Error is thrown.
# 2021-03-10, version 9.3.0
- Implemented support for parsing non decimal numbers with radix point,
see #2122, #2121. Thanks @clnhlzmn.
- Fix #2128: typo in docs of `luSolveAll` and `usolveAll`.
# 2021-02-03, version 9.2.0
- Implemented function `count` to count the total elements in a matrix,
see #2085. Thanks @Josef37.
- Fix #2096: cleanup old reference to external dependency `crypto`.
- Some refactoring in the code to remove duplications, see #2093.
Thanks @Josef37.
# 2021-01-27, version 9.1.0
- Extended function `reshape` with support for a wildcard `-1` to automatically
calculate the remaining size, like `reshape([1, 2, 3, 4, 5, 6], [-1, 2])`
which will output `[[0, 1], [2, 3], [4, 5]]`. See #2075. Thanks @Josef37.
- Fix #2087: function `simplify` ignores second argument of `log`, for example
in `simplify('log(e, 9)')` . Thanks @quentintruong.
# 2021-01-16, version 9.0.0
- Improved support for bin, hex, and oct literals. See #1996. Thanks @clnhlzmn.
- **Breaking change**: parse literals with prefixes `0b`, `0c`, and `0x` are
now unsigned by default. To parse them as signed, you have to specify a
suffix specifying the word size such as `i16` or `i32`.
- Function `format` now supports more notations: `bin`, 'hex', and `oct`,
for example `format(255, {notation: "hex"})`.
- The functions `format`, `bin`, `hex`, `oct` now allow specifying a wordSize,
like `bin(10, 32)` and `format(10, {notation: "bin", wordSize: 32})`.
- BigNumber support for the bin, hex, and oct literals.
- Extended and improved the example rocket_trajectory_optimization.html.
Thanks @Josef37.
# 2020-12-30, version 8.1.1
- Improved the performance of parsing and evaluating units a lot, see #2065.
Thanks @flaviut.
- Upgraded dependency `fraction.js` to `v4.0.13`.
- Moved continuous integration testing from Travis CI to Github Workflow,
see #2024, #2041. Thanks @harrysarson.
# 2020-12-04, version 8.1.0
- Implemented units `kilogramforce` (`kgf`). Thanks @rnd-debug.
- Fix #2026: Implement a new option `fractionsLimit` for function `simplify`,
defaulting to `Infinity`.
- Improved the documentation of function `clone`. Thanks @redbar0n.
# 2020-11-09, version 8.0.1
- Fix #1979: missing "subset" dependency when using "mathjs/number" entry point.
- Fix #2022: update pretty printing with MathJax example to the latest version
of MathJax. Thanks @pkra.
# 2020-11-06, version 8.0.0
!!! BE CAREFUL: BREAKING CHANGES !!!
- You can now use mathjs directly in node.js using ES modules without need for
a transpiler (see #1928, #1941, #1962).
Automatically loading either commonjs code or ES modules code is improved.
All generated code is moved under `/lib`: the browser bundle is moved from
`/dist` to `/lib/browser`, ES module files are moved to `/lib/esm`,
and commonjs files are moved to `/lib/cjs`. Thanks @GreenImp.
- Non-minified bundle `dist/math.js` is no longer provided. Either use the
minified bundle, or create a bundle yourself.
- Replaced random library `seed-random` with `seedrandom`, see #1955.
Thanks @poppinlp.
- Breaking changes in `pickRandom`, see #1990, #1976.
- Will no longer return the input matrix when the given number is greater
than the length of the provided possibles. Instead, the function always
returns results with the requested number of picks.
- Will now return a `Matrix` as output when input was a `Matrix`.
- Introduced a new syntax:
```
math.pickRandom(array, { weights, number, elementWise })
```
- Introduced a new option `elementWise`, which is `true` by default.
When setting `elementWise` to false, an array containing arrays will return
random pick of arrays instead of the elements inside of the nested arrays.
# 2020-11-02, version 7.6.0
- Implemented function `rotate(w, theta)`. See #1992, #1160. Thanks @rnd-debug.
- Implemented support for custom characters in Units via `Unit.isValidAlpha`.
See #1663, #2000. Thanks @rnd-debug.
# 2020-10-10, version 7.5.1
- Fix object pollution vulnerability in `math.config`. Thanks Snyk.
# 2020-10-07, version 7.5.0
- Function `pickRandom` now allows randomly picking elements from matrices
with 2 or more dimensions instead of only from a vector, see #1974.
Thanks @KonradLinkowski.
# 2020-10-07, version 7.4.0
- Implemented support for passing a precision in functions `ceil`, `floor`,
and `fix`, similar to `round`, see #1967, #1901. Thanks @rnd-debug.
- Implemented function `rotationMatrix`, see #1160, #1984. Thanks @rnd-debug.
- Implement a clear error message when using `sqrtm` with a matrix having
more than two dimensions. Thanks @KonradLinkowski.
- Update dependency `decimal.js` to `10.2.1`.
# 2020-09-26, version 7.3.0
- Implemented functions `usolveAll` and `lsolveAll`, see #1916. Thanks @m93a.
- Implemented support for units in functions `std` and `variance`, see #1950.
Thanks @rnd-debug.
- Implemented support for binary, octal, and hexadecimal notation in the
expression parser, and implemented functions `bin`, `oct`, and `hex` for
formatting. Thanks @clnhlzmn.
- Fix #1964: inconsistent calculation of negative dividend modulo for
`BigNumber` and `Fraction`. Thanks @ovk.
# 2020-08-24, version 7.2.0
- Implemented new function `diff`, see #1634, #1920. Thanks @Veeloxfire.
- Implemented support for norm 2 for matrices in function `norm`.
Thanks @rnd-debug.
# 2020-07-13, version 7.1.0
- Implement support for recursion (self-referencing) of typed-functions,
new in `typed-function@2.0.0`. This fixes #1885: functions which where
extended with a new data type did not always work. Thanks @nickewing.
- Fix #1899: documentation on expression trees still using old namespace
`math.expression.node.*` instead of `math.*`.
# 2020-06-24, version 7.0.2
- Fix #1882: have `DenseMatrix.resize` and `SparseMatrix.resize` accept
`DenseMatrix` and `SparseMatrix` as inputs too, not only `Array`.
- Fix functions `sum`, `prod`, `min`, and `max` not throwing a conversion error
when passing a single string, like `sum("abc")`.
# 2020-05-30, version 7.0.1
- Fix #1844: clarify the documentation of function `eigs`. Thanks @Lazersmoke.
- Fix #1855: Fix error in the documentation for `math.nthRoots(x)`.
- Fix #1856: make the library robust against Object prototype pollution.
# 2020-05-07, version 7.0.0
Breaking changes:
- Improvements in calculation of the `dot` product of complex values.
The first argument is now conjugated. See #1761. Thanks @m93a.
- Dropped official support for Node.js v8 which has reached end of life.
- Removed all deprecation warnings introduced in v6.
To upgrade smoothly from v5 to v7 or higher, upgrade to v6 first
and resolve all deprecation warnings.
# 2020-05-04, version 6.6.5
- Fix #1834: value `Infinity` cannot be serialized and deserialized.
This is solved now with a new `math.replacer` function used as
`JSON.stringify(value, math.replacer)`.
- Fix #1842: value `Infinity` not turned into the latex symbol `\\infty`.
# 2020-04-15, version 6.6.4
- Fix published files containing Windows line endings (CRLF instead of LF).
# 2020-04-10, version 6.6.3
- Fix #1813: bug in engineering notation for numbers of function `format`,
sometimes resulting in needless trailing zeros.
- Fix #1808: methods `.toNumber()` and `.toNumeric()` not working on a
unitless unit.
- Fix #1645: not being able to use named operators `mod`, `and`, `not`, `or`,
`xor`, `to`, `in` as object keys. Thanks @Veeloxfire.
- Fix `eigs` not using `config.epsilon`.
# 2020-03-29, version 6.6.2
- Fix #1789: Function `eigs` not calculating with BigNumber precision
when input contains BigNumbers.
- Run the build script during npm `prepare`, so you can use the library
directly when installing directly from git. See #1751. Thanks @cinderblock.
# 2020-02-26, version 6.6.1
- Fix #1725: simplify `a/(b/c)`. Thanks @dbramwell.
- Fix examples in documentation of `row` and `column`.
# 2020-02-01, version 6.6.0
- Implemented function `eigs`, see #1705, #542 #1175. Thanks @arkajitmandal.
- Fixed #1727: validate matrix size when creating a `DenseMatrix` using
`fromJSON`.
- Fixed `DenseMatrix.map` copying the size and datatype from the original
matrix instead of checking the returned dimensions and type of the callback.
- Add a caret to dependencies (like) `^1.2.3`) to allow downstream updates
without having to await a new release of mathjs.
# 2020-01-08, version 6.5.0
- Implemented `baseName` option for `createUnit`, see #1707.
Thanks @ericman314.
# 2020-01-06, version 6.4.0
- Extended function `dimension` with support for n-dimensional points.
Thanks @Veeloxfire.
# 2019-12-31, version 6.3.0
- Improved performance of `factorial` for `BigNumber` up to a factor two,
see #1687. Thanks @kmdrGroch.
# 2019-11-20, version 6.2.5
- Fixed `IndexNode` using a hardcoded, one-based implementation of `index`,
making it impossible to instantiate a zero-based version of the expression
parser. See #782.
# 2019-11-20, version 6.2.4
- Fixed #1669: function 'qr' threw an error if the pivot was zero,
thanks @kevinkelleher12 and @harrysarson.
- Resolves #942: remove misleading assert in 'qr'. Thanks @harrysarson.
- Work around a bug in complex.js where `sign(0)` returns complex NaN.
Thanks @harrysarson.
# 2019-10-06, version 6.2.3
- Fixed #1640: function `mean` not working for units. Thanks @clintonc.
- Fixed #1639: function `min` listed twice in the "See also" section of the
embedded docs of function `std`.
- Improved performance of `isPrime`, see #1641. Thanks @arguiot.
# 2019-09-23, version 6.2.2
- Fixed methods `map` and `clone` not copying the `dotNotation` property of
`IndexNode`. Thanks @rianmcguire.
- Fixed a typo in the documentation of `toHTML`. Thanks @maytanthegeek.
- Fixed #1615: error in the docs of `isNumeric`.
- Fixed #1628: Cannot call methods on empty strings or numbers with value `0`.
# 2019-08-31, version 6.2.1
- Fixed #1606: function `format` not working for expressions.
# 2019-08-28, version 6.2.0
- Improved performance of `combinationsWithRep`. Thanks @waseemyusuf.
- Add unit aliases `bit` and `byte`.
- Fix docs referring to `bit` and `byte` instead of `bits` and `bytes`.
- Updated dependency `typed-function@1.1.1`.
# 2019-08-17, version 6.1.0
- Implemented function `combinationsWithRep` (see #1329). Thanks @waseemyusuf.
# 2019-08-05, version 6.0.4
- Fixed #1554, #1565: ES Modules where not transpiled to ES5, giving issues on
old browsers. Thanks @mockdeep for helping to find a solution.
# 2019-07-07, version 6.0.3
- Add `unpkg` and `jsdelivr` fields in package.json pointing to UMD build.
Thanks @tmcw.
- Fix #1550: nested user defined function not receiving variables of an
outer user defined function.
# 2019-06-11, version 6.0.2
- Fix not being able to set configuration after disabling function `import`
(regression since v6.0.0).
# 2019-06-09, version 6.0.1
- Fix function reference not published in npm library.
- Fix function `evaluate` and `parse` missing in generated docs.
# 2019-06-08, version 6.0.0
!!! BE CAREFUL: BREAKING CHANGES !!!
### Most notable changes
1. Full support for **ES modules**. Support for tree-shaking out of the box.
Load all functions:
```js
import * as math from 'mathjs'
```
Use a few functions:
```js
import { add, multiply } from 'mathjs'
```
Load all functions with custom configuration:
```js
import { create, all } from 'mathjs'
const config = { number: 'BigNumber' }
const math = create(all, config)
```
Load a few functions with custom configuration:
```js
import { create, addDependencies, multiplyDependencies } from 'mathjs'
const config = { number: 'BigNumber' }
const { add, multiply } = create({
addDependencies,
multiplyDependencies
}, config)
```
2. Support for **lightweight, number-only** implementations of all functions:
```
import { add, multiply } from 'mathjs/number'
```
3. New **dependency injection** solution used under the hood.
### Breaking changes
- Node 6 is no longer supported.
- Functions `config` and `import` are not available anymore in the global
context:
```js
// v5
import * as mathjs from 'mathjs'
mathjs.config(...) // error in v6.0.0
mathjs.import(...) // error in v6.0.0
```
Instead, create your own mathjs instance and pass config and imports
there:
```js
// v6
import { create, all } from 'mathjs'
const config = { number: 'BigNumber' }
const mathjs = create(all, config)
mathjs.import(...)
```
- Renamed function `typeof` to `typeOf`, `var` to `variance`,
and `eval` to `evaluate`. (the old function names are reserved keywords
which can not be used as a variable name).
- Deprecated the `Matrix.storage` function. Use `math.matrix` instead to create
a matrix.
- Deprecated function `math.expression.parse`, use `math.parse` instead.
Was used before for example to customize supported characters by replacing
`math.parse.isAlpha`.
- Moved all classes like `math.type.Unit` and `math.expression.Parser` to
`math.Unit` and `math.Parser` respectively.
- Fixed #1428: transform iterating over replaced nodes. New behavior
is that it stops iterating when a node is replaced.
- Dropped support for renaming factory functions when importing them.
- Dropped fake BigNumber support of function `erf`.
- Removed all index.js files used to load specific functions instead of all, like:
```
// v5
// ... set up empty instance of mathjs, then load a set of functions:
math.import(require('mathjs/lib/function/arithmetic'))
```
Individual functions are now loaded simply like:
```js
// v6
import { add, multiply } from 'mathjs'
```
To set a specific configuration on the functions:
```js
// v6
import { create, addDependencies, multiplyDependencies } from 'mathjs'
const config = { number: 'BigNumber' }
const math = create({ addDependencies, multiplyDependencies }, config)
```
See example `advanced/custom_loading.js`.
- Updated the values of all physical units to their latest official values.
See #1529. Thanks @ericman314.
### Non breaking changes
- Implemented units `t`, `tonne`, `bel`, `decibel`, `dB`, and prefixes
for `candela`. Thanks @mcvladthegoat.
- Fixed `epsilon` setting being applied globally to Complex numbers.
- Fix `math.simplify('add(2, 3)')` throwing an error.
- Fix #1530: number formatting first applied `lowerExp` and `upperExp`
and after that rounded the value instead of the other way around.
- Fix #1473: remove `'use strict'` in every file, not needed anymore.
# 2019-05-18, version 5.10.3
- Fixed dependency `del` being a dependency instead of devDependency.
# 2019-05-18, version 5.10.2
- Fix #1515, #1516, #1517: broken package due to a naming conflict in
the build folder of a util file `typeOf.js` and `typeof.js`.
Solved by properly cleaning all build folders before building.
# 2019-05-17, version 5.10.1
- Fix #1512: format using notation `engineering` can give wrong results
when the value has less significant digits than the number of digits in
the output.
# 2019-05-08, version 5.10.0
- Fix `lib/header.js` not having filled in date and version. Thanks @kevjin.
- Upgraded dependency `decimal.js@10.2.0`, fixing an issue on node.js 12.
# 2019-04-08, version 5.9.0
- Implemented functions `row` and `column` (see #1413). Thanks @SzechuanSage.
- Fixed #1459: `engineering` notation of function `format` not available
for `BigNumber`.
- Fixed #1465: `node.toHTML()` not correct for unary operators like
`factorial`.
# 2019-03-20, version 5.8.0
- Implemented new function `apply`. Thanks @bnlcas.
- Implemented passing an optional `dimension` argument to `std` and `var`.
Thanks @bnlcas.
# 2019-03-10, version 5.7.0
- Implemented support for `pow()` in `derivative`. Thanks @sam-19.
- Gracefully handle round-off errors in fix, ceil, floor, and range
(Fixes #1429, see also #1434, #1432). Thanks @ericman314.
# 2019-03-02, version 5.6.0
- Upgrade decimal.js to v10.1.1 (#1421).
- Fixed #1418: missing whitespace when stringifying an expression
containing "not".
# 2019-02-20, version 5.5.0
- Fixed #1401: methods `map` and `forEach` of `SparseMatrix` not working
correctly when indexes are unordered.
- Fixed #1404: inconsistent rounding of negative numbers.
- Upgrade tiny-emitter to v2.1.0 (#1397).
# 2019-01-25, version 5.4.2
- Fixed `math.format` not working for BigNumbers with a precision above
1025 digits (see #1385). Thanks @ericman314.
- Fixed incorrect LaTeX output of `RelationalNode`. Thanks @rianmcguire.
- Fixed a bug the methods `map`, `forEach`, `traverse`, and `transform`
of `FunctionNode`.
# 2019-01-10, version 5.4.1
- Fix #1378: negative bignumbers not formatted correctly.
- Upgrade fraction.js to version 4.0.12 (#1369).
# 2018-12-09, version 5.4.0
- Extended sum.js to accept a dimension input to calculate the sum over a
specific axis. Thanks @bnlcas.
- Fix #1328: objects can't be written multi-line. Thanks @GHolk.
- Remove side effects caused by `Unit.format` and `Unit.toString`,
making changes to the unit on execution. Thanks @ericman314.
# 2018-12-03, version 5.3.1
- Fixed #1336: Unit.toSI() returning units with prefix like `mm` instead
of `m`. Thanks @ericman314.
# 2018-11-29, version 5.3.0
- Implemented function `hasNumericValue`. Thanks @Sathish-kumar-Subramani.
- Fix #1326: non-ascii character in print.js.
- Fix #1337: `math.format` not working correctly with `{ precision: 0 }`.
Thanks @dkenul.
# 2018-10-30, version 5.2.3
- Fixed #1293: non-unicode characters in `escape-latex` giving issues in some
specific cases. Thanks @dangmai.
- Fixed incorrect LaTeX output of function `bitNot`, see #1299. Thanks @FSMaxB.
- Fixed #1304: function `pow` not supporting inputs `pow(Unit, BigNumber)`.
- Upgraded dependencies (`escape-latex@1.2.0`)
# 2018-10-23, version 5.2.2
- Fixed #1286: Fixed unit base recognition and formatting for
user-defined units. Thanks @ericman314.
# 2018-10-18, version 5.2.1
- Fixed unit `rod` being defined as `5.02921` instead of `5.0292`.
Thanks @ericman314.
- Upgraded dependencies (`fraction.js@4.0.10`)
- Upgraded devDependencies (`@babel/core@7.1.2`, `nyc@13.1.0`,
`webpack@4.21.0`).
# 2018-10-05, version 5.2.0
- Implemented support for chained conditionals like `10 < x <= 50`.
Thanks @ericman314.
- Add an example showing a proof of concept of using `BigInt` in mathjs.
- Fixed #1269: Bugfix for BigNumber divided by unit. Thanks @ericman314.
- Fixed #1240: allow units having just a value and no unit.
Thanks @ericman314.
## 2018-09-09, version 5.1.2
- Fixed a typo in the docs of `parse`. Thanks @mathiasvr.
- Fixed #1222: a typo in the docs of `subset`.
- Fixed #1236: `quantileSeq` has inconsistent return.
- Fixed #1237: norm sometimes returning a complex number instead of
number.
- Upgraded dependencies (`fraction.js@4.0.9`)
- Upgraded devDependencies (`babel@7`, `karma-webpack@3.0.4`,
`nyc@13.0.1`, `standard@12.0.0`, `uglify-js@3.4.9`, `webpack@4.17.2`)
## 2018-08-21, version 5.1.1
- Function `isNumeric` now recognizes more types.
- Fixed #1214: functions `sqrt`, `max`, `min`, `var`, `std`, `mode`, `mad`,
`median`, and `partitionSelect` not neatly handling `NaN` inputs. In some
cases (`median`, `mad`, and `partitionSelect`) this resulted in an infinite
loop.
- Upgraded dependencies (`escape-latex@1.1.1`)
- Upgraded devDependencies (`webpack@4.17.0`)
## 2018-08-12, version 5.1.0
- Implemented support for strings enclosed in single quotes.
Thanks @jean-emmanuel.
- Implemented function `getMatrixDataType`. Thanks @JasonShin.
- Implemented new `options` argument in `simplify`. Thanks @paulobuchsbaum.
- Bug fixes in `rationalize`, see #1173. Thanks @paulobuchsbaum.
## 2018-07-22, version 5.0.4
- Strongly improved the performance of functions `factorial` for numbers.
This improves performance of functions `gamma`, `permutation`, and
`combination` too. See #1170. Thanks @honeybar.
- Strongly improved the performance of function `reshape`, thanks to a
friend of @honeybar.
## 2018-07-14, version 5.0.3
- Fixed many functions (for example `add` and `subtract`) not working
with matrices having a `datatype` defined.
- Fixed #1147: bug in `format` with `engineering` notation in outputting
the correct number of significant figures. Thanks @ericman314.
- Fixed #1162: transform functions not being cleaned up when overriding
it by importing a factory function with the same name.
- Fixed broken links in the documentation. Thanks @stropitek.
- Refactored the code of `parse` into a functional approach.
Thanks @harrysarson.
- Changed `decimal.js` import to ES6. Thanks @weinshel.
## 2018-07-07, version 5.0.2
- Fixed #1136: rocket trajectory example broken (since v4.0.0).
- Fixed #1137: `simplify` unnecessarily replacing implicit multiplication with
explicit multiplication.
- Fixed #1146: `rationalize` throwing exceptions for some input with decimals.
Thanks @maruta.
- Fixed #1088: function arguments not being passed to `rawArgs` functions.
- Fixed advanced example `add_new_datatypes`.
- Fixed mathjs core constants not working without complex numbers.
Thanks @ChristopherChudzicki.
- Fixed a broken link in the documentation on units. Thanks @stropitek.
- Upgraded dependencies (`typed-function@1.0.4`, `complex.js@2.0.11`).
- Upgraded devDependencies (`babel-loader@7.1.5 `, `uglify-js@3.4.3`,
`expr-eval@1.2.2`, `webpack@4.15.1`).
## 2018-07-01, version 5.0.1
- Improved error messaging when converting units. Thanks @gap777.
- Upgraded devDependencies (`kerma`, `uglify-js`, `webpack`).
## 2018-06-16, version 5.0.0
!!! BE CAREFUL: BREAKING CHANGES !!!
- Implemented complex conjugate transpose `math.ctranspose`. See #1097.
Thanks @jackschmidt.
- Changed the behavior of `A'` (transpose) in the expression parser to
calculate the complex conjugate transpose. See #1097. Thanks @jackschmidt.
- Added support for `complex({abs: 1, arg: 1})`, and improved the docs on
complex numbers. Thanks @ssaket.
- Renamed `eye` to `identity`, see #1054.
- Math.js code can now contain ES6. The ES6 source code is moved from `lib`
to `src`, and `lib` now contains the compiled ES5 code.
- Upgraded dependencies:
- `decimal.js` from `9.0.1` to `10.0.1`
- Upgraded dev dependencies
- Changed code style to https://standardjs.com/, run linter on `npm test`.
See #1110.
- Dropped support for bower. Use npm or an other package manages instead.
- Dropped support for (non-primitive) instances of `Number`, `Boolean`, and
`String` from functions `clone` and `typeof`.
- Dropped official support for IE9 (probably still works, but it's not tested).
- Fixed #851: More consistent behavior of sqrt, nthRoot, and pow.
Thanks @dakotablair.
- Fixed #1103: Calling `toTex` on node that contains `derivative` causing
an exception. Thanks @joelhoover.
## 2018-06-02, version 4.4.2
- Drastically improved the performance of `det`. Thanks @ericman314.
- Fixed #1065, #1121: Fixed wrong documentation of function
`compareNatural` and clarified the behavior for strings.
- Fixed #1122 a regression in function `inv` (since `v4.4.1`).
Thanks @ericman314.
## 2018-05-29, version 4.4.1
- Fixed #1109: a bug in `inv` when dealing with values close to zero.
Thanks @ericman314.
## 2018-05-28, version 4.4.0
- Implemented functions `equalText` and `compareText`. See #1085.
## 2018-05-21, version 4.3.0
- Implemented matrix exponential `math.expm`. Thanks @ericman314.
- Fixed #1101: math.js bundle not working when loading in a WebWorker.
- Upgraded dependencies
- `complex.js` from `v2.0.2` to `v2.0.10`.
- `fraction.js` from `v4.0.4` to `v4.0.8`.
- Upgraded devDependencies (`mocha`, `uglify-js`, `webpack`).
## 2018-05-05, version 4.2.2
- Fixed calculating the Frobenius norm of complex matrices correctly,
see #1098. Thanks @jackschmidt.
- Fixed #1076: cannot use mathjs in React VR by updating to
`escape-latex@1.0.3`.
## 2018-05-02, version 4.2.1
- Fixed `dist/math.js` being minified.
## 2018-05-02, version 4.2.0
- Implemented function `math.sqrtm`. Thanks @ferrolho.
- Implemented functions `math.log2`, `math.log1p`, and `math.expm1`.
Thanks @BigFav and @harrysarson.
- Fixed some unit tests broken on nodejs v10.
- Upgraded development dependencies.
- Dropped integration testing on nodejs v4.
## 2018-04-18, version 4.1.2
- Fixed #1082: implemented support for unit plurals `decades`, `centuries`,
and `millennia`.
- Fixed #1083: units `decade` and `watt` having a wrong name when stringifying.
Thanks @ericman314.
## 2018-04-11, version 4.1.1
- Fixed #1063: derivative not working when resolving a variable with unary
minus like `math.derivative('-x', 'x')`.
## 2018-04-08, version 4.1.0
- Extended function `math.print` with support for arrays and matrices.
Thanks @jean-emmanuel.
- Fixed #1077: Serialization/deserialization to JSON with reviver not being
supported by nodes.
- Fixed #1016: Extended `math.typeof` with support for `ResultSet` and nodes
like `SymbolNode`.
- Fixed #1072: Added support for long and short prefixes for the unit `bar`
(i.e. `millibar` and `mbar`).
## 2018-03-17, version 4.0.1
- Fixed #1062: mathjs not working on ES5 browsers like IE11 and Safari 9.3.
- Fixed #1061: `math.unit` not accepting input like `1/s`.
## 2018-02-25, version 4.0.0
!!! BE CAREFUL: BREAKING CHANGES !!!
Breaking changes (see also #682):
- **New expression compiler**
The compiler of the expression parser is replaced with one that doesn't use
`eval` internally. See #1019. This means:
- a slightly improved performance on most browsers.
- less risk of security exploits.
- the code of the new compiler is easier to understand, maintain, and debug.
Breaking change here: When using custom nodes in the expression parser,
the syntax of `_compile` has changed. This is an undocumented feature though.
- **Parsed expressions**
- The class `ConstantNode` is changed such that it just holds a value
instead of holding a stringified value and it's type.
`ConstantNode(valueStr, valueType`) is now `ConstantNode(value)`
Stringification uses `math.format`, which may result in differently
formatted numeric output.
- The constants `true`, `false`, `null`, `undefined`, `NaN`, `Infinity`,
and `uninitialized` are now parsed as ConstantNodes instead of
SymbolNodes in the expression parser. See #833.
- **Implicit multiplication**
- Changed the behavior of implicit multiplication to have higher
precedence than explicit multiplication and division, except in
a number of specific cases. This gives a more natural behavior
for implicit multiplications. For example `24h / 6h` now returns `4`,
whilst `1/2 kg` evaluates to `0.5 kg`. Thanks @ericman314. See: #792.
Detailed documentation: https://github.com/josdejong/mathjs/blob/v4/docs/expressions/syntax.md#implicit-multiplication.
- Immediately invoking a function returned by a function like `partialAdd(2)(3)`
is no longer supported, instead these expressions are evaluated as
an implicit multiplication `partialAdd(2) * (3)`. See #1035.
- **String formatting**
- In function `math.format`, the options `{exponential: {lower: number, upper: number}}`
(where `lower` and `upper` are values) are replaced with `{lowerExp: number, upperExp: number}`
(where `lowerExp` and `upperExp` are exponents). See #676. For example:
```js
math.format(2000, {exponential: {lower: 1e-2, upper: 1e2}})
```
is now:
```js
math.format(2000, {lowerExp: -2, upperExp: 2})
```
- In function `math.format`, the option `notation: 'fixed'` no longer rounds to
zero digits when no precision is specified: it leaves the digits as is.
See #676.
- **String comparison**
Changed the behavior of relational functions (`compare`, `equal`,
`equalScalar`, `larger`, `largerEq`, `smaller`, `smallerEq`, `unequal`)
to compare strings by their numeric value they contain instead of
alphabetically. This also impacts functions `deepEqual`, `sort`, `min`,
`max`, `median`, and `partitionSelect`. Use `compareNatural` if you
need to sort an array with text. See #680.
- **Angle units**
Changed `rad`, `deg`, and `grad` to have short prefixes,
and introduced `radian`, `degree`, and `gradian` and their plurals
having long prefixes. See #749.
- **Null**
- `null` is no longer implicitly casted to a number `0`, so input like
`math.add(2, null)` is no longer supported. See #830, #353.
- Dropped constant `uninitialized`, which was used to initialize
leave new entries undefined when resizing a matrix is removed.
Use `undefined` instead to indicate entries that are not explicitly
set. See #833.
- **New typed-function library**
- The `typed-function` library used to check the input types
of functions is completely rewritten and doesn't use `eval` under
the hood anymore. This means a reduced security risk, and easier
to debug code. The API is the same, but error messages may differ
a bit. Performance is comparable but may differ in specific
use cases and browsers.
Non breaking changes:
- Thanks to the new expression compiler and `typed-function` implementation,
mathjs doesn't use JavaScript's `eval` anymore under the hood.
This allows using mathjs in environments with security restrictions.
See #401.
- Implemented additional methods `isUnary()` and `isBinary()` on
`OperatorNode`. See #1025.
- Improved error messages for statistical functions.
- Upgraded devDependencies.
- Fixed #1014: `derivative` silently dropping additional arguments
from operator nodes with more than two arguments.
## 2018-02-07, version 3.20.2
- Upgraded to `typed-function@0.10.7` (bug-fix release).
- Fixed option `implicit` not being copied from an `OperatorNode`
when applying function `map`. Thanks @HarrySarson.
- Fixed #995: spaces and underscores not property being escaped
in `toTex()`. Thanks @FSMaxB.
## 2018-01-17, version 3.20.1
- Fixed #1018: `simplifyCore` failing in some cases with parentheses.
Thanks @firepick1.
## 2018-01-14, version 3.20.0
- Implement support for 3 or more arguments for operators `+` and `*` in
`derivative`. Thanks @HarrySarson. See #1002.
- Fixed `simplify` evalution of `simplify` of functions with more than two
arguments wrongly: `simplify('f(x, y, z)') evaluated to `f(f(x, y), z)`
instead of `f(x, y, z)`. Thanks @joelhoover.
- Fixed `simplify` throwing an error in some cases when simplifying unknown
functions, for example `simplify('f(4)')`. Thanks @joelhoover.
- Fixed #1013: `simplify` wrongly simplifing some expressions containing unary
minus, like `0 - -x`. Thanks @joelhoover.
- Fixed an error in an example in the documentation of `xor`. Thanks @denisx.
## 2018-01-06, version 3.19.0
- Extended functions `distance` and `intersect` with support for BigNumbers.
Thanks @ovk.
- Improvements in function `simplify`: added a rule that allows combining
of like terms in embedded quantities. Thanks @joelhoover.
## 2017-12-28, version 3.18.1
- Fixed #998: An issue with simplifying an expression containing a subtraction.
Thanks @firepick1.
## 2017-12-16, version 3.18.0
- Implemented function `rationalize`. Thanks @paulobuchsbaum.
- Upgraded dependencies:
```
decimal.js 7.2.3 → 9.0.1 (no breaking changes affecting mathjs)
fraction.js 4.0.2 → 4.0.4
tiny-emitter 2.0.0 → 2.0.2
```
- Upgraded dev dependencies.
- Fixed #975: a wrong example in the docs of lusolve.
- Fixed #983: `pickRandom` returning an array instead of single value
when input was an array with just one value. Clarified docs.
- Fixed #969: preven issues with yarn autoclean by renaming an
interally used folder "docs" to "embeddedDocs".
## 2017-11-18, version 3.17.0
- Improved `simplify` for nested exponentiations. Thanks @IvanVergiliev.
- Fixed a security issue in `typed-function` allowing arbitrary code execution
in the JavaScript engine by creating a typed function with JavaScript code
in the name. Thanks Masato Kinugawa.
- Fixed a security issue where forbidden properties like constructor could be
replaced by using unicode characters when creating an object. No known exploit,
but could possibly allow arbitrary code execution. Thanks Masato Kinugawa.
## 2017-10-18, version 3.16.5
- Fixed #954: Functions `add` and `multiply` not working when
passing three or more arrays or matrices.
## 2017-10-01, version 3.16.4
- Fixed #948, #949: function `simplify` returning wrong results or
running into an infinite recursive loop. Thanks @ericman314.
- Fixed many small issues in the embedded docs. Thanks @Schnark.
## 2017-08-28, version 3.16.3
- Fixed #934: Wrong simplification of unary minus. Thanks @firepick1.
- Fixed #933: function `simplify` reordering operations. Thanks @firepick1.
- Fixed #930: function `isNaN` returning wrong result for complex
numbers having just one of their parts (re/im) being `NaN`.
- Fixed #929: `FibonacciHeap.isEmpty` returning wrong result.
## 2017-08-20, version 3.16.2
- Fixed #924: a regression in `simplify` not accepting the signature
`simplify(expr, rules, scope)` anymore. Thanks @firepick1.
- Fixed missing parenthesis when stringifying expressions containing
implicit multiplications (see #922). Thanks @FSMaxB.
## 2017-08-12, version 3.16.1
- For security reasons, type checking is now done in a more strict
way using functions like `isComplex(x)` instead of duck type checking
like `x && x.isComplex === true`.
- Fixed #915: No access to property "name".
- Fixed #901: Simplify units when calling `unit.toNumeric()`.
Thanks @AlexanderBeyn.
- Fixed `toString` of a parsed expression tree containing an
immediately invoked function assignment not being wrapped in
parenthesis (for example `(f(x) = x^2)(4)`).
## 2017-08-06, version 3.16.0
- Significant performance improvements in `math.simplify`.
Thanks @firepick1.
- Improved API for `math.simplify`, optionally pass a scope with
variables which are resolved, see #907. Thanks @firepick1.
- Fixed #912: math.js didn't work on IE10 anymore (regression
since 3.15.0).
## 2017-07-29, version 3.15.0
- Added support for the dollar character `$` in symbol names (see #895).
- Allow objects with prototypes as scope again in the expression parser,
this was disabled for security reasons some time ago. See #888, #899.
Thanks @ThomasBrierley.
- Fixed #846: Issues in the functions `map`, `forEach`, and `filter`
when used in the expression parser:
- Not being able to use a function assignment as inline expression
for the callback function.
- Not being able to pass an inline expression as callback for `map`
and `forEach`.
- Index and original array/matrix not passed in `map` and `filter`.
## 2017-07-05, version 3.14.2
- Upgraded to `fraction.js@4.0.2`
- Fixed #891 using BigNumbers not working in browser environments.
## 2017-06-30, version 3.14.1
- Reverted to `fraction.js@4.0.0`, there is an issue with `4.0.1`
in the browser.
## 2017-06-30, version 3.14.0
- Implemented set methods `setCartesian`, `setDifference`,
`setDistinct`, `setIntersect`, `setIsSubset`, `setPowerset`,
`setSize`. Thanks @Nekomajin42.
- Implemented method `toHTML` on nodes. Thanks @Nekomajin42.
- Implemented `compareNatural` and `sort([...], 'natural')`.
- Upgraded dependencies to the latest versions:
- `complex.js@2.0.4`
- `decimal.js@7.2.3`
- `fraction.js@4.0.1`
- `tiny-emitter@2.0.0`
- And all devDependencies.
- Fixed #865: `splitUnit` can now deal with round-off errors.
Thanks @ericman314.
- Fixed #876: incorrect definition for unit `erg`. Thanks @pjhampton.
- More informative error message when using single quotes instead of
double quotes around a string. Thanks @HarrySarson.
## 2017-05-27, version 3.13.3
- Fixed a bug in function `intersection` of line and plane.
Thanks @viclai.
- Fixed security vulnerabilities.
## 2017-05-26, version 3.13.2
- Disabled function `chain` inside the expression parser for security
reasons (it's not needed there anyway).
- Fixed #856: function `subset` not returning non-primitive scalars
from Arrays correctly. (like `math.eval('arr[1]', {arr: [math.bignumber(2)]})`.
- Fixed #861: physical constants not available in the expression parser.
## 2017-05-12, version 3.13.1
- Fixed creating units with an alias not working within the expression
parser.
- Fixed security vulnerabilities. Thanks Sam.
## 2017-05-12, version 3.13.0
- Command line application can now evaluate inline expressions
like `mathjs 1+2`. Thanks @slavaGanzin.
- Function `derivative` now supports `abs`. Thanks @tetslee.
- Function `simplify` now supports BigNumbers. Thanks @tetslee.
- Prevent against endless loops in `simplify`. Thanks @tetslee.
- Fixed #813: function `simplify` converting small numbers to inexact
Fractions. Thanks @tetslee.
- Fixed #838: Function `simplify` now supports constants like `e`.
Thanks @tetslee.
## 2017-05-05, version 3.12.3
- Fixed security vulnerabilities. Thanks Dan and Sam.
## 2017-04-30, version 3.12.2
- Added a rocket trajectory optimization example.
## 2017-04-24, version 3.12.1
- Fixed #804
- Improved handling of powers of `Infinity`. Thanks @HarrySarson.
- Fixed wrong formatting of complex NaN.
- Fixed security vulnerabilities in the expression parser.
Thanks Sam and Dan.
## 2017-04-17, version 3.12.0
- Implemented QR decomposition, function `math.qr`. Thanks @HarrySarson.
- Fixed #824: Calling `math.random()` freezes IE and node.js.
## 2017-04-08, version 3.11.5
- More security measures in the expression parser.
WARNING: the behavior of the expression parser is now more strict,
some undocumented features may not work any longer.
- Accessing and assigning properties is now only allowed on plain
objects, not on classes, arrays, and functions anymore.
- Accessing methods is restricted to a set of known, safe methods.
## 2017-04-03, version 3.11.4
- Fixed a security vulnerability in the expression parser. Thanks @xfix.
## 2017-04-03, version 3.11.3
- Fixed a security vulnerability in the expression parser. Thanks @xfix.
## 2017-04-03, version 3.11.2
- Fixed a security vulnerability in the expression parser. Thanks @xfix.
## 2017-04-02, version 3.11.1
- Fixed security vulnerabilities in the expression parser.
Thanks Joe Vennix and @xfix.
## 2017-04-02, version 3.11.0
- Implemented method Unit.toSI() to convert a unit to base SI units.
Thanks @ericman314.
- Fixed #821, #822: security vulnerabilities in the expression parser.
Thanks @comex and @xfix.
## 2017-03-31, version 3.10.3
- More security fixes related to the ones fixed in `v3.10.2`.
## 2017-03-31, version 3.10.2
- Fixed a security vulnerability in the expression parser allowing
execution of arbitrary JavaScript. Thanks @CapacitorSet and @denvit.
## 2017-03-26, version 3.10.1
- Fixed `xgcd` for negative values. Thanks @litmit.
- Fixed #807: function transform of existing functions not being removed when
overriding such a function.
## 2017-03-05, version 3.10.0
- Implemented function `reshape`. Thanks @patgrasso and @ericman314.
- Implemented configuration option `seedRandom` for deterministic random
numbers. Thanks @morsecodist.
- Small fixes in the docs. Thanks @HarrySarson.
- Dropped support for component package manager (which became deprecated about
one and a half year ago).
## 2017-02-22, version 3.9.3
- Fixed #797: issue with production builds of React Native projects.
- Fixed `math.round` not accepting inputs `NaN`, `Infinity`, `-Infinity`.
- Upgraded all dependencies.
## 2017-02-16, version 3.9.2
- Fixed #795: Parse error in case of a multi-line expression with just comments.
## 2017-02-06, version 3.9.1
- Fixed #789: Math.js not supporting conversion of `string` to `BigNumber`,
`Fraction`, or `Complex` number.
- Fixed #790: Expression parser did not pass function arguments of enclosing
functions via `scope` to functions having `rawArgs = true`.
- Small fixes in the docs. Thanks @HarrySarson.
## 2017-01-23, version 3.9.0
- Implemented support for algebra: powerful new functions `simplify` and
`derivative`. Thanks @ericman314, @tetslee, and @BigFav.
- Implemented Kronecker Product `kron`. Thanks @adamisntdead.
- Reverted `FunctionNode` not accepting a string as function name anymore.
- Fixed #765: `FunctionAssignmentNode.toString()` returning a string
incompatible with the function assignment syntax.
## 2016-12-15, version 3.8.1
- Implemented function `mad` (median absolute deviation). Thanks @ruhleder.
- Fixed #762: expression parser failing to invoke a function returned
by a function.
## 2016-11-18, version 3.8.0
- Functions `add` and `multiply` now accept more than two arguments. See #739.
- `OperatorNode` now supports more than two arguments. See #739. Thanks @FSMaxB.
- Implemented a method `Node.cloneDeep` for the expression nodes. See #745.
- Fixed a bug in `Node.clone()` not cloning implicit multiplication correctly.
Thanks @FSMaxB.
- Fixed #737: Improved algorithm determining the best prefix for units.
It will now retain the original unit like `1 cm` when close enough,
instead of returning `10 mm`. Thanks @ericman314.
- Fixed #732: Allow letter-like unicode characters like Ohm `\u2126`.
- Fixed #749: Units `rad`, `deg`, and `grad` can now have prefixes like `millirad`.
- Some fixes in the docs and comments of examples. Thanks @HarrySarson.
## 2016-11-05, version 3.7.0
- Implemented method `Node.equals(other)` for all nodes of the expression parser.
- Implemented BigNumber support in function `arg()`.
- Command Line Interface loads faster.
- Implicit conversions between Fractions and BigNumbers throw a neat error now
(See #710).
## 2016-10-21, version 3.6.0
- Implemented function `erf()`. THanks @patgrasso.
- Extended function `cross()` to support n-d vectors. Thanks @patgrasso.
- Extended function `pickRandom` with the option to pick multiple values from
an array and give the values weights: `pickRandom(possibles, number, weights)`.
Thanks @woylie.
- Parser now exposes test functions like `isAlpha` which can be replaced in
order to adjust the allowed characters in variables names (See #715).
- Fixed #727: Parser not throwing an error for invalid implicit multiplications
like `-2 2` and `2^3 4` (right after the second value of an operator).
- Fixed #688: Describe allowed variable names in the docs.
## 2016-09-21, version 3.5.3
- Some more fixes regarding numbers ending with a decimal mark (like `2.`).
## 2016-09-20, version 3.5.2
- Fixed numbers ending with a decimal mark (like `2.`) not being supported by
the parser, solved the underlying ambiguity in the parser. See #707, #711.
## 2016-09-12, version 3.5.1
- Removed a left over console.log statement. Thanks @eknkc.
## 2016-09-07, version 3.5.0
- Comments of expressions are are now stored in the parsed nodes. See #690.
- Fixed function `print` not accepting an Object with formatting options as
third parameter Thanks @ThomasBrierley.
- Fixed #707: The expression parser no longer accepts numbers ending with a dot
like `2.`.
## 2016-08-08, version 3.4.1
- Fixed broken bundle files (`dist/math.js`, `dist/math.min.js`).
- Fixed some layout issues in the function reference docs.
## 2016-08-07, version 3.4.0
- Implemented support for custom units using `createUnit`. Thanks @ericman314.
- Implemented function `splitUnits`. Thanks @ericman314.
- Implemented function `isPrime`. Thanks @MathBunny.
## 2016-07-05, version 3.3.0
- Implemented function `isNaN`.
- Function `math.filter` now passes three arguments to the callback function:
value, index, and array.
- Removed the check on the number of arguments from functions defined in the
expression parser (see #665).
- Fixed #665: functions `map`, `forEach`, and `filter` now invoke callbacks
which are a typed-function with the correct number of arguments.
## 2016-04-26, version 3.2.1
- Fixed #651: unable to perform calculations on "Unit-less" units.
- Fixed matrix.subset mutating the replacement matrix when unsqueezing it.
## 2016-04-16, version 3.2.0
- Implemented #644: method `Parser.getAll()` to retrieve all defined variables.
- Upgraded dependencies (decimal.js@5.0.8, fraction.js@3.3.1,
typed-function@0.10.4).
- Fixed #601: Issue with unnamed typed-functions by upgrading to
typed-function v0.10.4.
- Fixed #636: More strict `toTex` templates, reckon with number of arguments.
- Fixed #641: Bug in expression parser parsing implicit multiplication with
wrong precedence in specific cases.
- Fixed #645: Added documentation about `engineering` notation of function
`math.format`.
## 2016-04-03, version 3.1.4
- Using ES6 Math functions like `Math.sinh`, `Math.cbrt`, `Math.sign`, etc when
available.
- Fixed #631: unit alias