- Fixed #924: a regression in
simplify
not accepting the signaturesimplify(expr, rules, scope)
anymore. Thanks @firepick1. - Fixed missing parenthesis when stringifying expressions containing implicit multiplications (see #922). Thanks @FSMaxB.
- For security reasons, type checking is now done in a more strict
way using functions like
isComplex(x)
instead of duck type checking likex && x.isComplex === true
. - Fixed #915: No access to property "name".
- Fixed #901: Simplify units when calling
unit.toNumeric()
. Thanks @AlexanderBeyn. - Fixed
toString
of a parsed expression tree containing an immediately invoked function assignment not being wrapped in parenthesis (for example(f(x) = x^2)(4)
).
- Significant performance improvements in
math.simplify
. Thanks @firepick1. - Improved API for
math.simplify
, optionally pass a scope with variables which are resolved, see #907. Thanks @firepick1. - Fixed #912: math.js didn't work on IE10 anymore (regression since 3.15.0).
- Added support for the dollar character
$
in symbol names (see #895). - Allow objects with prototypes as scope again in the expression parser, this was disabled for security reasons some time ago. See #888, #899. Thanks @ThomasBrierley.
- Fixed #846: Issues in the functions
map
,forEach
, andfilter
when used in the expression parser:- Not being able to use a function assignment as inline expression for the callback function.
- Not being able to pass an inline expression as callback for
map
andforEach
. - Index and original array/matrix not passed in
map
andfilter
.
- Upgraded to
[email protected]
- Fixed #891 using BigNumbers not working in browser environments.
- Reverted to
[email protected]
, there is an issue with4.0.1
in the browser.
- Implemented set methods
setCartesian
,setDifference
,setDistinct
,setIntersect
,setIsSubset
,setPowerset
,setSize
. Thanks @Nekomajin42. - Implemented method
toHTML
on nodes. Thanks @Nekomajin42. - Implemented
compareNatural
andsort([...], 'natural')
. - Upgraded dependencies to the latest versions:
[email protected]
[email protected]
[email protected]
[email protected]
- And all devDependencies.
- Fixed #865:
splitUnit
can now deal with round-off errors. Thanks @ericman314. - Fixed #876: incorrect definition for unit
erg
. Thanks @pjhampton. - More informative error message when using single quotes instead of double quotes around a string. Thanks @HarrySarson.
- Fixed a bug in function
intersection
of line and plane. Thanks @viclai. - Fixed security vulnerabilities.
- Disabled function
chain
inside the expression parser for security reasons (it's not needed there anyway). - Fixed #856: function
subset
not returning non-primitive scalars from Arrays correctly. (likemath.eval('arr[1]', {arr: [math.bignumber(2)]})
. - Fixed #861: physical constants not available in the expression parser.
- Fixed creating units with an alias not working within the expression parser.
- Fixed security vulnerabilities. Thanks Sam.
- Command line application can now evaluate inline expressions
like
mathjs 1+2
. Thanks @slavaGanzin. - Function
derivative
now supportsabs
. Thanks @tetslee. - Function
simplify
now supports BigNumbers. Thanks @tetslee. - Prevent against endless loops in
simplify
. Thanks @tetslee. - Fixed #813: function
simplify
converting small numbers to inexact Fractions. Thanks @tetslee. - Fixed #838: Function
simplify
now supports constants likee
. Thanks @tetslee.
- Fixed security vulnerabilities. Thanks Dan and Sam.
- Added a rocket trajectory optimization example.
- Fixed #804
- Improved handling of powers of
Infinity
. Thanks @HarrySarson. - Fixed wrong formatting of complex NaN.
- Improved handling of powers of
- Fixed security vulnerabilities in the expression parser. Thanks Sam and Dan.
- Implemented QR decomposition, function
math.qr
. Thanks @HarrySarson. - Fixed #824: Calling
math.random()
freezes IE and node.js.
- More security measures in the expression parser.
WARNING: the behavior of the expression parser is now more strict,
some undocumented features may not work any longer.
- Accessing and assigning properties is now only allowed on plain objects, not on classes, arrays, and functions anymore.
- Accessing methods is restricted to a set of known, safe methods.
- Fixed a security vulnerability in the expression parser. Thanks @xfix.
- Fixed a security vulnerability in the expression parser. Thanks @xfix.
- Fixed a security vulnerability in the expression parser. Thanks @xfix.
- Fixed security vulnerabilities in the expression parser. Thanks Joe Vennix and @xfix.
- Implemented method Unit.toSI() to convert a unit to base SI units. Thanks @ericman314.
- Fixed #821, #822: security vulnerabilities in the expression parser. Thanks @comex and @xfix.
- More security fixes related to the ones fixed in
v3.10.2
.
- Fixed a security vulnerability in the expression parser allowing execution of arbitrary JavaScript. Thanks @CapacitorSet and @denvit.
- Fixed
xgcd
for negative values. Thanks @litmit. - Fixed #807: function transform of existing functions not being removed when overriding such a function.
- Implemented function
reshape
. Thanks @patgrasso and @ericman314. - Implemented configuration option
seedRandom
for deterministic random numbers. Thanks @morsecodist. - Small fixes in the docs. Thanks @HarrySarson.
- Dropped support for component package manager (which became deprecated about one and a half year ago).
- Fixed #797: issue with production builds of React Native projects.
- Fixed
math.round
not accepting inputsNaN
,Infinity
,-Infinity
. - Upgraded all dependencies.
- Fixed #795: Parse error in case of a multi-line expression with just comments.
- Fixed #789: Math.js not supporting conversion of
string
toBigNumber
,Fraction
, orComplex
number. - Fixed #790: Expression parser did not pass function arguments of enclosing
functions via
scope
to functions havingrawArgs = true
. - Small fixes in the docs. Thanks @HarrySarson.
- Implemented support for algebra: powerful new functions
simplify
andderivative
. Thanks @ericman314, @tetslee, and @BigFav. - Implemented Kronecker Product
kron
. Thanks @adamisntdead. - Reverted
FunctionNode
not accepting a string as function name anymore. - Fixed #765:
FunctionAssignmentNode.toString()
returning a string incompatible with the function assignment syntax.
- Implemented function
mad
(median absolute deviation). Thanks @ruhleder. - Fixed #762: expression parser failing to invoke a function returned by a function.
- Functions
add
andmultiply
now accept more than two arguments. See #739. OperatorNode
now supports more than two arguments. See #739. Thanks @FSMaxB.- Implemented a method
Node.cloneDeep
for the expression nodes. See #745. - Fixed a bug in
Node.clone()
not cloning implicit multiplication correctly. Thanks @FSMaxB. - Fixed #737: Improved algorithm determining the best prefix for units.
It will now retain the original unit like
1 cm
when close enough, instead of returning10 mm
. Thanks @ericman314. - Fixed #732: Allow letter-like unicode characters like Ohm
\u2126
. - Fixed #749: Units
rad
,deg
, andgrad
can now have prefixes likemillirad
. - Some fixes in the docs and comments of examples. Thanks @HarrySarson.
- Implemented method
Node.equals(other)
for all nodes of the expression parser. - Implemented BigNumber support in function
arg()
. - Command Line Interface loads faster.
- Implicit conversions between Fractions and BigNumbers throw a neat error now (See #710).
- Implemented function
erf()
. THanks @patgrasso. - Extended function
cross()
to support n-d vectors. Thanks @patgrasso. - Extended function
pickRandom
with the option to pick multiple values from an array and give the values weights:pickRandom(possibles, number, weights)
. Thanks @woylie. - Parser now exposes test functions like
isAlpha
which can be replaced in order to adjust the allowed characters in variables names (See #715). - Fixed #727: Parser not throwing an error for invalid implicit multiplications
like
-2 2
and2^3 4
(right after the second value of an operator). - Fixed #688: Describe allowed variable names in the docs.
- Some more fixes regarding numbers ending with a decimal mark (like
2.
).
- Fixed numbers ending with a decimal mark (like
2.
) not being supported by the parser, solved the underlying ambiguity in the parser. See #707, #711.
- Removed a left over console.log statement. Thanks @eknkc.
- Comments of expressions are are now stored in the parsed nodes. See #690.
- Fixed function
print
not accepting an Object with formatting options as third parameter Thanks @ThomasBrierley. - Fixed #707: The expression parser no longer accepts numbers ending with a dot
like
2.
.
- Fixed broken bundle files (
dist/math.js
,dist/math.min.js
). - Fixed some layout issues in the function reference docs.
- Implemented support for custom units using
createUnit
. Thanks @ericman314. - Implemented function
splitUnits
. Thanks @ericman314. - Implemented function
isPrime
. Thanks @MathBunny.
- Implemented function
isNaN
. - Function
math.filter
now passes three arguments to the callback function: value, index, and array. - Removed the check on the number of arguments from functions defined in the expression parser (see #665).
- Fixed #665: functions
map
,forEach
, andfilter
now invoke callbacks which are a typed-function with the correct number of arguments.
- Fixed #651: unable to perform calculations on "Unit-less" units.
- Fixed matrix.subset mutating the replacement matrix when unsqueezing it.
- Implemented #644: method
Parser.getAll()
to retrieve all defined variables. - Upgraded dependencies ([email protected], [email protected], [email protected]).
- Fixed #601: Issue with unnamed typed-functions by upgrading to typed-function v0.10.4.
- Fixed #636: More strict
toTex
templates, reckon with number of arguments. - Fixed #641: Bug in expression parser parsing implicit multiplication with wrong precedence in specific cases.
- Fixed #645: Added documentation about
engineering
notation of functionmath.format
.
- Using ES6 Math functions like
Math.sinh
,Math.cbrt
,Math.sign
, etc when available. - Fixed #631: unit aliases
weeks
,months
, andyears
where missing. - Fixed #632: problem with escaped backslashes at the end of strings.
- Fixed #635:
Node.toString
options where not passed to function arguments. - Fixed #629: expression parser throws an error when passing a number with decimal exponent instead of parsing them as implicit multiplication.
- Fixed #484, #555: inaccuracy of
math.sinh
for values between -1 and 1. - Fixed #625: Unit
in
(inch
) not always working due to ambiguity with the operatora in b
(alias ofa to b
).
- Fix broken bundle.
- Fix broken npm release.
- Fixed #621: a bug in parsing implicit multiplications like
(2)(3)+4
. - Fixed #623:
nthRoot
of zero with a negative root returned0
instead ofInfinity
. - Throw an error when functions
min
,max
,mean
, ormedian
are invoked with multiple matrices as arguments (see #598).
- Hide multiplication operator by default when outputting
toTex
andtoString
for implicit multiplications. Implemented and option to output the operator. - Implemented unit
kip
and aliaskips
. Thanks @hgupta9. - Added support for prefixes for units
mol
andmole
. Thanks @stu-blair. - Restored support for implicit multiplications like
2(3+4)
and(2+3)(4+5)
. - Some improvements in the docs.
- Added automatic conversions from
boolean
andnull
toFraction
, and conversions fromFraction
toComplex
.
-
More restricted support for implicit multiplication in the expression parser:
(...)(...)
is now evaluated as a function invocation, and[...][...]
as a matrix subset. -
Matrix multiplication no longer squeezes scalar outputs to a scalar value, but leaves them as they are: a vector or matrix containing a single value. See #529.
-
Assignments in the expression parser now return the assigned value rather than the created or updated object (see #533). Example:
A = eye(3) A[1,1] = 2 # this assignment now returns 2 instead of A
-
Expression parser now supports objects. This involves a refactoring and extension in expression nodes:
- Implemented new node
ObjectNode
. - Refactored
AssignmentNode
,UpdateNode
, andIndexNode
are refactored intoAccessorNode
,AssignmentNode
, andIndexNode
having a different API.
- Implemented new node
-
Upgraded the used BigNumber library
decimal.js
to v5. Replaced the trigonometric functions of math.js with those provided in decimal.js v5. This can give slightly different behavior qua round-off errors. -
Replaced the internal
Complex.js
class with thecomplex.js
library created by @infusion. -
Entries in a matrix (typically numbers, BigNumbers, Units, etc) are now considered immutable, they are no longer copied when performing operations on the entries, improving performance.
-
Implemented nearly equal comparison for relational functions (
equal
,larger
,smaller
, etc.) when using BigNumbers. -
Changed the casing of the configuration options
matrix
(Array
orMatrix
) andnumber
(number
,BigNumber
,Fraction
) such that they now match the type returned bymath.typeof
. Wrong casing gives a console warning but will still work. -
Changed the default config value for
epsilon
from1e-14
to1e-12
, see #561.
- Extended function
pow
to return the real root for cubic roots of negative numbers. See #525, #482, #567. - Implemented support for JSON objects in the expression parser and the
function
math.format
. - Function
math.fraction
now supportsBigNumber
, and functionmath.bignumber
now supportsFraction
. - Expression parser now allows function and/or variable assignments inside
accessors and conditionals, like
A[x=2]
ora > 2 ? b="ok" : b="fail"
. - Command line interface:
- Outputs the variable name of assignments.
- Fixed not rounding BigNumbers to 14 digits like numbers.
- Fixed non-working autocompletion of user defined variables.
- Reorganized and extended docs, added docs on classes and more. Thanks @hgupta9.
- Added new units
acre
,hectare
,torr
,bar
,mmHg
,mmH2O
,cmH2O
, and added new aliasesacres
,hectares
,sqfeet
,sqyard
,sqmile
,sqmiles
,mmhg
,mmh2o
,cmh2o
. Thanks @hgupta9. - Fixed a bug in the toString method of an IndexNode.
- Fixed angle units
deg
,rad
,grad
,cycle
,arcsec
, andarcmin
not being defined as BigNumbers when configuring to use BigNumbers.
- Added more unit aliases for time:
secs
,mins
,hr
,hrs
. See #551. - Added support for doing operations with mixed
Fractions
andBigNumbers
. - Fixed #540:
math.intersect()
returning null in some cases. Thanks @void42. - Fixed #546: Cannot import BigNumber, Fraction, Matrix, Array. Thanks @brettjurgens.
- Implemented (complex) units
VA
andVAR
. - Implemented time units for weeks, months, years, decades, centuries, and millennia. Thanks @owenversteeg.
- Implemented new notation
engineering
in functionmath.format
. Thanks @johnmarinelli. - Fixed #523: In some circumstances, matrix subset returned a scalar instead of the correct subset.
- Fixed #536: A bug in an internal method used for sparse matrices.
- Implemented support for numeric types
Fraction
andBigNumber
in units. - Implemented new method
toNumeric
for units. - Implemented new units
arcsec
,arcsecond
,arcmin
,arcminute
. Thanks @devdevdata222. - Implemented new unit
Herts
(Hz
). Thanks @SwamWithTurtles. - Fixed #485: Scoping issue with variables both used globally as well as in a function definition.
- Fixed: Function
number
didn't supportFraction
as input.
- Fixed #502: Issue with
format
in some JavaScript engines. - Fixed #503: Removed trailing commas and the use of keyword
import
as property, as this gives issues with old JavaScript engines.
- Fixed #480:
nthRoot
not working on Internet Explorer (up to IE 11). - Fixed #490:
nthRoot
returning an error for negative values likenthRoot(-2, 3)
. - Fixed #489: an issue with initializing a sparse matrix without data. Thanks @Retsam.
- Fixed: #493: function
combinations
did not throw an exception for non-integer values ofk
. - Fixed: function
import
did not override typed functions when the option override was set true. - Fixed: added functions
math.sparse
andmath.index
to the reference docs, they where missing. - Fixed: removed memoization from
gamma
andfactorial
functions, this could blow up memory.
- Added support in the expression parser for mathematical alphanumeric symbols in the expression parser: unicode range \u{1D400} to \u{1D7FF} excluding invalid code points.
- Extended function
distance
with more signatures. Thanks @kv-kunalvyas. - Fixed a bug in functions
sin
andcos
, which gave wrong results for BigNumber integer values around multiples of tau (i.e.sin(bignumber(7))
). - Fixed value of unit
stone
. Thanks @Esvandiary for finding the error.
- Implemented function
distance
. Thanks @devanp92. - Implemented support for Fractions in function
lcm
. Thanks @infusion. - Implemented function
cbrt
for numbers, complex numbers, BigNumbers, Units. - Implemented function
hypot
. - Upgraded to fraction.js v3.0.0.
- Fixed #450: issue with non sorted index in sparse matrices.
- Fixed #463, #322: inconsistent handling of implicit multiplication.
- Fixed #444: factorial of infinity not returning infinity.
- Units with powers (like
m^2
ands^-1
) now output with the best prefix. - Implemented support for units to
abs
,cube
,sign
,sqrt
,square
. Thanks @ericman314. - Implemented function
catalan
(Combinatorics). Thanks @devanp92. - Improved the
canDefineProperty
check to return false in case of IE8, which has a broken implementation ofdefineProperty
. Thanks @golmansax. - Fixed function
to
not working in case of a simplified unit. - Fixed #437: an issue with row swapping in
lup
, also affectinglusolve
.
- Fixed wrong values of the physical constants
speedOfLight
,molarMassC12
,
andmagneticFluxQuantum
. Thanks @ericman314 for finding two of them.
- Implemented derived units (like
110 km/h in m/s
). Thanks @ericman314. - Implemented support for electric units. Thanks @ericman314.
- Implemented about 50 physical constants like
speedOfLight
,gravity
, etc. - Implemented function
kldivergence
(Kullback-Leibler divergence). Thanks @saromanov. - Implemented function
mode
. Thanks @kv-kunalvyas. - Added support for unicode characters in the expression parser: greek letters and latin letters with accents. See #265.
- Internal functions
Unit.parse
andComplex.parse
now throw an Error instead of returning null when passing invalid input.
- Fixed operations with mixed fractions and numbers be converted to numbers instead of fractions.
- Large internal refactoring:
- performance improvements.
- allows to create custom bundles
- functions are composed using
typed-function
and are extensible
- Implemented support for fractions, powered by the library
fraction.js
. - Implemented matrix LU decomposition with partial pivoting and a LU based
linear equations solver (functions
lup
andlusolve
). Thanks @rjbaucells. - Implemented a new configuration option
predictable
, which can be set to true in order to ensure predictable function output types. - Implemented function
intersect
. Thanks @kv-kunalvyas. - Implemented support for adding
toTex
properties to custom functions. Thanks @FSMaxB. - Implemented support for complex values to
nthRoot
. Thanks @gangachris. - Implemented util functions
isInteger
,isNegative
,isNumeric
,isPositive
, andisZero
.
- String input is now converted to numbers by default for all functions.
- Adding two strings will no longer concatenate them, but will convert the strings to numbers and add them.
- Function
index
does no longer accept an array[start, end, step]
, but instead accepts an array with arbitrary index values. It also accepts aRange
object as input. - Function
typeof
no longer returns lower case names, but now returns lower case names for primitives (likenumber
,boolean
,string
), and upper-camel-case for non-primitives (likeArray
,Complex
,Function
). - Function
import
no longer supports a module name as argument. Instead, modules can be loaded using require:math.import(require('module-name'))
. - Function
import
has a new optionsilent
to ignore errors, and throws errors on duplicates by default. - Method
Node.compile()
no longer needsmath
to be passed as argument. - Reintroduced method
Node.eval([scope])
. - Function
sum
now returns zero when input is an empty array. Thanks @FSMAxB. - The size of Arrays is no longer validated. Matrices will validate this on creation.
- Fixed #397: Inaccuracies in nthRoot for very large values, and wrong results for very small values. (backported from v2)
- Fixed #405: Parser throws error when defining a function in a multiline expression.
- Implemented function
quantileSeq
andpartitionSelect
. Thanks @BigFav. - Implemented functions
stirlingS2
,bellNumbers
,composition
, andmultinomial
. Thanks @devanp92. - Improved the performance of
median
(see #373). Thanks @BigFav. - Extended the command line interface with a
mode
option to output either the expressions result, string representation, or tex representation. Thanks @FSMaxB. - Fixed #309: Function median mutating the input matrix. Thanks @FSMaxB.
- Fixed
Node.transform
not recursing over replaced parts of the node tree (see #349). - Fixed #381: issue in docs of
randomInt
.
- Improvements in
toTex
. Thanks @FSMaxB. - Fixed #328:
abs(0 + 0i)
evaluated toNaN
. - Fixed not being able to override lazy loaded constants.
- Fixed #313: parsed functions did not handle recursive calls correctly.
- Fixed #251: binary prefix and SI prefix incorrectly used for byte. Now
following SI standards (
1 KiB == 1024 B
,1 kB == 1000 B
). - Performance improvements in parsed functions.
- Fixed #316: a bug in rounding values when formatting.
- Fixed #317, #319: a bug in formatting negative values.
- Added unit
stone
(6.35 kg). - Implemented support for sparse matrices. Thanks @rjbaucells.
- Implemented BigNumber support for function
atan2
. Thanks @BigFav. - Implemented support for custom LaTeX representations. Thanks @FSMaxB.
- Improvements and bug fixes in outputting parentheses in
Node.toString
andNode.toTex
functions. Thanks @FSMaxB. - Fixed #291: function
format
sometimes returning exponential notation when it should return a fixed notation.
- Implemented trigonometric functions:
acosh
,acoth
,acsch
,asech
,asinh
,atanh
,acot
,acsc
,asec
. Thanks @BigFav. - Added BigNumber support for functions:
cot
,csc
,sec
,coth
,csch
,sech
. Thanks @BigFav. - Implemented support for serialization and deserialization of math.js data types.
- Fixed the calculation of
norm()
andabs()
for large complex numbers. Thanks @rjbaucells. - Fixed #281: improved formatting complex numbers. Round the real or imaginary part to zero when the difference is larger than the configured precision.
- Implemented BigNumber implementations of most trigonometric functions:
sin
,cos
,tan
,asin
,acos
,atan
,cosh
,sinh
,tanh
. Thanks @BigFav. - Implemented function
trace
. Thanks @pcorey. - Faster loading of BigNumber configuration with a high precision by lazy
loading constants like
pi
ande
. - Fixed constants
NaN
andInfinity
not being BigNumber objects when BigNumbers are configured. - Fixed missing parentheses in the
toTex
representation of functionpermutations
. - Some minor fixes in the docs. Thanks @KenanY.
- Support for bitwise operations
bitAnd
,bitNot
,bitOr
,bitXor
,leftShift
,rightArithShift
, andrightLogShift
. Thanks @BigFav. - Support for boolean operations
and
,not
,or
,xor
. Thanks @BigFav. - Support for
gamma
function. Thanks @BigFav. - Converting a unit without value will now result in a unit with value,
i.e.
inch in cm
will return2.54 cm
instead ofcm
. - Improved accuracy of
sinh
and complexcos
andsin
. Thanks @pavpanchekha. - Renamed function
select
tochain
. The old functionselect
will remain functional until math.js v2.0. - Upgraded to decimal.js v4.0.1 (BigNumber library).
- Fixed Unit divided by Number returning zero.
- Fixed BigNumber downgrading to Number for a negative base in
pow
. - Fixed some typos in error messaging (thanks @andy0130tw) and docs.
- Implemented functions
dot
(dot product),cross
(cross product), andnthRoot
. - Officially opened up the API of expression trees:
- Documented the API.
- Implemented recursive functions
clone
,map
,forEach
,traverse
,transform
, andfilter
for expression trees. - Parameter
index
in the callbacks ofmap
andforEach
are now cloned for every callback. - Some internal refactoring inside nodes to make the API consistent:
- Renamed
params
toargs
and vice versa to make things consistent. - Renamed
Block.nodes
toBlock.blocks
. FunctionNode
now has aname: string
instead of asymbol: SymbolNode
.- Changed constructor of
RangeNode
tonew RangeNode(start: Node, end: Node [, step: Node])
. - Nodes for a
BlockNode
must now be passed via the constructor instead of via a functionadd
.
- Renamed
- Fixed
2e
giving a syntax error instead of being parsed as2 * e
.
- Disabled array notation for ranges in a matrix index in the expression parser (it is confusing and redundant there).
- Fixed a regression in the build of function subset not being able to return a scalar.
- Fixed some missing docs and broken links in the docs.
- Implemented a function
filter(x, test)
. - Removed
math.distribution
for now, needs some rethinking. math.number
can convert units to numbers (requires a second argument)- Fixed some precedence issues with the range and conversion operators.
- Fixed an zero-based issue when getting a matrix subset using an index containing a matrix.
- Implemented functions
sort(x [, compare])
andflatten(x)
. - Implemented support for
null
in all functions. - Implemented support for "rawArgs" functions in the expression parser. Raw functions are invoked with unevaluated parameters (nodes).
- Expressions in the expression parser can now be spread over multiple lines, like '2 +\n3'.
- Changed default value of the option
wrap
of functionmath.import
to false. - Changed the default value for new entries in a resized matrix when to zero.
To leave new entries uninitialized, use the new constant
math.uninitialized
as default value. - Renamed transform property from
__transform__
totransform
, and documented the transform feature. - Fixed a bug in
math.import
not applying options when passing a module name. - A returned matrix subset is now only squeezed when the
index
consists of scalar values, and no longer for ranges resolving into a single value.
- A new instance of math.js can no longer be created like
math([options])
, to prevent side effects from math being a function instead of an object. Instead, use the functionmath.create([options])
to create a new instance. - Implemented
BigNumber
support for all constants:pi
,tau
,e
,phi
,E
,LN2
,LN10
,LOG2E
,LOG10E
,PI
,SQRT1_2
, andSQRT2
. - Implemented
BigNumber
support for functionsgcd
,xgcd
, andlcm
. - Fixed function
gxcd
returning an Array when math.js was configured as{matrix: 'matrix'}
. - Multi-line expressions now return a
ResultSet
instead of anArray
. - Implemented transforms (used right now to transform one-based indices to zero-based for expressions).
- When used inside the expression parser, functions
concat
,min
,max
, andmean
expect an one-based dimension number. - Functions
map
andforEach
invoke the callback with one-based indices when used from within the expression parser. - When adding or removing dimensions when resizing a matrix, the dimensions are added/removed from the inner side (right) instead of outer side (left).
- Improved index out of range errors.
- Fixed function
concat
not accepting aBigNumber
for parameterdim
. - Function
squeeze
now squeezes both inner and outer singleton dimensions. - Output of getting a matrix subset is not automatically squeezed anymore except for scalar output.
- Renamed
FunctionNode
toFunctionAssignmentNode
, and renamedParamsNode
toFunctionNode
for more clarity. - Fixed broken auto completion in CLI.
- Some minor fixes.
-
The library now immediately returns a default instance of mathjs, there is no need to instantiate math.js in a separate step unless one ones to set configuration options:
// instead of: var mathjs = require('mathjs'), // load math.js math = mathjs(); // create an instance // just do: var math = require('mathjs');
-
Implemented support for implicit multiplication, like
math.eval('2a', {a:3})
andmath.eval('(2+3)(1-3)')
. This changes behavior of matrix indexes as well: an expression like[...][...]
is not evaluated as taking a subset of the first matrix, but as an implicit multiplication of two matrices. -
Removed utility function
ifElse
. This function is redundant now the expression parser has a conditional operatora ? b : c
. -
Fixed a bug with multiplying a number with a temperature,
likemath.eval('10 * celsius')
. -
Fixed a bug with symbols having value
undefined
not being evaluated.
- Something went wrong with publishing on npm.
- Added constant
null
. - Functions
equal
andunequal
supportnull
andundefined
now. - Function
typeof
now recognizes regular expressions as well. - Objects
Complex
,Unit
, andHelp
now return their string representation when calling.valueOf()
. - Changed the default number of significant digits for BigNumbers from 20 to 64.
- Changed the behavior of the conditional operator (a ? b : c) to lazy evaluating.
- Fixed imported, wrapped functions not accepting
null
andundefined
as function arguments.
-
Renamed some functions (everything now has a logical, camel case name):
- Renamed functions
edivide
,emultiply
, andepow
todotDivide
,dotMultiply
, anddotPow
respectively. - Renamed functions
smallereq
andlargereq
tosmallerEq
andlargerEq
. - Renamed function
unary
tounaryMinus
and added support for strings.
- Renamed functions
-
end
is now a reserved keyword which cannot be used as function or symbol name in the expression parser, and is not allowed in the scope against which an expression is evaluated. -
Implemented function
unaryPlus
and unary plus operator. -
Implemented function
deepEqual
for matrix comparisons. -
Added constant
phi
, the golden ratio (phi = 1.618...
). -
Added constant
version
, returning the version number of math.js as string. -
Added unit
drop
(gtt
). -
Fixed not being able to load math.js using AMD/require.js.
-
Changed signature of
math.parse(expr, nodes)
tomath.parse(expr, options)
whereoptions: {nodes: Object.<String, Node>}
-
Removed matrix support from conditional function
ifElse
. -
Removed automatic assignment of expression results to variable
ans
. This functionality can be restored by pre- or postprocessing every evaluation, something like:function evalWithAns (expr, scope) { var ans = math.eval(expr, scope); if (scope) { scope.ans = ans; } return ans; }
- Implemented support to export expressions to LaTeX. Thanks Niels Heisterkamp (@nheisterkamp).
- Output of matrix multiplication is now consistently squeezed.
- Added reference documentation in the section /docs/reference.
- Fixed a bug in multiplying units without value with a number (like
5 * cm
). - Fixed a bug in multiplying two matrices containing vectors (worked fine for arrays).
- Fixed random functions not accepting Matrix as input, and always returning a Matrix as output.
- Removed
crypto
library from the bundle. - Deprecated functions
Parser.parse
andParser.compile
. Usemath.parse
andmath.compile
instead. - Fixed function
add
not adding strings and matrices element wise. - Fixed parser not being able to evaluate an exponent followed by a unary minus
like
2^-3
, and a transpose followed by an index like[3]'[1]
.
- Implemented trigonometric hyperbolic functions
cosh
,coth
,csch
,sech
,sinh
,tanh
. Thanks Rogelio J. Baucells (@rjbaucells). - Added property
type
to all expression nodes in an expression tree. - Fixed functions
log
,log10
,pow
, andsqrt
not supporting complex results from BigNumber input (likesqrt(bignumber(-4))
).
- Switched to module
decimal.js
for BigNumber support, instead ofbignumber.js
. - Implemented support for polar coordinates to the
Complex
datatype. Thanks Finn Pauls (@finnp). - Implemented BigNumber support for functions
exp
,log
, andlog10
. - Implemented conditional operator
a ? b : c
in expression parser. - Improved floating point comparison: the functions now check whether values
are nearly equal, against a configured maximum relative difference
epsilon
. Thanks Rogelio J. Baucells (@rjbaucells). - Implemented function
norm
. Thanks Rogelio J. Baucells (@rjbaucells). - Improved function
ifElse
, is now specified for special data types too. - Improved function
det
. Thanks Bryan Cuccioli (@bcuccioli). - Implemented
BigNumber
support for functionsdet
anddiag
. - Added unit alias
lbs
(pound mass). - Changed configuration option
decimals
toprecision
(applies to BigNumbers only). - Fixed support for element-wise comparisons between a string and a matrix.
- Fixed: expression parser now trows IndexErrors with one-based indices instead of zero-based.
- Minor bug fixes.
- Implemented functions
compare
,sum
,prod
,var
,std
,median
. - Implemented function
ifElse
Thanks @mtraynham. - Minor bug fixes.
- Added unit
feet
. - Implemented function
compile
(shortcut for parsing and then compiling). - Improved performance of function
pow
for matrices. Thanks @hamadu. - Fixed broken auto completion in the command line interface.
- Fixed an error in function
combinations
for large numbers, and improved performance of both functionscombinations
andpermutations
.
- Changed matrix index notation of expression parser from round brackets to
square brackets, for example
A[1, 1:3]
instead ofA(1, 1:3)
. - Removed need to use the
function
keyword for function assignments in the expression parser, you can define a function now likef(x) = x^2
. - Implemented a compilation step in the expression parser: expressions are compiled into JavaScript, giving much better performance (easily 10x as fast).
- Renamed unit conversion function and operator
in
toto
. Operatorin
is still available in the expression parser as an alias forto
. Added unitin
, an abbreviation forinch
. Thanks Elijah Insua (@tmpvar). - Added plurals and aliases for units.
- Implemented an argument
includeEnd
for functionrange
(false by default). - Ranges in the expression parser now support big numbers.
- Implemented functions
permutations
andcombinations
. Thanks Daniel Levin (@daniel-levin). - Added lower case abbreviation
l
for unit litre.
- Fixed a bug with negative temperatures.
- Fixed a bug with prefixes of units squared meter
m2
and cubic meterm3
.
- Renamed and flattened configuration settings:
number.defaultType
is nownumber
.number.precision
is nowdecimals
.matrix.defaultType
is nowmatrix
.
- Function
multiply
now consistently outputs a complex number on complex input. - Fixed
mod
andin
not working as function (only as operator). - Fixed support for old browsers (IE8 and older), compatible when using es5-shim.
- Fixed support for Java's ScriptEngine.
- Implemented BigNumber support for arbitrary precision calculations.
Added settings
number.defaultType
andnumber.precision
to configure big numbers. - Documentation is extended.
- Removed utility functions
isScalar
,toScalar
,isVector
,toVector
fromMatrix
andRange
. Usemath.squeeze
andmath.size
instead. - Implemented functions
get
andset
onMatrix
, for easier and faster retrieval/replacement of elements in a matrix. - Implemented function
resize
, handling matrices, scalars, and strings. - Functions
ones
andzeros
now return an empty matrix instead of a number 1 or 0 when no arguments are provided. - Implemented functions
min
andmax
forRange
andIndex
. - Resizing matrices now leaves new elements undefined by default instead of
filling them with zeros. Function
resize
now has an extra optional parameterdefaultValue
. - Range operator
:
in expression parser has been given a higher precedence. - Functions don't allow arguments of unknown type anymore.
- Options be set when constructing a math.js instance or using the new function
config(options
. Options are no longer accessible viamath.options
. - Renamed
scientific
notation toexponential
in functionformat
. - Function
format
outputs exponential notation with positive exponents now always with+
sign, so outputs2.1e+3
instead of2.1e3
. - Fixed function
squeeze
not being able squeeze into a scalar. - Some fixes and performance improvements in the
resize
andsubset
functions. - Function
size
now adheres to the optionmatrix.defaultType
for scalar input. - Minor bug fixes.
- Math.js must be instantiated now, static calls are no longer supported. Usage:
- node.js:
var math = require('mathjs')();
- browser:
var math = mathjs();
- node.js:
- Implemented support for multiplying vectors with matrices.
- Improved number formatting:
- Function
format
now support various options: precision, different notations (fixed
,scientific
,auto
), and more. - Numbers are no longer rounded to 5 digits by default when formatted.
- Implemented a function
format
forMatrix
,Complex
,Unit
,Range
, andSelector
to format using options. - Function
format
does only stringify values now, and has a new parameterprecision
to round to a specific number of digits. - Removed option
math.options.precision
, usemath.format(value [, precision])
instead. - Fixed formatting numbers as scientific notation in some cases returning a zero digit left from the decimal point. (like "0.33333e8" rather than "3.3333e7"). Thanks @husayt.
- Function
- Implemented a function
print
to interpolate values in a template string, this functionality was moved from the functionformat
. - Implemented statistics function
mean
. Thanks Guillermo Indalecio Fernandez (@guillermobox). - Extended and changed
max
andmin
for multi dimensional matrices: they now return the maximum and minimum of the flattened array. An optional second argumentdim
allows to calculate themax
ormin
for specified dimension. - Renamed option
math.options.matrix.default
tomath.options.matrix.defaultType
. - Removed support for comparing complex numbers in functions
smaller
,smallereq
,larger
,largereq
. Complex numbers cannot be ordered.
- Introduced an option
math.options.matrix.default
which can have valuesmatrix
(default) orarray
. This option is used by the functionseye
,ones
,range
, andzeros
, to determine the type of matrix output. - Getting a subset of a matrix will automatically squeeze the resulting subset, setting a subset of a matrix will automatically unsqueeze the given subset.
- Removed concatenation of nested arrays in the expression parser.
You can now input nested arrays like in JavaScript. Matrices can be
concatenated using the function
concat
. - The matrix syntax
[...]
in the expression parser now creates 1 dimensional matrices by default.math.eval('[1,2,3,4]')
returns a matrix with size[4]
,math.eval('[1,2;3,4]')
returns a matrix with size[2,2]
. - Documentation is restructured and extended.
- Fixed non working operator
mod
(modulus operator).
- Implemented support for booleans in all relevant functions.
- Implemented functions
map
andforEach
. Thanks Sebastien Piquemal (@sebpic). - All construction functions can be used to convert the type of variables, also element-wise for all elements in an Array or Matrix.
- Changed matrix indexes of the expression parser to one-based with the upper-bound included, similar to most math applications. Note that on a JavaScript level, math.js uses zero-based indexes with excluded upper-bound.
- Removed support for scalars in the function
subset
, it now only supports Array, Matrix, and String. - Removed the functions
get
andset
from a selector, they are a duplicate of the functionsubset
. - Replaced functions
get
andset
ofMatrix
with a single functionsubset
. - Some moving around with code and namespaces:
- Renamed namespace
math.expr
tomath.expression
(contains Scope, Parser, node objects). - Renamed namespace
math.docs
tomath.expression.docs
. - Moved
math.expr.Selector
tomath.chaining.Selector
.
- Renamed namespace
- Fixed some edge cases in functions
lcm
andxgcd
.
- Fixed outdated version of README.md.
- Fixed a broken unit test.
- Implemented functions
random([min, max])
,randomInt([min, max])
,pickRandom(array)
. Thanks Sebastien Piquemal (@sebpic). - Implemented function
distribution(name)
, generating a distribution object with functionsrandom
,randomInt
,pickRandom
for different distributions. Currently supportinguniform
andnormal
. - Changed the behavior of
range
to exclude the upper bound, sorange(1, 4)
now returns[1, 2, 3]
instead of[1, 2, 3, 4]
. - Changed the syntax of
range
, which is nowrange(start, end [, step])
instead ofrange(start, [step, ] end)
. - Changed the behavior of
ones
andzeros
to geometric dimensions, for exampleones(3)
returns a vector with length 3, filled with ones, andones(3,3)
returns a 2D array with size [3, 3]. - Changed the return type of
ones
andzeros
: they now return an Array when arguments are Numbers or an Array, and returns a Matrix when the argument is a Matrix. - Change matrix index notation in parser from round brackets to square brackets,
for example
A[0, 0:3]
. - Removed the feature introduced in v0.10.0 to automatically convert a complex value with an imaginary part equal to zero to a number.
- Fixed zeros being formatted as null. Thanks @TimKraft.
- Fixed missing development dependency
- Changed math.js from one-based to zero-based indexes.
- Getting and setting matrix subset is now zero-based.
- The dimension argument in function
concat
is now zero-based.
- Improvements in the string output of function help.
- Added constants
true
andfalse
. - Added constructor function
boolean
. - Fixed function
select
not accepting0
as input. Thanks Elijah Manor (@elijahmanor). - Parser now supports multiple unary minus operators after each other.
- Fixed not accepting empty matrices like
[[], []]
. - Some fixes in the end user documentation.
- For complex calculations, all functions now automatically replace results
having an imaginary part of zero with a Number. (
2i * 2i
now returns a Number-4
instead of a Complex-4 + 0i
). - Implemented support for injecting custom node handlers in the parser. Can be used for example to implement a node handler for plotting a graph.
- Implemented end user documentation and a new
help
function. - Functions
size
andsqueeze
now return a Matrix instead of an Array as output on Matrix input. - Added a constant tau (2 * pi). Thanks Zak Zibrat (@palimpsests).
- Renamed function
unaryminus
tounary
. - Fixed a bug in determining node dependencies in function assignments.
- Implemented element-wise functions and operators:
emultiply
(x .* y
),edivide
(x ./ y
),epow
(x .^ y
). - Added constants
Infinity
andNaN
. - Removed support for Workspace to keep the library focused on its core task.
- Fixed a bug in the Complex constructor, not accepting NaN values.
- Fixed division by zero in case of pure complex values.
- Fixed a bug in function multiply multiplying a pure complex value with Infinity.
- Implemented function
math.parse(expr [,scope])
. Optional parameter scope can be a plain JavaScript Object containing variables. - Extended function
math.expr(expr [, scope])
with an additional parameterscope
, similar toparse
. Example:math.eval('x^a', {x:3, a:2});
. - Implemented function
subset
, to get or set a subset from a matrix, string, or other data types. - Implemented construction functions number and string (mainly useful inside the parser).
- Improved function
det
. Thanks Bryan Cuccioli (@bcuccioli). - Moved the parse code from prototype math.expr.Parser to function math.parse, simplified Parser a little bit.
- Strongly simplified the code of Scope and Workspace.
- Fixed function mod for negative numerators, and added error messages in case of wrong input.
- Extended the import function and some other minor improvements.
- Fixed a bug in merging one dimensional vectors into a matrix.
- Fixed a bug in function subtract, when subtracting a complex number from a real number.
- Fixed an npm warning when installing mathjs globally.
- Implemented a command line interface. When math.js is installed globally via npm, the application is available on your system as 'mathjs'.
- Implemented
end
keyword for index operator, and added support for implicit start and end (expressions likea(2,:)
andb(2:end,3:end-1)
are supported now). - Function math.eval is more flexible now: it supports variables and multi-line expressions.
- Removed the read-only option from Parser and Scope.
- Fixed non-working unequal operator != in the parser.
- Fixed a bug in resizing matrices when replacing a subset.
- Fixed a bug in updating a subset of a non-existing variable.
- Minor bug fixes.
- Fixed method unequal, which was checking for equality instead of inequality. Thanks @FJS2.
- Improvements in the parser:
- Added support for chained arguments.
- Added support for chained variable assignments.
- Added a function remove(name) to remove a variable from the parsers scope.
- Renamed nodes for more consistency and to resolve naming conflicts.
- Improved stringification of an expression tree.
- Some simplifications in the code.
- Minor bug fixes.
- Fixed a bug in the parser, returning NaN instead of throwing an error for a
number with multiple decimal separators like
2.3.4
. - Fixed a bug in Workspace.insertAfter.
- Fixed: math.js now works on IE 6-8 too.
- Implemented method
math.eval
, which uses a readonly parser to evaluate expressions. - Implemented method
xgcd
(extended eucledian algorithm). Thanks Bart Kiers (@bkiers). - Improved math.format, which now rounds values to a maximum number of digits
instead of decimals (default is 5 digits, for example
math.format(math.pi)
returns3.1416
). - Added examples.
- Changed methods square and cube to evaluate matrices element wise (consistent with all other methods).
- Changed second parameter of method import to an object with options.
- Fixed method math.typeof on IE.
- Minor bug fixes and improvements.
- Implemented chained operations via method math.select(). For example
math.select(3).add(4).subtract(2).done()
will return5
. - Implemented methods gcd and lcm.
- Implemented method
Unit.in(unit)
, which creates a clone of the unit with a fixed representation. For examplemath.unit('5.08 cm').in('inch')
will return a unit which string representation always is in inch, thus2 inch
.Unit.in(unit)
is the same as methodmath.in(x, unit)
. - Implemented
Unit.toNumber(unit)
, which returns the value of the unit when represented with given unit. For examplemath.unit('5.08 cm').toNumber('inch')
returns the number2
, as the representation of the unit in inches has 2 as value. - Improved: method
math.in(x, unit)
now supports a string as second parameter, for examplemath.in(math.unit('5.08 cm'), 'inch')
. - Split the end user documentation of the parser functions from the source files.
- Removed function help and the built-in documentation from the core library.
- Fixed constant i being defined as -1i instead of 1i.
- Minor bug fixes.
- Implemented data types Matrix and Range.
- Implemented matrix methods clone, concat, det, diag, eye, inv, ones, size, squeeze, transpose, zeros.
- Implemented range operator
:
, and transpose operator'
in parser. - Changed: created construction methods for easy object creation for all data
types and for the parser. For example, a complex value is now created
with
math.complex(2, 3)
instead ofnew math.Complex(2, 3)
, and a parser is now created withmath.parser()
instead ofnew math.parser.Parser()
. - Changed: moved all data types under the namespace math.type, and moved the Parser, Workspace, etc. under the namespace math.expr.
- Changed: changed operator precedence of the power operator:
- it is now right associative instead of left associative like most scripting
languages. So
2^3^4
is now calculated as2^(3^4)
. - it has now higher precedence than unary minus most languages, thus
-3^2
is now calculated as-(3^2)
.
- it is now right associative instead of left associative like most scripting
languages. So
- Changed: renamed the parsers method 'put' into 'set'.
- Fixed: method 'in' did not check for units to have the same base.
- Implemented Array support for all methods.
- Implemented Array support in the Parser.
- Implemented method format.
- Implemented parser for units, math.Unit.parse(str).
- Improved parser for complex values math.Complex.parse(str);
- Improved method help: it now evaluates the examples.
- Fixed: a scoping issue with the Parser when defining functions.
- Fixed: method 'typeof' was not working well with minified and mangled code.
- Fixed: errors in determining the best prefix for a unit.
- Implemented Workspace
- Implemented methods cot, csc, sec.
- Implemented Array support for methods with one parameter.
- Parser, Scope, and expression tree with Nodes implemented.
- Implemented method import which makes it easy to extend math.js.
- Implemented methods arg, conj, cube, equal, factorial, im, largereq, log(x, base), log10, mod, re, sign, smallereq, square, unequal.
- Reached full compatibility with Javascripts built-in Math library.
- More functions implemented.
- Some bugfixes.
- All constants of Math implemented, plus the imaginary unit i.
- Data types Complex and Unit implemented.
- First set of functions implemented.
- First publish of the mathjs package. (package is still empty)