UNPKG

58.6 kBMarkdownView Raw
1# History
2
3## 2018-02-07, version 3.20.2
4
5- Upgraded to `typed-function@0.10.7` (bug-fix release).
6- Fixed option `implicit` not being copied from an `OperatorNode`
7 when applying function `map`. Thanks @HarraySarson.
8- Fixed #995: spaces and underscores not property being escaped
9 in `toTex()`. Thanks @FSMaxB.
10
11
12## 2018-01-17, version 3.20.1
13
14- Fixed #1018: `simplifyCore` failing in some cases with parentheses.
15 Thanks @firepick1.
16
17
18## 2018-01-14, version 3.20.0
19
20- Implement support for 3 or more arguments for operators `+` and `*` in
21 `derivative`. Thanks @HarrySarson. See #1002.
22- Fixed `simplify` evalution of `simplify` of functions with more than two
23 arguments wrongly: `simplify('f(x, y, z)') evaluated to `f(f(x, y), z)`
24 instead of `f(x, y, z)`. Thanks @joelhoover.
25- Fixed `simplify` throwing an error in some cases when simplifying unknown
26 functions, for example `simplify('f(4)')`. Thanks @joelhoover.
27- Fixed #1013: `simplify` wrongly simplifing some expressions containing unary
28 minus, like `0 - -x`. Thanks @joelhoover.
29- Fixed an error in an example in the documentation of `xor`. Thanks @denisx.
30
31
32## 2018-01-06, version 3.19.0
33
34- Extended functions `distance` and `intersect` with support for BigNumbers.
35 Thanks @ovk.
36- Improvements in function `simplify`: added a rule that allows combining
37 of like terms in embedded quantities. Thanks @joelhoover.
38
39
40## 2017-12-28, version 3.18.1
41
42- Fixed #998: An issue with simplifying an expression containing a subtraction.
43 Thanks @firepick1.
44
45
46## 2017-12-16, version 3.18.0
47
48- Implemented function `rationalize`. Thanks @paulobuchsbaum.
49- Upgraded dependencies:
50 ```
51 decimal.js 7.2.3 → 9.0.1 (no breaking changes affecting mathjs)
52 fraction.js 4.0.2 → 4.0.4
53 tiny-emitter 2.0.0 → 2.0.2
54 ```
55- Upgraded dev dependencies.
56- Fixed #975: a wrong example in the docs of lusolve.
57- Fixed #983: `pickRandom` returning an array instead of single value
58 when input was an array with just one value. Clarified docs.
59- Fixed #969: preven issues with yarn autoclean by renaming an
60 interally used folder "docs" to "embeddedDocs".
61
62
63## 2017-11-18, version 3.17.0
64
65- Improved `simplify` for nested exponentiations. Thanks @IvanVergiliev.
66- Fixed a security issue in `typed-function` allowing arbitrary code execution
67 in the JavaScript engine by creating a typed function with JavaScript code
68 in the name. Thanks Masato Kinugawa.
69- Fixed a security issue where forbidden properties like constructor could be
70 replaced by using unicode characters when creating an object. No known exploit,
71 but could possibly allow arbitrary code execution. Thanks Masato Kinugawa.
72
73
74## 2017-10-18, version 3.16.5
75
76- Fixed #954: Functions `add` and `multiply` not working when
77 passing three or more arrays or matrices.
78
79
80## 2017-10-01, version 3.16.4
81
82- Fixed #948, #949: function `simplify` returning wrong results or
83 running into an infinite recursive loop. Thanks @ericman314.
84- Fixed many small issues in the embedded docs. Thanks @Schnark.
85
86
87## 2017-08-28, version 3.16.3
88
89- Fixed #934: Wrong simplification of unary minus. Thanks @firepick1.
90- Fixed #933: function `simplify` reordering operations. Thanks @firepick1.
91- Fixed #930: function `isNaN` returning wrong result for complex
92 numbers having just one of their parts (re/im) being `NaN`.
93- Fixed #929: `FibonacciHeap.isEmpty` returning wrong result.
94
95
96## 2017-08-20, version 3.16.2
97
98- Fixed #924: a regression in `simplify` not accepting the signature
99 `simplify(expr, rules, scope)` anymore. Thanks @firepick1.
100- Fixed missing parenthesis when stringifying expressions containing
101 implicit multiplications (see #922). Thanks @FSMaxB.
102
103
104## 2017-08-12, version 3.16.1
105
106- For security reasons, type checking is now done in a more strict
107 way using functions like `isComplex(x)` instead of duck type checking
108 like `x && x.isComplex === true`.
109- Fixed #915: No access to property "name".
110- Fixed #901: Simplify units when calling `unit.toNumeric()`.
111 Thanks @AlexanderBeyn.
112- Fixed `toString` of a parsed expression tree containing an
113 immediately invoked function assignment not being wrapped in
114 parenthesis (for example `(f(x) = x^2)(4)`).
115
116
117## 2017-08-06, version 3.16.0
118
119- Significant performance improvements in `math.simplify`.
120 Thanks @firepick1.
121- Improved API for `math.simplify`, optionally pass a scope with
122 variables which are resolved, see #907. Thanks @firepick1.
123- Fixed #912: math.js didn't work on IE10 anymore (regression
124 since 3.15.0).
125
126
127## 2017-07-29, version 3.15.0
128
129- Added support for the dollar character `$` in symbol names (see #895).
130- Allow objects with prototypes as scope again in the expression parser,
131 this was disabled for security reasons some time ago. See #888, #899.
132 Thanks @ThomasBrierley.
133- Fixed #846: Issues in the functions `map`, `forEach`, and `filter`
134 when used in the expression parser:
135 - Not being able to use a function assignment as inline expression
136 for the callback function.
137 - Not being able to pass an inline expression as callback for `map`
138 and `forEach`.
139 - Index and original array/matrix not passed in `map` and `filter`.
140
141
142## 2017-07-05, version 3.14.2
143
144- Upgraded to `fraction.js@4.0.2`
145- Fixed #891 using BigNumbers not working in browser environments.
146
147
148## 2017-06-30, version 3.14.1
149
150- Reverted to `fraction.js@4.0.0`, there is an issue with `4.0.1`
151 in the browser.
152
153
154## 2017-06-30, version 3.14.0
155
156- Implemented set methods `setCartesian`, `setDifference`,
157 `setDistinct`, `setIntersect`, `setIsSubset`, `setPowerset`,
158 `setSize`. Thanks @Nekomajin42.
159- Implemented method `toHTML` on nodes. Thanks @Nekomajin42.
160- Implemented `compareNatural` and `sort([...], 'natural')`.
161- Upgraded dependencies to the latest versions:
162 - `complex.js@2.0.4`
163 - `decimal.js@7.2.3`
164 - `fraction.js@4.0.1`
165 - `tiny-emitter@2.0.0`
166 - And all devDependencies.
167- Fixed #865: `splitUnit` can now deal with round-off errors.
168 Thanks @ericman314.
169- Fixed #876: incorrect definition for unit `erg`. Thanks @pjhampton.
170- More informative error message when using single quotes instead of
171 double quotes around a string. Thanks @HarrySarson.
172
173
174## 2017-05-27, version 3.13.3
175
176- Fixed a bug in function `intersection` of line and plane.
177 Thanks @viclai.
178- Fixed security vulnerabilities.
179
180
181## 2017-05-26, version 3.13.2
182
183- Disabled function `chain` inside the expression parser for security
184 reasons (it's not needed there anyway).
185- Fixed #856: function `subset` not returning non-primitive scalars
186 from Arrays correctly. (like `math.eval('arr[1]', {arr: [math.bignumber(2)]})`.
187- Fixed #861: physical constants not available in the expression parser.
188
189
190## 2017-05-12, version 3.13.1
191
192- Fixed creating units with an alias not working within the expression
193 parser.
194- Fixed security vulnerabilities. Thanks Sam.
195
196
197## 2017-05-12, version 3.13.0
198
199- Command line application can now evaluate inline expressions
200 like `mathjs 1+2`. Thanks @slavaGanzin.
201- Function `derivative` now supports `abs`. Thanks @tetslee.
202- Function `simplify` now supports BigNumbers. Thanks @tetslee.
203- Prevent against endless loops in `simplify`. Thanks @tetslee.
204- Fixed #813: function `simplify` converting small numbers to inexact
205 Fractions. Thanks @tetslee.
206- Fixed #838: Function `simplify` now supports constants like `e`.
207 Thanks @tetslee.
208
209
210## 2017-05-05, version 3.12.3
211
212- Fixed security vulnerabilities. Thanks Dan and Sam.
213
214
215## 2017-04-30, version 3.12.2
216
217- Added a rocket trajectory optimization example.
218
219
220## 2017-04-24, version 3.12.1
221
222- Fixed #804
223 - Improved handling of powers of `Infinity`. Thanks @HarrySarson.
224 - Fixed wrong formatting of complex NaN.
225- Fixed security vulnerabilities in the expression parser.
226 Thanks Sam and Dan.
227
228
229## 2017-04-17, version 3.12.0
230
231- Implemented QR decomposition, function `math.qr`. Thanks @HarrySarson.
232- Fixed #824: Calling `math.random()` freezes IE and node.js.
233
234
235## 2017-04-08, version 3.11.5
236
237- More security measures in the expression parser.
238 WARNING: the behavior of the expression parser is now more strict,
239 some undocumented features may not work any longer.
240 - Accessing and assigning properties is now only allowed on plain
241 objects, not on classes, arrays, and functions anymore.
242 - Accessing methods is restricted to a set of known, safe methods.
243
244
245## 2017-04-03, version 3.11.4
246
247- Fixed a security vulnerability in the expression parser. Thanks @xfix.
248
249
250## 2017-04-03, version 3.11.3
251
252- Fixed a security vulnerability in the expression parser. Thanks @xfix.
253
254
255## 2017-04-03, version 3.11.2
256
257- Fixed a security vulnerability in the expression parser. Thanks @xfix.
258
259
260## 2017-04-02, version 3.11.1
261
262- Fixed security vulnerabilities in the expression parser.
263 Thanks Joe Vennix and @xfix.
264
265
266## 2017-04-02, version 3.11.0
267
268- Implemented method Unit.toSI() to convert a unit to base SI units.
269 Thanks @ericman314.
270- Fixed #821, #822: security vulnerabilities in the expression parser.
271 Thanks @comex and @xfix.
272
273
274## 2017-03-31, version 3.10.3
275
276- More security fixes related to the ones fixed in `v3.10.2`.
277
278
279## 2017-03-31, version 3.10.2
280
281- Fixed a security vulnerability in the expression parser allowing
282 execution of arbitrary JavaScript. Thanks @CapacitorSet and @denvit.
283
284
285## 2017-03-26, version 3.10.1
286
287- Fixed `xgcd` for negative values. Thanks @litmit.
288- Fixed #807: function transform of existing functions not being removed when
289 overriding such a function.
290
291
292## 2017-03-05, version 3.10.0
293
294- Implemented function `reshape`. Thanks @patgrasso and @ericman314.
295- Implemented configuration option `seedRandom` for deterministic random
296 numbers. Thanks @morsecodist.
297- Small fixes in the docs. Thanks @HarrySarson.
298- Dropped support for component package manager (which became deprecated about
299 one and a half year ago).
300
301
302## 2017-02-22, version 3.9.3
303
304- Fixed #797: issue with production builds of React Native projects.
305- Fixed `math.round` not accepting inputs `NaN`, `Infinity`, `-Infinity`.
306- Upgraded all dependencies.
307
308
309## 2017-02-16, version 3.9.2
310
311- Fixed #795: Parse error in case of a multi-line expression with just comments.
312
313
314## 2017-02-06, version 3.9.1
315
316- Fixed #789: Math.js not supporting conversion of `string` to `BigNumber`,
317 `Fraction`, or `Complex` number.
318- Fixed #790: Expression parser did not pass function arguments of enclosing
319 functions via `scope` to functions having `rawArgs = true`.
320- Small fixes in the docs. Thanks @HarrySarson.
321
322
323## 2017-01-23, version 3.9.0
324
325- Implemented support for algebra: powerful new functions `simplify` and
326 `derivative`. Thanks @ericman314, @tetslee, and @BigFav.
327- Implemented Kronecker Product `kron`. Thanks @adamisntdead.
328- Reverted `FunctionNode` not accepting a string as function name anymore.
329- Fixed #765: `FunctionAssignmentNode.toString()` returning a string
330 incompatible with the function assignment syntax.
331
332
333## 2016-12-15, version 3.8.1
334
335- Implemented function `mad` (median absolute deviation). Thanks @ruhleder.
336- Fixed #762: expression parser failing to invoke a function returned
337 by a function.
338
339
340## 2016-11-18, version 3.8.0
341
342- Functions `add` and `multiply` now accept more than two arguments. See #739.
343- `OperatorNode` now supports more than two arguments. See #739. Thanks @FSMaxB.
344- Implemented a method `Node.cloneDeep` for the expression nodes. See #745.
345- Fixed a bug in `Node.clone()` not cloning implicit multiplication correctly.
346 Thanks @FSMaxB.
347- Fixed #737: Improved algorithm determining the best prefix for units.
348 It will now retain the original unit like `1 cm` when close enough,
349 instead of returning `10 mm`. Thanks @ericman314.
350- Fixed #732: Allow letter-like unicode characters like Ohm `\u2126`.
351- Fixed #749: Units `rad`, `deg`, and `grad` can now have prefixes like `millirad`.
352- Some fixes in the docs and comments of examples. Thanks @HarrySarson.
353
354
355## 2016-11-05, version 3.7.0
356
357- Implemented method `Node.equals(other)` for all nodes of the expression parser.
358- Implemented BigNumber support in function `arg()`.
359- Command Line Interface loads faster.
360- Implicit conversions between Fractions and BigNumbers throw a neat error now
361 (See #710).
362
363
364## 2016-10-21, version 3.6.0
365
366- Implemented function `erf()`. THanks @patgrasso.
367- Extended function `cross()` to support n-d vectors. Thanks @patgrasso.
368- Extended function `pickRandom` with the option to pick multiple values from
369 an array and give the values weights: `pickRandom(possibles, number, weights)`.
370 Thanks @woylie.
371- Parser now exposes test functions like `isAlpha` which can be replaced in
372 order to adjust the allowed characters in variables names (See #715).
373- Fixed #727: Parser not throwing an error for invalid implicit multiplications
374 like `-2 2` and `2^3 4` (right after the second value of an operator).
375- Fixed #688: Describe allowed variable names in the docs.
376
377
378## 2016-09-21, version 3.5.3
379
380- Some more fixes regarding numbers ending with a decimal mark (like `2.`).
381
382
383## 2016-09-20, version 3.5.2
384
385- Fixed numbers ending with a decimal mark (like `2.`) not being supported by
386 the parser, solved the underlying ambiguity in the parser. See #707, #711.
387
388
389## 2016-09-12, version 3.5.1
390
391- Removed a left over console.log statement. Thanks @eknkc.
392
393
394## 2016-09-07, version 3.5.0
395
396- Comments of expressions are are now stored in the parsed nodes. See #690.
397- Fixed function `print` not accepting an Object with formatting options as
398 third parameter Thanks @ThomasBrierley.
399- Fixed #707: The expression parser no longer accepts numbers ending with a dot
400 like `2.`.
401
402
403## 2016-08-08, version 3.4.1
404
405- Fixed broken bundle files (`dist/math.js`, `dist/math.min.js`).
406- Fixed some layout issues in the function reference docs.
407
408
409## 2016-08-07, version 3.4.0
410
411- Implemented support for custom units using `createUnit`. Thanks @ericman314.
412- Implemented function `splitUnits`. Thanks @ericman314.
413- Implemented function `isPrime`. Thanks @MathBunny.
414
415
416## 2016-07-05, version 3.3.0
417
418- Implemented function `isNaN`.
419- Function `math.filter` now passes three arguments to the callback function:
420 value, index, and array.
421- Removed the check on the number of arguments from functions defined in the
422 expression parser (see #665).
423- Fixed #665: functions `map`, `forEach`, and `filter` now invoke callbacks
424 which are a typed-function with the correct number of arguments.
425
426
427## 2016-04-26, version 3.2.1
428
429- Fixed #651: unable to perform calculations on "Unit-less" units.
430- Fixed matrix.subset mutating the replacement matrix when unsqueezing it.
431
432
433## 2016-04-16, version 3.2.0
434
435- Implemented #644: method `Parser.getAll()` to retrieve all defined variables.
436- Upgraded dependencies (decimal.js@5.0.8, fraction.js@3.3.1,
437 typed-function@0.10.4).
438- Fixed #601: Issue with unnamed typed-functions by upgrading to
439 typed-function v0.10.4.
440- Fixed #636: More strict `toTex` templates, reckon with number of arguments.
441- Fixed #641: Bug in expression parser parsing implicit multiplication with
442 wrong precedence in specific cases.
443- Fixed #645: Added documentation about `engineering` notation of function
444 `math.format`.
445
446
447## 2016-04-03, version 3.1.4
448
449- Using ES6 Math functions like `Math.sinh`, `Math.cbrt`, `Math.sign`, etc when
450 available.
451- Fixed #631: unit aliases `weeks`, `months`, and `years` where missing.
452- Fixed #632: problem with escaped backslashes at the end of strings.
453- Fixed #635: `Node.toString` options where not passed to function arguments.
454- Fixed #629: expression parser throws an error when passing a number with
455 decimal exponent instead of parsing them as implicit multiplication.
456- Fixed #484, #555: inaccuracy of `math.sinh` for values between -1 and 1.
457- Fixed #625: Unit `in` (`inch`) not always working due to ambiguity with
458 the operator `a in b` (alias of `a to b`).
459
460
461## 2016-03-24, version 3.1.3
462
463- Fix broken bundle.
464
465
466## 2016-03-24, version 3.1.2
467
468- Fix broken npm release.
469
470
471## 2016-03-24, version 3.1.1
472
473- Fixed #621: a bug in parsing implicit multiplications like `(2)(3)+4`.
474- Fixed #623: `nthRoot` of zero with a negative root returned `0` instead of
475 `Infinity`.
476- Throw an error when functions `min`, `max`, `mean`, or `median` are invoked
477 with multiple matrices as arguments (see #598).
478
479
480## 2016-03-19, version 3.1.0
481
482- Hide multiplication operator by default when outputting `toTex` and `toString`
483 for implicit multiplications. Implemented and option to output the operator.
484- Implemented unit `kip` and alias `kips`. Thanks @hgupta9.
485- Added support for prefixes for units `mol` and `mole`. Thanks @stu-blair.
486- Restored support for implicit multiplications like `2(3+4)` and `(2+3)(4+5)`.
487- Some improvements in the docs.
488- Added automatic conversions from `boolean` and `null` to `Fraction`,
489 and conversions from `Fraction` to `Complex`.
490
491
492## 2016-03-04, version 3.0.0
493
494### breaking changes
495
496- More restricted support for implicit multiplication in the expression
497 parser: `(...)(...)` is now evaluated as a function invocation,
498 and `[...][...]` as a matrix subset.
499- Matrix multiplication no longer squeezes scalar outputs to a scalar value,
500 but leaves them as they are: a vector or matrix containing a single value.
501 See #529.
502- Assignments in the expression parser now return the assigned value rather
503 than the created or updated object (see #533). Example:
504
505 ```
506 A = eye(3)
507 A[1,1] = 2 # this assignment now returns 2 instead of A
508 ```
509
510- Expression parser now supports objects. This involves a refactoring and
511 extension in expression nodes:
512 - Implemented new node `ObjectNode`.
513 - Refactored `AssignmentNode`, `UpdateNode`, and `IndexNode` are refactored
514 into `AccessorNode`, `AssignmentNode`, and `IndexNode` having a different API.
515- Upgraded the used BigNumber library `decimal.js` to v5. Replaced the
516 trigonometric functions of math.js with those provided in decimal.js v5.
517 This can give slightly different behavior qua round-off errors.
518- Replaced the internal `Complex.js` class with the `complex.js` library
519 created by @infusion.
520- Entries in a matrix (typically numbers, BigNumbers, Units, etc) are now
521 considered immutable, they are no longer copied when performing operations on
522 the entries, improving performance.
523- Implemented nearly equal comparison for relational functions (`equal`,
524 `larger`, `smaller`, etc.) when using BigNumbers.
525- Changed the casing of the configuration options `matrix` (`Array` or `Matrix`)
526 and `number` (`number`, `BigNumber`, `Fraction`) such that they now match
527 the type returned by `math.typeof`. Wrong casing gives a console warning but
528 will still work.
529- Changed the default config value for `epsilon` from `1e-14` to `1e-12`,
530 see #561.
531
532### non-breaking changes
533
534- Extended function `pow` to return the real root for cubic roots of negative
535 numbers. See #525, #482, #567.
536- Implemented support for JSON objects in the expression parser and the
537 function `math.format`.
538- Function `math.fraction` now supports `BigNumber`, and function
539 `math.bignumber` now supports `Fraction`.
540- Expression parser now allows function and/or variable assignments inside
541 accessors and conditionals, like `A[x=2]` or `a > 2 ? b="ok" : b="fail"`.
542- Command line interface:
543 - Outputs the variable name of assignments.
544 - Fixed not rounding BigNumbers to 14 digits like numbers.
545 - Fixed non-working autocompletion of user defined variables.
546- Reorganized and extended docs, added docs on classes and more. Thanks @hgupta9.
547- Added new units `acre`, `hectare`, `torr`, `bar`, `mmHg`, `mmH2O`, `cmH2O`,
548 and added new aliases `acres`, `hectares`, `sqfeet`, `sqyard`, `sqmile`,
549 `sqmiles`, `mmhg`, `mmh2o`, `cmh2o`. Thanks @hgupta9.
550- Fixed a bug in the toString method of an IndexNode.
551- Fixed angle units `deg`, `rad`, `grad`, `cycle`, `arcsec`, and `arcmin` not
552 being defined as BigNumbers when configuring to use BigNumbers.
553
554
555## 2016-02-03, version 2.7.0
556
557- Added more unit aliases for time: `secs`, `mins`, `hr`, `hrs`. See #551.
558- Added support for doing operations with mixed `Fractions` and `BigNumbers`.
559- Fixed #540: `math.intersect()` returning null in some cases. Thanks @void42.
560- Fixed #546: Cannot import BigNumber, Fraction, Matrix, Array.
561 Thanks @brettjurgens.
562
563
564## 2016-01-08, version 2.6.0
565
566- Implemented (complex) units `VA` and `VAR`.
567- Implemented time units for weeks, months, years, decades, centuries, and
568 millennia. Thanks @owenversteeg.
569- Implemented new notation `engineering` in function `math.format`.
570 Thanks @johnmarinelli.
571- Fixed #523: In some circumstances, matrix subset returned a scalar instead
572 of the correct subset.
573- Fixed #536: A bug in an internal method used for sparse matrices.
574
575
576## 2015-12-05, version 2.5.0
577
578- Implemented support for numeric types `Fraction` and `BigNumber` in units.
579- Implemented new method `toNumeric` for units.
580- Implemented new units `arcsec`, `arcsecond`, `arcmin`, `arcminute`.
581 Thanks @devdevdata222.
582- Implemented new unit `Herts` (`Hz`). Thanks @SwamWithTurtles.
583- Fixed #485: Scoping issue with variables both used globally as well as in a
584 function definition.
585- Fixed: Function `number` didn't support `Fraction` as input.
586
587
588## 2015-11-14, version 2.4.2
589
590- Fixed #502: Issue with `format` in some JavaScript engines.
591- Fixed #503: Removed trailing commas and the use of keyword `import` as
592 property, as this gives issues with old JavaScript engines.
593
594
595## 2015-10-29, version 2.4.1
596
597- Fixed #480: `nthRoot` not working on Internet Explorer (up to IE 11).
598- Fixed #490: `nthRoot` returning an error for negative values like
599 `nthRoot(-2, 3)`.
600- Fixed #489: an issue with initializing a sparse matrix without data.
601 Thanks @Retsam.
602- Fixed: #493: function `combinations` did not throw an exception for
603 non-integer values of `k`.
604- Fixed: function `import` did not override typed functions when the option
605 override was set true.
606- Fixed: added functions `math.sparse` and `math.index` to the reference docs,
607 they where missing.
608- Fixed: removed memoization from `gamma` and `factorial` functions, this
609 could blow up memory.
610
611
612## 2015-10-09, version 2.4.0
613
614- Added support in the expression parser for mathematical alphanumeric symbols
615 in the expression parser: unicode range \u{1D400} to \u{1D7FF} excluding
616 invalid code points.
617- Extended function `distance` with more signatures. Thanks @kv-kunalvyas.
618- Fixed a bug in functions `sin` and `cos`, which gave wrong results for
619 BigNumber integer values around multiples of tau (i.e. `sin(bignumber(7))`).
620- Fixed value of unit `stone`. Thanks @Esvandiary for finding the error.
621
622
623## 2015-09-19, version 2.3.0
624
625- Implemented function `distance`. Thanks @devanp92.
626- Implemented support for Fractions in function `lcm`. Thanks @infusion.
627- Implemented function `cbrt` for numbers, complex numbers, BigNumbers, Units.
628- Implemented function `hypot`.
629- Upgraded to fraction.js v3.0.0.
630- Fixed #450: issue with non sorted index in sparse matrices.
631- Fixed #463, #322: inconsistent handling of implicit multiplication.
632- Fixed #444: factorial of infinity not returning infinity.
633
634
635## 2015-08-30, version 2.2.0
636
637- Units with powers (like `m^2` and `s^-1`) now output with the best prefix.
638- Implemented support for units to `abs`, `cube`, `sign`, `sqrt`, `square`.
639 Thanks @ericman314.
640- Implemented function `catalan` (Combinatorics). Thanks @devanp92.
641- Improved the `canDefineProperty` check to return false in case of IE8, which
642 has a broken implementation of `defineProperty`. Thanks @golmansax.
643- Fixed function `to` not working in case of a simplified unit.
644- Fixed #437: an issue with row swapping in `lup`, also affecting `lusolve`.
645
646
647## 2015-08-12, version 2.1.1
648
649- Fixed wrong values of the physical constants `speedOfLight`, `molarMassC12`,
650 and `magneticFluxQuantum`. Thanks @ericman314 for finding two of them.
651
652
653## 2015-08-11, version 2.1.0
654
655- Implemented derived units (like `110 km/h in m/s`). Thanks @ericman314.
656- Implemented support for electric units. Thanks @ericman314.
657- Implemented about 50 physical constants like `speedOfLight`, `gravity`, etc.
658- Implemented function `kldivergence` (Kullback-Leibler divergence).
659 Thanks @saromanov.
660- Implemented function `mode`. Thanks @kv-kunalvyas.
661- Added support for unicode characters in the expression parser: greek letters
662 and latin letters with accents. See #265.
663- Internal functions `Unit.parse` and `Complex.parse` now throw an Error
664 instead of returning null when passing invalid input.
665
666
667## 2015-07-29, version 2.0.1
668
669- Fixed operations with mixed fractions and numbers be converted to numbers
670 instead of fractions.
671
672
673## 2015-07-28, version 2.0.0
674
675- Large internal refactoring:
676 - performance improvements.
677 - allows to create custom bundles
678 - functions are composed using `typed-function` and are extensible
679- Implemented support for fractions, powered by the library `fraction.js`.
680- Implemented matrix LU decomposition with partial pivoting and a LU based
681 linear equations solver (functions `lup` and `lusolve`). Thanks @rjbaucells.
682- Implemented a new configuration option `predictable`, which can be set to
683 true in order to ensure predictable function output types.
684- Implemented function `intersect`. Thanks @kv-kunalvyas.
685- Implemented support for adding `toTex` properties to custom functions.
686 Thanks @FSMaxB.
687- Implemented support for complex values to `nthRoot`. Thanks @gangachris.
688- Implemented util functions `isInteger`, `isNegative`, `isNumeric`,
689 `isPositive`, and `isZero`.
690
691### breaking changes
692
693- String input is now converted to numbers by default for all functions.
694- Adding two strings will no longer concatenate them, but will convert the
695 strings to numbers and add them.
696- Function `index` does no longer accept an array `[start, end, step]`, but
697 instead accepts an array with arbitrary index values. It also accepts
698 a `Range` object as input.
699- Function `typeof` no longer returns lower case names, but now returns lower
700 case names for primitives (like `number`, `boolean`, `string`), and
701 upper-camel-case for non-primitives (like `Array`, `Complex`, `Function`).
702- Function `import` no longer supports a module name as argument. Instead,
703 modules can be loaded using require: `math.import(require('module-name'))`.
704- Function `import` has a new option `silent` to ignore errors, and throws
705 errors on duplicates by default.
706- Method `Node.compile()` no longer needs `math` to be passed as argument.
707- Reintroduced method `Node.eval([scope])`.
708- Function `sum` now returns zero when input is an empty array. Thanks @FSMAxB.
709- The size of Arrays is no longer validated. Matrices will validate this on
710 creation.
711
712
713## 2015-07-12, version 1.7.1
714
715- Fixed #397: Inaccuracies in nthRoot for very large values, and wrong results
716 for very small values. (backported from v2)
717- Fixed #405: Parser throws error when defining a function in a multiline
718 expression.
719
720
721## 2015-05-31, version 1.7.0
722
723- Implemented function `quantileSeq` and `partitionSelect`. Thanks @BigFav.
724- Implemented functions `stirlingS2`, `bellNumbers`, `composition`, and
725 `multinomial`. Thanks @devanp92.
726- Improved the performance of `median` (see #373). Thanks @BigFav.
727- Extended the command line interface with a `mode` option to output either
728 the expressions result, string representation, or tex representation.
729 Thanks @FSMaxB.
730- Fixed #309: Function median mutating the input matrix. Thanks @FSMaxB.
731- Fixed `Node.transform` not recursing over replaced parts of the
732 node tree (see #349).
733- Fixed #381: issue in docs of `randomInt`.
734
735
736## 2015-04-22, version 1.6.0
737
738- Improvements in `toTex`. Thanks @FSMaxB.
739- Fixed #328: `abs(0 + 0i)` evaluated to `NaN`.
740- Fixed not being able to override lazy loaded constants.
741
742
743## 2015-04-09, version 1.5.2
744
745- Fixed #313: parsed functions did not handle recursive calls correctly.
746- Fixed #251: binary prefix and SI prefix incorrectly used for byte. Now
747 following SI standards (`1 KiB == 1024 B`, `1 kB == 1000 B`).
748- Performance improvements in parsed functions.
749
750
751## 2015-04-08, version 1.5.1
752
753- Fixed #316: a bug in rounding values when formatting.
754- Fixed #317, #319: a bug in formatting negative values.
755
756
757## 2015-03-28, version 1.5.0
758
759- Added unit `stone` (6.35 kg).
760- Implemented support for sparse matrices. Thanks @rjbaucells.
761- Implemented BigNumber support for function `atan2`. Thanks @BigFav.
762- Implemented support for custom LaTeX representations. Thanks @FSMaxB.
763- Improvements and bug fixes in outputting parentheses in `Node.toString` and
764 `Node.toTex` functions. Thanks @FSMaxB.
765- Fixed #291: function `format` sometimes returning exponential notation when
766 it should return a fixed notation.
767
768
769## 2015-02-28, version 1.4.0
770
771- Implemented trigonometric functions:
772 `acosh`, `acoth`, `acsch`, `asech`, `asinh`, `atanh`, `acot`, `acsc`, `asec`.
773 Thanks @BigFav.
774- Added BigNumber support for functions: `cot`, `csc`, `sec`, `coth`,
775 `csch`, `sech`. Thanks @BigFav.
776- Implemented support for serialization and deserialization of math.js data
777 types.
778- Fixed the calculation of `norm()` and `abs()` for large complex numbers.
779 Thanks @rjbaucells.
780- Fixed #281: improved formatting complex numbers. Round the real or imaginary
781 part to zero when the difference is larger than the configured precision.
782
783
784## 2015-02-09, version 1.3.0
785
786- Implemented BigNumber implementations of most trigonometric functions: `sin`,
787 `cos`, `tan`, `asin`, `acos`, `atan`, `cosh`, `sinh`, `tanh`. Thanks @BigFav.
788- Implemented function `trace`. Thanks @pcorey.
789- Faster loading of BigNumber configuration with a high precision by lazy
790 loading constants like `pi` and `e`.
791- Fixed constants `NaN` and `Infinity` not being BigNumber objects when
792 BigNumbers are configured.
793- Fixed missing parentheses in the `toTex` representation of function
794 `permutations`.
795- Some minor fixes in the docs. Thanks @KenanY.
796
797
798## 2014-12-25, version 1.2.0
799
800- Support for bitwise operations `bitAnd`, `bitNot`, `bitOr`, `bitXor`,
801 `leftShift`, `rightArithShift`, and `rightLogShift`. Thanks @BigFav.
802- Support for boolean operations `and`, `not`, `or`, `xor`. Thanks @BigFav.
803- Support for `gamma` function. Thanks @BigFav.
804- Converting a unit without value will now result in a unit *with* value,
805 i.e. `inch in cm` will return `2.54 cm` instead of `cm`.
806- Improved accuracy of `sinh` and complex `cos` and `sin`. Thanks @pavpanchekha.
807- Renamed function `select` to `chain`. The old function `select` will remain
808 functional until math.js v2.0.
809- Upgraded to decimal.js v4.0.1 (BigNumber library).
810
811
812## 2014-11-22, version 1.1.1
813
814- Fixed Unit divided by Number returning zero.
815- Fixed BigNumber downgrading to Number for a negative base in `pow`.
816- Fixed some typos in error messaging (thanks @andy0130tw) and docs.
817
818
819## 2014-11-15, version 1.1.0
820
821- Implemented functions `dot` (dot product), `cross` (cross product), and
822 `nthRoot`.
823- Officially opened up the API of expression trees:
824 - Documented the API.
825 - Implemented recursive functions `clone`, `map`, `forEach`, `traverse`,
826 `transform`, and `filter` for expression trees.
827 - Parameter `index` in the callbacks of `map` and `forEach` are now cloned
828 for every callback.
829 - Some internal refactoring inside nodes to make the API consistent:
830 - Renamed `params` to `args` and vice versa to make things consistent.
831 - Renamed `Block.nodes` to `Block.blocks`.
832 - `FunctionNode` now has a `name: string` instead of a `symbol: SymbolNode`.
833 - Changed constructor of `RangeNode` to
834 `new RangeNode(start: Node, end: Node [, step: Node])`.
835 - Nodes for a `BlockNode` must now be passed via the constructor instead
836 of via a function `add`.
837- Fixed `2e` giving a syntax error instead of being parsed as `2 * e`.
838
839
840## 2014-09-12, version 1.0.1
841
842- Disabled array notation for ranges in a matrix index in the expression parser
843 (it is confusing and redundant there).
844- Fixed a regression in the build of function subset not being able to return
845 a scalar.
846- Fixed some missing docs and broken links in the docs.
847
848
849## 2014-09-04, version 1.0.0
850
851- Implemented a function `filter(x, test)`.
852- Removed `math.distribution` for now, needs some rethinking.
853- `math.number` can convert units to numbers (requires a second argument)
854- Fixed some precedence issues with the range and conversion operators.
855- Fixed an zero-based issue when getting a matrix subset using an index
856 containing a matrix.
857
858
859## 2014-08-21, version 0.27.0
860
861- Implemented functions `sort(x [, compare])` and `flatten(x)`.
862- Implemented support for `null` in all functions.
863- Implemented support for "rawArgs" functions in the expression parser. Raw
864 functions are invoked with unevaluated parameters (nodes).
865- Expressions in the expression parser can now be spread over multiple lines,
866 like '2 +\n3'.
867- Changed default value of the option `wrap` of function `math.import` to false.
868- Changed the default value for new entries in a resized matrix when to zero.
869 To leave new entries uninitialized, use the new constant `math.uninitialized`
870 as default value.
871- Renamed transform property from `__transform__` to `transform`, and documented
872 the transform feature.
873- Fixed a bug in `math.import` not applying options when passing a module name.
874- A returned matrix subset is now only squeezed when the `index` consists of
875 scalar values, and no longer for ranges resolving into a single value.
876
877
878## 2014-08-03, version 0.26.0
879
880- A new instance of math.js can no longer be created like `math([options])`,
881 to prevent side effects from math being a function instead of an object.
882 Instead, use the function `math.create([options])` to create a new instance.
883- Implemented `BigNumber` support for all constants: `pi`, `tau`, `e`, `phi`,
884 `E`, `LN2`, `LN10`, `LOG2E`, `LOG10E`, `PI`, `SQRT1_2`, and `SQRT2`.
885- Implemented `BigNumber` support for functions `gcd`, `xgcd`, and `lcm`.
886- Fixed function `gxcd` returning an Array when math.js was configured
887 as `{matrix: 'matrix'}`.
888- Multi-line expressions now return a `ResultSet` instead of an `Array`.
889- Implemented transforms (used right now to transform one-based indices to
890 zero-based for expressions).
891- When used inside the expression parser, functions `concat`, `min`, `max`,
892 and `mean` expect an one-based dimension number.
893- Functions `map` and `forEach` invoke the callback with one-based indices
894 when used from within the expression parser.
895- When adding or removing dimensions when resizing a matrix, the dimensions
896 are added/removed from the inner side (right) instead of outer side (left).
897- Improved index out of range errors.
898- Fixed function `concat` not accepting a `BigNumber` for parameter `dim`.
899- Function `squeeze` now squeezes both inner and outer singleton dimensions.
900- Output of getting a matrix subset is not automatically squeezed anymore
901 except for scalar output.
902- Renamed `FunctionNode` to `FunctionAssignmentNode`, and renamed `ParamsNode`
903 to `FunctionNode` for more clarity.
904- Fixed broken auto completion in CLI.
905- Some minor fixes.
906
907
908## 2014-07-01, version 0.25.0
909
910- The library now immediately returns a default instance of mathjs, there is
911 no need to instantiate math.js in a separate step unless one ones to set
912 configuration options:
913
914 // instead of:
915 var mathjs = require('mathjs'), // load math.js
916 math = mathjs(); // create an instance
917
918 // just do:
919 var math = require('mathjs');
920- Implemented support for implicit multiplication, like `math.eval('2a', {a:3})`
921 and `math.eval('(2+3)(1-3)')`. This changes behavior of matrix indexes as
922 well: an expression like `[...][...]` is not evaluated as taking a subset of
923 the first matrix, but as an implicit multiplication of two matrices.
924- Removed utility function `ifElse`. This function is redundant now the
925 expression parser has a conditional operator `a ? b : c`.
926- Fixed a bug with multiplying a number with a temperature,
927 like `math.eval('10 * celsius')`.
928- Fixed a bug with symbols having value `undefined` not being evaluated.
929
930
931## 2014-06-20, version 0.24.1
932
933- Something went wrong with publishing on npm.
934
935
936## 2014-06-20, version 0.24.0
937
938- Added constant `null`.
939- Functions `equal` and `unequal` support `null` and `undefined` now.
940- Function `typeof` now recognizes regular expressions as well.
941- Objects `Complex`, `Unit`, and `Help` now return their string representation
942 when calling `.valueOf()`.
943- Changed the default number of significant digits for BigNumbers from 20 to 64.
944- Changed the behavior of the conditional operator (a ? b : c) to lazy
945 evaluating.
946- Fixed imported, wrapped functions not accepting `null` and `undefined` as
947 function arguments.
948
949
950## 2014-06-10, version 0.23.0
951
952- Renamed some functions (everything now has a logical, camel case name):
953 - Renamed functions `edivide`, `emultiply`, and `epow` to `dotDivide`,
954 `dotMultiply`, and `dotPow` respectively.
955 - Renamed functions `smallereq` and `largereq` to `smallerEq` and `largerEq`.
956 - Renamed function `unary` to `unaryMinus` and added support for strings.
957- `end` is now a reserved keyword which cannot be used as function or symbol
958 name in the expression parser, and is not allowed in the scope against which
959 an expression is evaluated.
960- Implemented function `unaryPlus` and unary plus operator.
961- Implemented function `deepEqual` for matrix comparisons.
962- Added constant `phi`, the golden ratio (`phi = 1.618...`).
963- Added constant `version`, returning the version number of math.js as string.
964- Added unit `drop` (`gtt`).
965- Fixed not being able to load math.js using AMD/require.js.
966- Changed signature of `math.parse(expr, nodes)` to `math.parse(expr, options)`
967 where `options: {nodes: Object.<String, Node>}`
968- Removed matrix support from conditional function `ifElse`.
969- Removed automatic assignment of expression results to variable `ans`.
970 This functionality can be restored by pre- or postprocessing every evaluation,
971 something like:
972
973 function evalWithAns (expr, scope) {
974 var ans = math.eval(expr, scope);
975 if (scope) {
976 scope.ans = ans;
977 }
978 return ans;
979 }
980
981
982## 2014-05-22, version 0.22.0
983
984- Implemented support to export expressions to LaTeX. Thanks Niels Heisterkamp
985 (@nheisterkamp).
986- Output of matrix multiplication is now consistently squeezed.
987- Added reference documentation in the section /docs/reference.
988- Fixed a bug in multiplying units without value with a number (like `5 * cm`).
989- Fixed a bug in multiplying two matrices containing vectors (worked fine for
990 arrays).
991- Fixed random functions not accepting Matrix as input, and always returning
992 a Matrix as output.
993
994
995## 2014-05-13, version 0.21.1
996
997- Removed `crypto` library from the bundle.
998- Deprecated functions `Parser.parse` and `Parser.compile`. Use
999 `math.parse` and `math.compile` instead.
1000- Fixed function `add` not adding strings and matrices element wise.
1001- Fixed parser not being able to evaluate an exponent followed by a unary minus
1002 like `2^-3`, and a transpose followed by an index like `[3]'[1]`.
1003
1004
1005## 2014-04-24, version 0.21.0
1006
1007- Implemented trigonometric hyperbolic functions `cosh`, `coth`, `csch`,
1008 `sech`, `sinh`, `tanh`. Thanks Rogelio J. Baucells (@rjbaucells).
1009- Added property `type` to all expression nodes in an expression tree.
1010- Fixed functions `log`, `log10`, `pow`, and `sqrt` not supporting complex
1011 results from BigNumber input (like `sqrt(bignumber(-4))`).
1012
1013
1014## 2014-04-16, version 0.20.0
1015
1016- Switched to module `decimal.js` for BigNumber support, instead of
1017 `bignumber.js`.
1018- Implemented support for polar coordinates to the `Complex` datatype.
1019 Thanks Finn Pauls (@finnp).
1020- Implemented BigNumber support for functions `exp`, `log`, and `log10`.
1021- Implemented conditional operator `a ? b : c` in expression parser.
1022- Improved floating point comparison: the functions now check whether values
1023 are nearly equal, against a configured maximum relative difference `epsilon`.
1024 Thanks Rogelio J. Baucells (@rjbaucells).
1025- Implemented function `norm`. Thanks Rogelio J. Baucells (@rjbaucells).
1026- Improved function `ifElse`, is now specified for special data types too.
1027- Improved function `det`. Thanks Bryan Cuccioli (@bcuccioli).
1028- Implemented `BigNumber` support for functions `det` and `diag`.
1029- Added unit alias `lbs` (pound mass).
1030- Changed configuration option `decimals` to `precision` (applies to BigNumbers
1031 only).
1032- Fixed support for element-wise comparisons between a string and a matrix.
1033- Fixed: expression parser now trows IndexErrors with one-based indices instead
1034 of zero-based.
1035- Minor bug fixes.
1036
1037
1038## 2014-03-30, version 0.19.0
1039
1040- Implemented functions `compare`, `sum`, `prod`, `var`, `std`, `median`.
1041- Implemented function `ifElse` Thanks @mtraynham.
1042- Minor bug fixes.
1043
1044
1045## 2014-02-15, version 0.18.1
1046
1047- Added unit `feet`.
1048- Implemented function `compile` (shortcut for parsing and then compiling).
1049- Improved performance of function `pow` for matrices. Thanks @hamadu.
1050- Fixed broken auto completion in the command line interface.
1051- Fixed an error in function `combinations` for large numbers, and
1052 improved performance of both functions `combinations` and `permutations`.
1053
1054
1055## 2014-01-18, version 0.18.0
1056
1057- Changed matrix index notation of expression parser from round brackets to
1058 square brackets, for example `A[1, 1:3]` instead of `A(1, 1:3)`.
1059- Removed need to use the `function` keyword for function assignments in the
1060 expression parser, you can define a function now like `f(x) = x^2`.
1061- Implemented a compilation step in the expression parser: expressions are
1062 compiled into JavaScript, giving much better performance (easily 10x as fast).
1063- Renamed unit conversion function and operator `in` to `to`. Operator `in` is
1064 still available in the expression parser as an alias for `to`. Added unit
1065 `in`, an abbreviation for `inch`. Thanks Elijah Insua (@tmpvar).
1066- Added plurals and aliases for units.
1067- Implemented an argument `includeEnd` for function `range` (false by default).
1068- Ranges in the expression parser now support big numbers.
1069- Implemented functions `permutations` and `combinations`.
1070 Thanks Daniel Levin (@daniel-levin).
1071- Added lower case abbreviation `l` for unit litre.
1072
1073
1074## 2013-12-19, version 0.17.1
1075
1076- Fixed a bug with negative temperatures.
1077- Fixed a bug with prefixes of units squared meter `m2` and cubic meter `m3`.
1078
1079
1080## 2013-12-12, version 0.17.0
1081
1082- Renamed and flattened configuration settings:
1083 - `number.defaultType` is now `number`.
1084 - `number.precision` is now `decimals`.
1085 - `matrix.defaultType` is now `matrix`.
1086- Function `multiply` now consistently outputs a complex number on complex input.
1087- Fixed `mod` and `in` not working as function (only as operator).
1088- Fixed support for old browsers (IE8 and older), compatible when using es5-shim.
1089- Fixed support for Java's ScriptEngine.
1090
1091
1092## 2013-11-28, version 0.16.0
1093
1094- Implemented BigNumber support for arbitrary precision calculations.
1095 Added settings `number.defaultType` and `number.precision` to configure
1096 big numbers.
1097- Documentation is extended.
1098- Removed utility functions `isScalar`, `toScalar`, `isVector`, `toVector`
1099 from `Matrix` and `Range`. Use `math.squeeze` and `math.size` instead.
1100- Implemented functions `get` and `set` on `Matrix`, for easier and faster
1101 retrieval/replacement of elements in a matrix.
1102- Implemented function `resize`, handling matrices, scalars, and strings.
1103- Functions `ones` and `zeros` now return an empty matrix instead of a
1104 number 1 or 0 when no arguments are provided.
1105- Implemented functions `min` and `max` for `Range` and `Index`.
1106- Resizing matrices now leaves new elements undefined by default instead of
1107 filling them with zeros. Function `resize` now has an extra optional
1108 parameter `defaultValue`.
1109- Range operator `:` in expression parser has been given a higher precedence.
1110- Functions don't allow arguments of unknown type anymore.
1111- Options be set when constructing a math.js instance or using the new function
1112 `config(options`. Options are no longer accessible via `math.options`.
1113- Renamed `scientific` notation to `exponential` in function `format`.
1114- Function `format` outputs exponential notation with positive exponents now
1115 always with `+` sign, so outputs `2.1e+3` instead of `2.1e3`.
1116- Fixed function `squeeze` not being able squeeze into a scalar.
1117- Some fixes and performance improvements in the `resize` and `subset`
1118 functions.
1119- Function `size` now adheres to the option `matrix.defaultType` for scalar
1120 input.
1121- Minor bug fixes.
1122
1123
1124## 2013-10-26, version 0.15.0
1125
1126- Math.js must be instantiated now, static calls are no longer supported. Usage:
1127 - node.js: `var math = require('mathjs')();`
1128 - browser: `var math = mathjs();`
1129- Implemented support for multiplying vectors with matrices.
1130- Improved number formatting:
1131 - Function `format` now support various options: precision, different
1132 notations (`fixed`, `scientific`, `auto`), and more.
1133 - Numbers are no longer rounded to 5 digits by default when formatted.
1134 - Implemented a function `format` for `Matrix`, `Complex`, `Unit`, `Range`,
1135 and `Selector` to format using options.
1136 - Function `format` does only stringify values now, and has a new parameter
1137 `precision` to round to a specific number of digits.
1138 - Removed option `math.options.precision`,
1139 use `math.format(value [, precision])` instead.
1140 - Fixed formatting numbers as scientific notation in some cases returning
1141 a zero digit left from the decimal point. (like "0.33333e8" rather than
1142 "3.3333e7"). Thanks @husayt.
1143- Implemented a function `print` to interpolate values in a template string,
1144 this functionality was moved from the function `format`.
1145- Implemented statistics function `mean`. Thanks Guillermo Indalecio Fernandez
1146 (@guillermobox).
1147- Extended and changed `max` and `min` for multi dimensional matrices: they now
1148 return the maximum and minimum of the flattened array. An optional second
1149 argument `dim` allows to calculate the `max` or `min` for specified dimension.
1150- Renamed option `math.options.matrix.default` to
1151 `math.options.matrix.defaultType`.
1152- Removed support for comparing complex numbers in functions `smaller`,
1153 `smallereq`, `larger`, `largereq`. Complex numbers cannot be ordered.
1154
1155
1156## 2013-10-08, version 0.14.0
1157
1158- Introduced an option `math.options.matrix.default` which can have values
1159 `matrix` (default) or `array`. This option is used by the functions `eye`,
1160 `ones`, `range`, and `zeros`, to determine the type of matrix output.
1161- Getting a subset of a matrix will automatically squeeze the resulting subset,
1162 setting a subset of a matrix will automatically unsqueeze the given subset.
1163- Removed concatenation of nested arrays in the expression parser.
1164 You can now input nested arrays like in JavaScript. Matrices can be
1165 concatenated using the function `concat`.
1166- The matrix syntax `[...]` in the expression parser now creates 1 dimensional
1167 matrices by default. `math.eval('[1,2,3,4]')` returns a matrix with
1168 size `[4]`, `math.eval('[1,2;3,4]')` returns a matrix with size `[2,2]`.
1169- Documentation is restructured and extended.
1170- Fixed non working operator `mod` (modulus operator).
1171
1172
1173## 2013-09-03, version 0.13.0
1174
1175- Implemented support for booleans in all relevant functions.
1176- Implemented functions `map` and `forEach`. Thanks Sebastien Piquemal (@sebpic).
1177- All construction functions can be used to convert the type of variables,
1178 also element-wise for all elements in an Array or Matrix.
1179- Changed matrix indexes of the expression parser to one-based with the
1180 upper-bound included, similar to most math applications. Note that on a
1181 JavaScript level, math.js uses zero-based indexes with excluded upper-bound.
1182- Removed support for scalars in the function `subset`, it now only supports
1183 Array, Matrix, and String.
1184- Removed the functions `get` and `set` from a selector, they are a duplicate
1185 of the function `subset`.
1186- Replaced functions `get` and `set` of `Matrix` with a single function
1187 `subset`.
1188- Some moving around with code and namespaces:
1189 - Renamed namespace `math.expr` to `math.expression` (contains Scope, Parser,
1190 node objects).
1191 - Renamed namespace `math.docs` to `math.expression.docs`.
1192 - Moved `math.expr.Selector` to `math.chaining.Selector`.
1193- Fixed some edge cases in functions `lcm` and `xgcd`.
1194
1195
1196## 2013-08-22, version 0.12.1
1197
1198- Fixed outdated version of README.md.
1199- Fixed a broken unit test.
1200
1201
1202## 2013-08-22, version 0.12.0
1203
1204- Implemented functions `random([min, max])`, `randomInt([min, max])`,
1205 `pickRandom(array)`. Thanks Sebastien Piquemal (@sebpic).
1206- Implemented function `distribution(name)`, generating a distribution object
1207 with functions `random`, `randomInt`, `pickRandom` for different
1208 distributions. Currently supporting `uniform` and `normal`.
1209- Changed the behavior of `range` to exclude the upper bound, so `range(1, 4)`
1210 now returns `[1, 2, 3]` instead of `[1, 2, 3, 4]`.
1211- Changed the syntax of `range`, which is now `range(start, end [, step])`
1212 instead of `range(start, [step, ] end)`.
1213- Changed the behavior of `ones` and `zeros` to geometric dimensions, for
1214 example `ones(3)` returns a vector with length 3, filled with ones, and
1215 `ones(3,3)` returns a 2D array with size [3, 3].
1216- Changed the return type of `ones` and `zeros`: they now return an Array when
1217 arguments are Numbers or an Array, and returns a Matrix when the argument
1218 is a Matrix.
1219- Change matrix index notation in parser from round brackets to square brackets,
1220 for example `A[0, 0:3]`.
1221- Removed the feature introduced in v0.10.0 to automatically convert a complex
1222 value with an imaginary part equal to zero to a number.
1223- Fixed zeros being formatted as null. Thanks @TimKraft.
1224
1225
1226## 2013-07-23, version 0.11.1
1227
1228- Fixed missing development dependency
1229
1230
1231## 2013-07-23, version 0.11.0
1232
1233- Changed math.js from one-based to zero-based indexes.
1234 - Getting and setting matrix subset is now zero-based.
1235 - The dimension argument in function `concat` is now zero-based.
1236- Improvements in the string output of function help.
1237- Added constants `true` and `false`.
1238- Added constructor function `boolean`.
1239- Fixed function `select` not accepting `0` as input.
1240 Thanks Elijah Manor (@elijahmanor).
1241- Parser now supports multiple unary minus operators after each other.
1242- Fixed not accepting empty matrices like `[[], []]`.
1243- Some fixes in the end user documentation.
1244
1245
1246## 2013-07-08, version 0.10.0
1247
1248- For complex calculations, all functions now automatically replace results
1249 having an imaginary part of zero with a Number. (`2i * 2i` now returns a
1250 Number `-4` instead of a Complex `-4 + 0i`).
1251- Implemented support for injecting custom node handlers in the parser. Can be
1252 used for example to implement a node handler for plotting a graph.
1253- Implemented end user documentation and a new `help` function.
1254- Functions `size` and `squeeze` now return a Matrix instead of an Array as
1255 output on Matrix input.
1256- Added a constant tau (2 * pi). Thanks Zak Zibrat (@palimpsests).
1257- Renamed function `unaryminus` to `unary`.
1258- Fixed a bug in determining node dependencies in function assignments.
1259
1260
1261## 2013-06-14, version 0.9.1
1262
1263- Implemented element-wise functions and operators: `emultiply` (`x .* y`),
1264 `edivide` (`x ./ y`), `epow` (`x .^ y`).
1265- Added constants `Infinity` and `NaN`.
1266- Removed support for Workspace to keep the library focused on its core task.
1267- Fixed a bug in the Complex constructor, not accepting NaN values.
1268- Fixed division by zero in case of pure complex values.
1269- Fixed a bug in function multiply multiplying a pure complex value with
1270 Infinity.
1271
1272
1273## 2013-05-29, version 0.9.0
1274
1275- Implemented function `math.parse(expr [,scope])`. Optional parameter scope can
1276 be a plain JavaScript Object containing variables.
1277- Extended function `math.expr(expr [, scope])` with an additional parameter
1278 `scope`, similar to `parse`. Example: `math.eval('x^a', {x:3, a:2});`.
1279- Implemented function `subset`, to get or set a subset from a matrix, string,
1280 or other data types.
1281- Implemented construction functions number and string (mainly useful inside
1282 the parser).
1283- Improved function `det`. Thanks Bryan Cuccioli (@bcuccioli).
1284- Moved the parse code from prototype math.expr.Parser to function math.parse,
1285 simplified Parser a little bit.
1286- Strongly simplified the code of Scope and Workspace.
1287- Fixed function mod for negative numerators, and added error messages in case
1288 of wrong input.
1289
1290
1291## 2013-05-18, version 0.8.2
1292
1293- Extended the import function and some other minor improvements.
1294- Fixed a bug in merging one dimensional vectors into a matrix.
1295- Fixed a bug in function subtract, when subtracting a complex number from a
1296 real number.
1297
1298
1299## 2013-05-10, version 0.8.1
1300
1301- Fixed an npm warning when installing mathjs globally.
1302
1303
1304## 2013-05-10, version 0.8.0
1305
1306- Implemented a command line interface. When math.js is installed globally via
1307 npm, the application is available on your system as 'mathjs'.
1308- Implemented `end` keyword for index operator, and added support for implicit
1309 start and end (expressions like `a(2,:)` and `b(2:end,3:end-1)` are supported
1310 now).
1311- Function math.eval is more flexible now: it supports variables and multi-line
1312 expressions.
1313- Removed the read-only option from Parser and Scope.
1314- Fixed non-working unequal operator != in the parser.
1315- Fixed a bug in resizing matrices when replacing a subset.
1316- Fixed a bug in updating a subset of a non-existing variable.
1317- Minor bug fixes.
1318
1319
1320## 2013-05-04, version 0.7.2
1321
1322- Fixed method unequal, which was checking for equality instead of inequality.
1323 Thanks @FJS2.
1324
1325
1326## 2013-04-27, version 0.7.1
1327
1328- Improvements in the parser:
1329 - Added support for chained arguments.
1330 - Added support for chained variable assignments.
1331 - Added a function remove(name) to remove a variable from the parsers scope.
1332 - Renamed nodes for more consistency and to resolve naming conflicts.
1333 - Improved stringification of an expression tree.
1334 - Some simplifications in the code.
1335 - Minor bug fixes.
1336- Fixed a bug in the parser, returning NaN instead of throwing an error for a
1337 number with multiple decimal separators like `2.3.4`.
1338- Fixed a bug in Workspace.insertAfter.
1339- Fixed: math.js now works on IE 6-8 too.
1340
1341
1342## 2013-04-20, version 0.7.0
1343
1344- Implemented method `math.eval`, which uses a readonly parser to evaluate
1345 expressions.
1346- Implemented method `xgcd` (extended eucledian algorithm). Thanks Bart Kiers
1347 (@bkiers).
1348- Improved math.format, which now rounds values to a maximum number of digits
1349 instead of decimals (default is 5 digits, for example `math.format(math.pi)`
1350 returns `3.1416`).
1351- Added examples.
1352- Changed methods square and cube to evaluate matrices element wise (consistent
1353 with all other methods).
1354- Changed second parameter of method import to an object with options.
1355- Fixed method math.typeof on IE.
1356- Minor bug fixes and improvements.
1357
1358
1359## 2013-04-13, version 0.6.0
1360
1361- Implemented chained operations via method math.select(). For example
1362 `math.select(3).add(4).subtract(2).done()` will return `5`.
1363- Implemented methods gcd and lcm.
1364- Implemented method `Unit.in(unit)`, which creates a clone of the unit with a
1365 fixed representation. For example `math.unit('5.08 cm').in('inch')` will
1366 return a unit which string representation always is in inch, thus `2 inch`.
1367 `Unit.in(unit)` is the same as method `math.in(x, unit)`.
1368- Implemented `Unit.toNumber(unit)`, which returns the value of the unit when
1369 represented with given unit. For example
1370 `math.unit('5.08 cm').toNumber('inch')` returns the number `2`, as the
1371 representation of the unit in inches has 2 as value.
1372- Improved: method `math.in(x, unit)` now supports a string as second parameter,
1373 for example `math.in(math.unit('5.08 cm'), 'inch')`.
1374- Split the end user documentation of the parser functions from the source
1375 files.
1376- Removed function help and the built-in documentation from the core library.
1377- Fixed constant i being defined as -1i instead of 1i.
1378- Minor bug fixes.
1379
1380
1381## 2013-04-06, version 0.5.0
1382
1383- Implemented data types Matrix and Range.
1384- Implemented matrix methods clone, concat, det, diag, eye, inv, ones, size,
1385 squeeze, transpose, zeros.
1386- Implemented range operator `:`, and transpose operator `'` in parser.
1387- Changed: created construction methods for easy object creation for all data
1388 types and for the parser. For example, a complex value is now created
1389 with `math.complex(2, 3)` instead of `new math.Complex(2, 3)`, and a parser
1390 is now created with `math.parser()` instead of `new math.parser.Parser()`.
1391- Changed: moved all data types under the namespace math.type, and moved the
1392 Parser, Workspace, etc. under the namespace math.expr.
1393- Changed: changed operator precedence of the power operator:
1394 - it is now right associative instead of left associative like most scripting
1395 languages. So `2^3^4` is now calculated as `2^(3^4)`.
1396 - it has now higher precedence than unary minus most languages, thus `-3^2` is
1397 now calculated as `-(3^2)`.
1398- Changed: renamed the parsers method 'put' into 'set'.
1399- Fixed: method 'in' did not check for units to have the same base.
1400
1401
1402## 2013-03-16, version 0.4.0
1403
1404- Implemented Array support for all methods.
1405- Implemented Array support in the Parser.
1406- Implemented method format.
1407- Implemented parser for units, math.Unit.parse(str).
1408- Improved parser for complex values math.Complex.parse(str);
1409- Improved method help: it now evaluates the examples.
1410- Fixed: a scoping issue with the Parser when defining functions.
1411- Fixed: method 'typeof' was not working well with minified and mangled code.
1412- Fixed: errors in determining the best prefix for a unit.
1413
1414
1415## 2013-03-09, version 0.3.0
1416
1417- Implemented Workspace
1418- Implemented methods cot, csc, sec.
1419- Implemented Array support for methods with one parameter.
1420
1421
1422## 2013-02-25, version 0.2.0
1423
1424- Parser, Scope, and expression tree with Nodes implemented.
1425- Implemented method import which makes it easy to extend math.js.
1426- Implemented methods arg, conj, cube, equal, factorial, im, largereq,
1427 log(x, base), log10, mod, re, sign, smallereq, square, unequal.
1428
1429
1430## 2013-02-18, version 0.1.0
1431
1432- Reached full compatibility with Javascripts built-in Math library.
1433- More functions implemented.
1434- Some bugfixes.
1435
1436
1437## 2013-02-16, version 0.0.2
1438
1439- All constants of Math implemented, plus the imaginary unit i.
1440- Data types Complex and Unit implemented.
1441- First set of functions implemented.
1442
1443
1444## 2013-02-15, version 0.0.1
1445
1446- First publish of the mathjs package. (package is still empty)
1447
\No newline at end of file