UNPKG

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