* Removed maxArgumentCount in favor of applyCallback
* Making a pure _recurse function
* Added cbrt tests, removed unnecesary changes in functions.
* Fixed main bottleneck
* Restored back function before unintended change
* Fix format
---------
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
1 US gallon is defined as 231 cubic inches, which is exactly 3.785411784 L (since 1 inch is defined as 25.4 mm). Other units are defined against the gallon.
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
* nearlyEqual with absolute and relative tolerances
* Format
* nearlyEqual for bigNumber
* Added skip for NaN
* Reduce diff a bit
* Issue with examples in jsdcos
* Updated all calls for nearlyEqual
* Fixed failing tests
* Changed epsilon to relTol, absTol
* Changed references to epsilon in docs and tests
* Added warning for config.epsilon
* Fix warning in zeta.test
* Added config test
* Added sinon to test console.warn
---------
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
* Use referToSelf() to recursively check if various types are NaN in an array or matrix
* fix array test description from isNegative to isNaN
* Add test for units in a matrix
---------
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
* Fixing rounding bug from issue 3100
* Corrected syntax and converted if...else to logic using ternary operator
* Removing nearlyEqual comparison because a false
return value was mathematically impossible by
user input.
Adding dynamic epsilon logic to cover cases when
a user requests to round a number to a higher
precision than epsilon in the config file.
Also adding tests to cover dynamic epsilon cases.
* Removing dynamic epsilon and adding test for changing config.epsilon during runtime
* Reintroducing nearly equal verification for
round function.
Adding test case for changing epsilon at runtime.
Both tests for changing epsilon at runtime also
verify the false nearlyEqual scenario.
---------
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
* Add test for conversion to unitless quantity
* Avoid access to missing array index
* Also check that other.units is not empty
* Add test for abs of dimensionless unit
* Fix: avoid access to missing units array index
---------
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
* fix#2761: implement support for units in function `round` (WIP)
* fix#2761: extend function `round` with support for units
* docs: describe all signatures in the docs of function round
* chore: fix linting issue
* chore: remove less-useful signatures for round with units and matrices
* added subtractScaler
* added subtractScaler missing entries
* added test cases for 2 or more parameters, test for subtractScalar instead fo subtract
* replaced subtract with subtractScalar whereever possible
---------
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
* feat: Add option to eigs() to turn off eigenvector computation
For large matrices, the eigenvector computation can be noticeably expensive
and so it's worthwhile to have a way to turn it off if the eigenvectors
will not be used.
Resolves#2180.
* fix: Add test for precision in options arg of eigs
And also a fix for a small bug that the new test uncovered.
* test: check eigs with matrix and options
* refactor: remove dead code from complexEigs.js
* fix: add new signatures of eigs to typescript
* test: ensure eigenvectors property not present with eigenvectors: false option
* fix: correct balancing code in complexEigs
* fix: Find eigenvectors of defective matrices
Previously, attempting to take the `eigs` of any defective matrix
was doomed to fail in an attempt to solve a singular linear system.
This PR detects the situation (as best as it can given the
inherent numerical instability of the current methods used) and
handles it. Note that in such cases, it's not possible to return
a square matrix whose columns are the eigenvectors corresponding to
the returned eigenvalues. In light of that fact and issue #3014, this
PR also changes the return value of `eigs` so that the eigenvectors
are passed back in a property `eigenvectors` which is an array of
plain objects `{value: e, vector: v}`.
Note that this PR makes the ancillary changes of correcting the
spelling of the filename which was "realSymetric.js," and replacing
the now-unnecessary auxiliary function "createArray" therein with
`Array(size).fill(element)`. The rationale for performing these
changes not strictly related to the issues at hand is that this
file is rarely touched and with the level of maintenance hours we have
at hand, it's more efficient to do these small refactorings in parallel
with the actual bugfixes, which are orthogonal and so will not be
obfuscated by this refactor. Note `git diff` does properly track the
file name change.
However, it also makes a potentially more pervasive change: in order for
the numerically-sensitive algorithm to work, it changes the condition
on when two very close (double) numbers are "nearlyEqual" from differing by
less than DBL_EPSILON to differing by less than or equal to DBL_EPSILON.
Although this may change other behaviors than the ones primarily being
addressed, I believe it is an acceptable change because
(a) It preserves all tests.
(b) DBL_EPSILON is well below the standard config.epsilon anyway
(c) I believe there are extant issues noting the odd/inconsistent
behavior of nearlyEqual near 0 anyway, so I believe this will
be overhauled in the future in any case. If so, the eigenvector
computation will make a good test that a future nearlyEqual
algorithm is working well.
To be clear, the direct motivation for the change is that there are
multiple cases in the eigenvector computation in which a coefficient
that is "supposed" to be zero comes out to precisely DBL_EPSILON, which
is fairly unsurprising given that these coefficients are produced by
subtracting an eigenvalue from a diagonal entry of a matrix, which is
likely to be essentially equal to that eigenvalue.
As many tests of defective matrices as I could readily find by web
searching have been added as unit tests (and one more in the typescript
type testing). An additional case I found still fails, but in the
_eigenvalue_ computation rather than the _eigenvector_ search, so that
was deemed beyond the scope of this PR and has been filed as issue #3036.
Resolves#2879.
Resolves#2927.
Resolves#3014.
* refactor: remove comma that lint now doesn't like
* test: add a test for eigs with a precision argument
* feat: Use simple shifts in QR eigenvalue iterations that improve convergence
Although we might want to use better shifts in the future, we might just
use a library instead. But for now I think this:
Resolves#2178.
Also responds to the review feedback provided in PR #3037.
* fixed matrix issue in correlation function + error handling
* fixed syntax error in correlation function documentation
* changed error to syntax error
* added test cases for error handling
* added test cases for error handling v2
* fixed issue in test cases for error handling v2
* fixed issue in test cases for error handling v2.1
* fixed issue in test cases for error handling v2.2
* removed math.matrix examples
* removed redundant code
* changes made to the following files:
- mod.js
- gcd.js
* updated BigNumber implementation and added validating tests
* added validating test cases
* updated test cases
* formatted code
* Made updates according to requirement
used mathjs floor in mod.js
imported mod in gcd.js
made mod work for negative divisors
wrote and updated tests to validate new behavior
* updated mod in arithmetic.js
* added tests for modNumber function
---------
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
* broadcasting
* Simplified broadcasting
* Updated for broadcasting
* Changed to camel case
* Camel case and auto formating
* Added comments
* Skip if matrices have the same size
* Fixed issue with undefined variable
missing dot in `A._size`
* Implemented broadcasting in all functions
* Added helper functions
* Added function to check for broadcasting rules
* Tests for broadcasted arithmetic
* Fixed issue with matrix the size of a vector
* Documented and updated broadcasting
* Included broadcast.test
* Included math to syntax when missing
* Added print transform and tests
* Simplify conditional
* Included regex in an util
---------
Co-authored-by: David Contreras <david.contreras@guentner.com>
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
* added correlation function to statistics
* added implemenation for signature Matrix, Matrix and support for BigNumbers
* reverted changes to default for version numbers of devDepenencies
* reverted changes to default for version numbers of devDepenencies in package-lock.json
* change variable name from xArray, yArray to x and y
* added Matrix as param in index.d.ts
* corrected the file and function names for correlation function
* renamed createCorrelation to createCorr in factoriesNumber.js
* fixed failing test case for matrix and added params and return in corr
* Riemann Zeta Function
* Big Number zeta and added docs
* Original algorithm paper credited
* Update index.d.ts
* Update riemannZeta.js
* Update index.d.ts
* Renamed files to reflect zeta
* chore: make all the tests pass
* chore: refactor `zeta` (WIP)
* chore: reuse the validation logic of both number and BigNumber
* fix: type definitions of `zeta`
* fix: test the accuracy with numbers and BigNumbers (WIP)
* chore: make linter happy
* docs: fix example outputs
* docs: update history
* docs: update history
* docs: describe the limited precision of `zeta`
---------
Co-authored-by: BuildTools <anikpatel1322@gmail.com>
Co-authored-by: Anik Patel <74193405+Bobingstern@users.noreply.github.com>
* Included math to syntax when missing
* Included solveODE
* renamed initialStep as firstStep
* Included tests for solveODE
* Test the full state instead of the final state
* Fixed issue with tolerance
* Added unit signature for y0
* Included units test also for y0
* Included embedded docs and more tests
* Included error for tspan
* It works with bignumbers
* reduced calling bignumber
* extended the search for bignumbers
* The jsdocs is less ambiguous
* included tests for step options
* Allowed for 0 minStep
* Optimization to avoid checking the sign every step
* added dim to quantile
* Included transform
* Removed modification of the docs
I made an unwanted modification
---------
Co-authored-by: David Contreras <david.contreras@guentner.com>
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
* Included math to syntax when missing
* Included solveODE
* renamed initialStep as firstStep
* Included tests for solveODE
* Test the full state instead of the final state
* Fixed issue with tolerance
* Indexing with an array of booleans
* Indexing with booleans and with empty
* Changed index embedded docs
* removed solveODE
* typos on tests
* included config.predictable
* Throws an error if the size doesn't match
* Included config predictable to get subset
* Can do replacement by broadcasting
* DenseMatrix set can broadcast first
* Added tests for broadcasted subset in the parser
* Faster cloning of deep arrays
* Included docs and better test coverage
* Test coverage for `subset`
* Removed config predictable from subset
* Removed config from index and sparseMatrix
* Redaction and typos
* Cleanup unnecesary changes
* fixed issue when there is no need to broadcast
* Inline ifs
* Included specific broadcasting test
* Reduced repetition
---------
Co-authored-by: David Contreras <david.contreras@guentner.com>
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
* fix: #2990 DenseMatrix can mutate input arrays
* chore: simplify internal function `preprocess`
* chore: document ugly workaround of using `matrix.subset` to mutate a nested Array
* chore: better solution for `assign`
* chore: fix linting issue
* chore: add a unit test for `multiply` testing whether the operation is immutable
* chore: fix linting issue
---------
Co-authored-by: Glen Whitney <glen@studioinfinity.org>
* reange refactoring
* update authors
* Made _range to work also for _bigNumbers
* Range with units
* Included some Unit type in _range
* Included TypeScript types for function range
* Formatting
---------
Co-authored-by: David Contreras <david.contreras@guentner.com>
* Add Zpk2tf function
* Add zpk2tf function documentation
* Fix
* Add freqz function implementation
* Fix format
* Add freqz function documentation
* Fix
* Fix format
* Update index.d.ts
* Fix Dependency error
* Fix
* Fix index.d.ts
* Fix Documentation
* Fix Lint
* Fix index.d.ts
* Fix The Matrix parameter support and index.d.ts
* Fix Format
* Add Unit Tests for Matrix cases
* Fix Docs and Lint
* Add tests for coverage
* Fix Format
* Update AUTHORS
---------
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
* Included math to syntax when missing
* Included solveODE
* renamed initialStep as firstStep
* Included tests for solveODE
* Test the full state instead of the final state
* Fixed issue with tolerance
* Added unit signature for y0
* Included units test also for y0
* Included embedded docs and more tests
* Included error for tspan
* It works with bignumbers
* reduced calling bignumber
* extended the search for bignumbers
* The jsdocs is less ambiguous
* included tests for step options
* Allowed for 0 minStep
* Optimization to avoid checking the sign every step
---------
Co-authored-by: David Contreras <david.contreras@guentner.com>
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
* test: format bignumber to engineering bug
Add tests for correctly handling starting with more then 3 sig figs and targeting 1 or 2 sig figs
* lint:
* lint: reduce number literal sig figs
* fix: engineering notation for bignumber input
Corrects handling of cases where the input has 3 or more sig figs and the output is set to 1 or 2 sig figs.
* test: add negative format bignumber precision test
* fix: use BigNumber for all branches in toEngineering
Also, remove string type option from JSDoc for toEngineering since string does support the required interface for the function (the .e property, .mul member function, and the .constructor property would not be correct after this change)
* fix: precision 0 for fixed notation and bignumber
This fix differentiates precision === 0 and precision === undefined to.
After fix, format bignumber for precision 0 matches format number for precision 0.
Tests added as well
---------
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
* #2567: accept array as parameter for gcd()
* #2567: accept 1d matrix as gcd() argument
* #2567: support nested 1d array in gcd
* #2567: simplify matrix signature
* [fix] intersect method parameter type (#2897)
* Update history and authors (see #2897)
* feat: added chirp-z transform to calculate non-power-of-2 fft (#2900)
* added chirp-z transform to calculate non-power-of-2 fft
* simplify/remove _ifft function inside _czt function
* chore: remove an unused dependency from `simplifyConstant`
* fix: quantileSeq not accepting a matrix as second argument `prob` (see #2902)
* fix a broken example of function `to`
* fix a typo in the examples functions `distance`, `getMatrixDataType`, `subset`, and `max` (see #2902)
* fix linting issue
* Broadcasting (#2895)
* broadcasting
* Simplified broadcasting
* Updated for broadcasting
* Changed to camel case
* Camel case and auto formating
* Added comments
* Skip if matrices have the same size
* Fixed issue with undefined variable
missing dot in `A._size`
* Implemented broadcasting in all functions
* Added helper functions
* Added function to check for broadcasting rules
* Tests for broadcasted arithmetic
* Fixed issue with matrix the size of a vector
* Documented and updated broadcasting
* Included broadcast.test
---------
Co-authored-by: David Contreras <david.contreras@guentner.com>
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
* Update history and authors
* Update devDependencies
* publish v11.6.0
* fix#2906: improve description of the behavior of `subset` for scalar values in the docs
* fix#2907: determinant of empty matrix should be 1
* chore: add a few more unit tests to `det`
---------
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
Co-authored-by: Jaeu Jeong <wodndb@gmail.com>
Co-authored-by: cyavictor88 <100557319+cyavictor88@users.noreply.github.com>
Co-authored-by: David Contreras <dvd.cnt@gmail.com>
Co-authored-by: David Contreras <david.contreras@guentner.com>
* broadcasting
* Simplified broadcasting
* Updated for broadcasting
* Changed to camel case
* Camel case and auto formating
* Added comments
* Skip if matrices have the same size
* Fixed issue with undefined variable
missing dot in `A._size`
* Implemented broadcasting in all functions
* Added helper functions
* Added function to check for broadcasting rules
* Tests for broadcasted arithmetic
* Fixed issue with matrix the size of a vector
* Documented and updated broadcasting
* Included broadcast.test
---------
Co-authored-by: David Contreras <david.contreras@guentner.com>
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>