208 Commits

Author SHA1 Message Date
David Contreras
10602fdbfd
feat: matrix subset according to type of input (#3485) 2025-07-16 10:40:13 +02:00
Jos de Jong
8e76654c7f Merge branch 'develop' into v15
# Conflicts:
#	AUTHORS
#	HISTORY.md
2025-06-04 10:45:11 +02:00
Delaney Sylvans
7a617b1ee2
fix: support multiplication of arrays with units (#3456) 2025-05-28 17:00:58 +02:00
Glen Whitney
72a2442c32
Feat: Enhance Kronecker product to handle arbitrary dimension (#3461)
Previously `math.kron()` always returned a 2D matrix, and could not handle 3D or greater arrays. Now it always returns an array of the max dimension of its arguments.

Resolves #1753.
---------

Co-authored-by: Delaney Sylvans <delaneysylvans@gmail.com>
2025-04-22 17:08:21 -07:00
Orel Ben Neriah
4039df04ca
fix: #3387 use utility isNaN for consistent max and min results (#3389)
* fix: use utility isNaN for consistent max and min results

* test: add NaN comparison cases for larger and smaller functions

* docs: update descriptions for larger, smaller, max, and min functions to clarify NaN behavior

* refactor: rename isNaN to mathIsNaN for extra clarity

---------

Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
2025-02-28 15:19:28 +01:00
Glen Whitney
127ea626fc
feat: #3041, #3340 rename apply to mapSlices (#3357)
* chore: Rename `apply` to `mapSlices`

  This renaming conforms with the Julia name for the function formerly
  called `apply`, and allows it to be called from the expression parser.
  The previous name `apply` is kept as an alias for `mapSlices`, for
  backward compatibility. This commit implements an `alias` metadata
  property for function factories to facilitate the `apply` alias for
  `mapSlices`.

  As a separate bonus, this PR corrects several typos in function docs
  and removes now-passing doc tests from the list of "known failing" doc
  tests to get down to 45 known failures and 136 total issues in doc tests.
  (Most of the excess of 136 as compared to 45 are just due to roundoff
  error/slight inaccuracy of what the documentation claims the result will
  be and the actual result returned by mathjs. When the 45 are eliminated,
  a reasonable numeric tolerance can be decided on for doc testing and
  then the doc tests can be made binding rather than advisory.

* refactor: changes per PR review

---------

Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
2025-01-30 13:19:23 +01:00
Glen Whitney
1a85b8796a
fix: #3360 add bigint support to matrix indices and ranges (#3361)
* fix: Accept bigints as matrix indices and range params, demoting to number

* feat: bigint support in range(), clarify demotion in Range()

* feat: range() support Fraction, better errors for single non-string argument

---------

Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
2025-01-30 13:07:24 +01:00
Glen Whitney
773a5c5cff
fix: #3247 don't override type-native floor/ceil within tolerance of value (#3369)
* fix: Don't override type-native floor/ceil when within tolerance of value

* refactor: extend bigint safety to round and fix

---------

Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
2025-01-30 12:55:44 +01:00
Glen Whitney
8510b850ad
fix: handle bigints properly in more cases (#3345)
* fix: Handle bigints properly in more cases
  * Allow a bigint to appear in a max/min of nonhomogeneous arguments
  * If randomInt is called with a bigint or a pair of bigints, return
    a bigint.
  * Preserve uniformity of results if randomInt is called with a very large
    range.
  * Extend log, log2, and log10 to bigints
  * Add tests for all of the above issues.
  * Bonus: fix one JSDoc comment issue. If every PR fixes one, we will soon
    get through the 150+

* fix: Refactors per comments and 1 bonus doc test (isInteger)

* chore: fix lint

---------

Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
2025-01-24 10:59:13 +01:00
Paul Korzhyk
e0d56d2da7
fix: make derivative much faster (#3322) 2024-11-28 13:37:42 +01:00
Jos de Jong
52bcd8fee0 feat: upgrade to fraction.js@5.2.1 and implement support for log(x: Fraction, base: Fraction) 2024-11-20 11:57:10 +01:00
Jos de Jong
e93780e6d5 Merge branch 'develop' into v14 2024-11-20 11:41:30 +01:00
Jos de Jong
67ddc724e1 fix: #3260 improve type definitions and documentation on the callback indices of map, filter, and forEach 2024-11-20 11:32:11 +01:00
Jos de Jong
e00d3678c6 fix: #3323 support functions in function clone 2024-11-20 10:34:59 +01:00
Jos de Jong
301d00e8a5
feat: upgrade to fraction.js@5 (#3312) 2024-11-06 17:25:31 +01:00
Jos de Jong
22db7d2df3 Revert "feat: upgrade to fraction.js@5 (#3283)"
This reverts commit 9b81230950b5bed113817dc4ec7803df7e51313e.
2024-11-06 17:14:16 +01:00
Jos de Jong
9b81230950
feat: upgrade to fraction.js@5 (#3283) 2024-11-06 17:08:26 +01:00
Akki
66775ee8b5
fix: #3219 updated matAlgo07xSSf algorithm to return sparse matrix (#3307) 2024-11-06 17:02:02 +01:00
Orel Ben Neriah
9dca98b0c3
feat: adds unit support to ceil, floor, and fix functions (#3269)
BREAKING CHANGE:
The matrix types now support generics. For most practical cases, this doesn't cause a breaking change, but it is possible that it breaks typings in some specific edge cases.
2024-10-21 12:50:17 +02:00
Jos de Jong
d1ecf44e2f fix: #3253 cannot use identifiers containing special characters in function derivative 2024-09-04 12:19:46 +02:00
David Contreras
bcf0da46f0
feat: support multiple inputs in function map (#3228) 2024-08-22 13:35:21 +02:00
David Contreras
459ae13725
docs: spelling fixes in the embedded docs (#3252)
Co-authored-by: Jos de Jong <wjosdejong@gmail.com>
2024-08-21 14:30:40 +02:00
David Contreras
c8e4bbd573
fix: function map not always working with matrices (#3242)
* 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>
2024-08-01 15:54:20 +02:00
David Contreras
cf24943d4c
feat: add matrix datatypes in more cases (#3235) 2024-07-30 19:48:19 +02:00
Vistinum
975d1ba800
fix: use exact values for US liquid volume units (#3229)
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>
2024-07-11 13:16:46 +02:00
David Contreras
5785cb95f1
Broadcast refactor (#3220) 2024-06-19 18:51:37 +02:00
Jos de Jong
ab3461d484
feat: implement support for bigint (#3207, #2737) 2024-05-31 12:43:09 +02:00
Jos de Jong
1f05a35d68
chore: convert CJS files to ESM (#3204) 2024-05-22 08:46:14 +02:00
Jos de Jong
31b68ced13 chore: adjust isPositive, isNegative, and isZero to the new relTol and absTol 2024-05-15 11:12:19 +02:00
David Contreras
eded7e1dc3
feat: nearly equal with relative and absolute tolerance (#3152)
* 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>
2024-05-15 10:56:11 +02:00
Jos de Jong
5ee9f6f8d6 Merge branch 'refs/heads/develop' into v13 2024-05-15 10:51:15 +02:00
Laurent Gérin
81d2e71445
fix #3192: function isNaN returns false for NaN units in a matrix or array
* 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>
2024-04-24 09:31:06 +02:00
Jos de Jong
a41def8360 fix: #3172 simplify "true and true" 2024-03-13 14:25:56 +01:00
Jos de Jong
f37d4154ad Merge branch 'develop' into v13 2024-02-22 17:19:48 +01:00
Jos de Jong
f504ffe1d3 chore: update devDependencies (most notably eslint) 2024-02-22 16:27:24 +01:00
Brian Fugate
85b65da6cb
Fix: #3100 function round not handling round-off errors (#3136)
* 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>
2024-02-22 16:17:05 +01:00
David Contreras
e1817baa0b
Determinant with small numbers fix (#3139) 2024-02-14 17:49:07 +01:00
Jos de Jong
c60f637a60 fix: #3142 support BigNumber values for the options of function format: precision, wordSize, lowerExp, upperExp 2024-01-31 10:58:42 +01:00
Carl Osterwisch
f89e3cbbff
Unitless quantity conversion bug (#3117)
* 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>
2024-01-10 17:53:18 +01:00
Jos de Jong
b9346720d6
feat: extend function round with support for units (#3095)
* 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
2023-11-17 10:15:17 +01:00
Jos de Jong
a1f3b7c6bf fix #3094: function derivative mutates the input expression when it fails 2023-11-15 12:39:04 +01:00
Jos de Jong
3d84b5b594 fix #3092: a typo in an error message when converting a string into a number 2023-11-09 09:25:43 +01:00
Jos de Jong
8679c07617 fix #3087: extend function mod with support for negative divisors in when using BigNumber or Fraction 2023-11-08 11:29:48 +01:00
Jos de Jong
3030c6b23f Merge branch 'develop' into v12
# Conflicts:
#	HISTORY.md
2023-10-26 10:50:07 +02:00
Vrushaket Chaudhari
8f8e506166
feat: implement subtractScalar (#3081, #2643)
* 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>
2023-10-25 13:46:58 +02:00
Glen Whitney
fba5baff5e
feat: Add option to eigs() to turn off eigenvector computation (#3057)
* 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
2023-10-20 14:04:23 +02:00
Jos de Jong
1fb50b1163 Merge branch 'develop' into v12
# Conflicts:
#	HISTORY.md
2023-10-11 15:30:06 +02:00
Jos de Jong
7b9defb9ff fix: #3074 improve error message when using function max in derivative 2023-10-11 11:42:20 +02:00
Glen Whitney
b54aefb3f3
fix: Find eigenvectors of defective matrices (#3037)
* 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.
2023-10-05 11:24:51 +02:00
Vrushaket Chaudhari
abf9c9fade
fixed matrix issue in correlation function + error handling (#3030)
* 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
2023-09-20 11:26:37 +02:00