mathjs 11.3.2 → 11.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/HISTORY.md +25 -0
  2. package/lib/browser/math.js +1 -1
  3. package/lib/browser/math.js.LICENSE.txt +2 -2
  4. package/lib/browser/math.js.map +1 -1
  5. package/lib/cjs/entry/dependenciesAny/dependenciesLyap.generated.js +26 -0
  6. package/lib/cjs/entry/dependenciesAny/dependenciesPolynomialRoot.generated.js +42 -0
  7. package/lib/cjs/entry/dependenciesAny/dependenciesSchur.generated.js +30 -0
  8. package/lib/cjs/entry/dependenciesAny/dependenciesSylvester.generated.js +46 -0
  9. package/lib/cjs/entry/dependenciesAny.generated.js +28 -0
  10. package/lib/cjs/entry/impureFunctionsAny.generated.js +21 -17
  11. package/lib/cjs/entry/pureFunctionsAny.generated.js +100 -48
  12. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +8 -0
  13. package/lib/cjs/expression/embeddedDocs/function/algebra/polynomialRoot.js +15 -0
  14. package/lib/cjs/expression/embeddedDocs/function/arithmetic/sqrtm.js +1 -1
  15. package/lib/cjs/expression/embeddedDocs/function/matrix/lyap.js +15 -0
  16. package/lib/cjs/expression/embeddedDocs/function/matrix/schur.js +15 -0
  17. package/lib/cjs/expression/embeddedDocs/function/matrix/sylvester.js +15 -0
  18. package/lib/cjs/factoriesAny.js +28 -0
  19. package/lib/cjs/function/algebra/decomposition/schur.js +75 -0
  20. package/lib/cjs/function/algebra/lyap.js +57 -0
  21. package/lib/cjs/function/algebra/polynomialRoot.js +139 -0
  22. package/lib/cjs/function/algebra/simplify/wildcards.js +38 -0
  23. package/lib/cjs/function/algebra/simplify.js +104 -44
  24. package/lib/cjs/function/algebra/simplifyConstant.js +29 -12
  25. package/lib/cjs/function/algebra/sylvester.js +127 -0
  26. package/lib/cjs/function/matrix/forEach.js +1 -1
  27. package/lib/cjs/function/matrix/sqrtm.js +1 -1
  28. package/lib/cjs/header.js +2 -2
  29. package/lib/cjs/type/matrix/SparseMatrix.js +4 -2
  30. package/lib/cjs/version.js +1 -1
  31. package/lib/esm/entry/dependenciesAny/dependenciesLyap.generated.js +18 -0
  32. package/lib/esm/entry/dependenciesAny/dependenciesPolynomialRoot.generated.js +34 -0
  33. package/lib/esm/entry/dependenciesAny/dependenciesSchur.generated.js +22 -0
  34. package/lib/esm/entry/dependenciesAny/dependenciesSylvester.generated.js +38 -0
  35. package/lib/esm/entry/dependenciesAny.generated.js +4 -0
  36. package/lib/esm/entry/impureFunctionsAny.generated.js +22 -18
  37. package/lib/esm/entry/pureFunctionsAny.generated.js +87 -39
  38. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +8 -0
  39. package/lib/esm/expression/embeddedDocs/function/algebra/polynomialRoot.js +8 -0
  40. package/lib/esm/expression/embeddedDocs/function/arithmetic/sqrtm.js +1 -1
  41. package/lib/esm/expression/embeddedDocs/function/matrix/lyap.js +8 -0
  42. package/lib/esm/expression/embeddedDocs/function/matrix/schur.js +8 -0
  43. package/lib/esm/expression/embeddedDocs/function/matrix/sylvester.js +8 -0
  44. package/lib/esm/factoriesAny.js +4 -0
  45. package/lib/esm/function/algebra/decomposition/schur.js +70 -0
  46. package/lib/esm/function/algebra/lyap.js +52 -0
  47. package/lib/esm/function/algebra/polynomialRoot.js +122 -0
  48. package/lib/esm/function/algebra/simplify/wildcards.js +20 -0
  49. package/lib/esm/function/algebra/simplify.js +105 -45
  50. package/lib/esm/function/algebra/simplifyConstant.js +29 -12
  51. package/lib/esm/function/algebra/sylvester.js +118 -0
  52. package/lib/esm/function/matrix/forEach.js +1 -1
  53. package/lib/esm/function/matrix/sqrtm.js +1 -1
  54. package/lib/esm/type/matrix/SparseMatrix.js +4 -2
  55. package/lib/esm/version.js +1 -1
  56. package/package.json +13 -13
  57. package/types/index.d.ts +85 -7
@@ -5,7 +5,7 @@
5
5
  import { config } from './configReadonly.js';
6
6
  import { createBigNumberClass, createComplexClass, createE, createFalse, createFineStructure, createFractionClass, createI, createInfinity, createLN10, createLOG10E, createMatrixClass, createNaN, createNull, createPhi, createRangeClass, createResultSet, createSQRT1_2,
7
7
  // eslint-disable-line camelcase
8
- createSackurTetrode, createTau, createTrue, createVersion, createDenseMatrixClass, createEfimovFactor, createLN2, createPi, createReplacer, createSQRT2, createTyped, createUnaryPlus, createWeakMixingAngle, createAbs, createAcos, createAcot, createAcsc, createAddScalar, createArg, createAsech, createAsinh, createAtan, createAtanh, createBignumber, createBitNot, createBoolean, createClone, createCombinations, createComplex, createConj, createCosh, createCoth, createCsc, createCube, createEqualScalar, createErf, createExp, createExpm1, createFilter, createForEach, createFormat, createGetMatrixDataType, createHex, createIm, createIsInteger, createIsNegative, createIsPositive, createIsZero, createLOG2E, createLgamma, createLog10, createLog2, createMap, createMultiplyScalar, createNot, createNumber, createOct, createPickRandom, createPrint, createRandom, createRe, createSec, createSign, createSin, createSparseMatrixClass, createSplitUnit, createSquare, createString, createTan, createTypeOf, createAcosh, createAcsch, createApply, createAsec, createBin, createCombinationsWithRep, createCos, createCsch, createIsNaN, createIsPrime, createRandomInt, createSech, createSinh, createSparse, createSqrt, createTanh, createUnaryMinus, createAcoth, createCot, createFraction, createIsNumeric, createMatrix, createMatrixFromFunction, createMod, createNthRoot, createNumeric, createOr, createProd, createReshape, createSize, createSmaller, createSqueeze, createSubset, createSubtract, createTo, createTranspose, createXgcd, createZeros, createAnd, createBitAnd, createBitXor, createCbrt, createCompare, createCompareText, createConcat, createCount, createCtranspose, createDiag, createDivideScalar, createDotDivide, createEqual, createFft, createFlatten, createGcd, createHasNumericValue, createHypot, createIfft, createKron, createLargerEq, createLeftShift, createLsolve, createMatrixFromColumns, createMin, createMode, createNthRoots, createOnes, createPartitionSelect, createResize, createRightArithShift, createRound, createSmallerEq, createUnequal, createUsolve, createXor, createAdd, createAtan2, createBitOr, createCatalan, createCompareNatural, createCumSum, createDeepEqual, createDiff, createDot, createEqualText, createFloor, createIdentity, createInvmod, createLarger, createLog, createLsolveAll, createMatrixFromRows, createMultiply, createQr, createRange, createRightLogShift, createSetSize, createSlu, createSum, createTrace, createUsolveAll, createAsin, createCeil, createComposition, createCross, createDet, createDistance, createDotMultiply, createFibonacciHeapClass, createFix, createImmutableDenseMatrixClass, createIndexClass, createIntersect, createLcm, createLog1p, createMax, createQuantileSeq, createRow, createSetCartesian, createSetDistinct, createSetIsSubset, createSetPowerset, createSort, createColumn, createIndex, createInv, createPinv, createPow, createSetDifference, createSetMultiplicity, createSpaClass, createSqrtm, createUnitClass, createVacuumImpedance, createWienDisplacement, createAtomicMass, createBohrMagneton, createBoltzmann, createConductanceQuantum, createCreateUnit, createDeuteronMass, createDotPow, createElectricConstant, createElementaryCharge, createExpm, createFaraday, createFirstRadiation, createGamma, createGravitationConstant, createHartreeEnergy, createKlitzing, createLoschmidt, createMagneticConstant, createMolarMass, createMolarPlanckConstant, createNeutronMass, createNuclearMagneton, createPlanckCharge, createPlanckLength, createPlanckTemperature, createProtonMass, createReducedPlanckConstant, createRydberg, createSetIntersect, createSpeedOfLight, createStefanBoltzmann, createThomsonCrossSection, createAvogadro, createBohrRadius, createCoulomb, createDivide, createElectronMass, createFactorial, createGravity, createInverseConductanceQuantum, createLup, createMagneticFluxQuantum, createMolarMassC12, createMultinomial, createPermutations, createPlanckMass, createQuantumOfCirculation, createSecondRadiation, createStirlingS2, createUnitFunction, createBellNumbers, createEigs, createFermiCoupling, createMean, createMolarVolume, createPlanckConstant, createSetSymDifference, createVariance, createClassicalElectronRadius, createLusolve, createMedian, createSetUnion, createStd, createGasConstant, createMad, createNorm, createRotationMatrix, createKldivergence, createRotate, createPlanckTime } from '../factoriesAny.js';
8
+ createSackurTetrode, createTau, createTrue, createVersion, createDenseMatrixClass, createEfimovFactor, createLN2, createPi, createReplacer, createSQRT2, createTyped, createUnaryPlus, createWeakMixingAngle, createAbs, createAcos, createAcot, createAcsc, createAddScalar, createArg, createAsech, createAsinh, createAtan, createAtanh, createBignumber, createBitNot, createBoolean, createClone, createCombinations, createComplex, createConj, createCosh, createCoth, createCsc, createCube, createEqualScalar, createErf, createExp, createExpm1, createFilter, createForEach, createFormat, createGetMatrixDataType, createHex, createIm, createIsInteger, createIsNegative, createIsPositive, createIsZero, createLOG2E, createLgamma, createLog10, createLog2, createMap, createMultiplyScalar, createNot, createNumber, createOct, createPickRandom, createPrint, createRandom, createRe, createSec, createSign, createSin, createSparseMatrixClass, createSplitUnit, createSquare, createString, createTan, createTypeOf, createAcosh, createAcsch, createApply, createAsec, createBin, createCombinationsWithRep, createCos, createCsch, createIsNaN, createIsPrime, createRandomInt, createSech, createSinh, createSparse, createSqrt, createTanh, createUnaryMinus, createAcoth, createCot, createFraction, createIsNumeric, createMatrix, createMatrixFromFunction, createMod, createNthRoot, createNumeric, createOr, createProd, createReshape, createSize, createSmaller, createSqueeze, createSubset, createSubtract, createTo, createTranspose, createXgcd, createZeros, createAnd, createBitAnd, createBitXor, createCbrt, createCompare, createCompareText, createConcat, createCount, createCtranspose, createDiag, createDivideScalar, createDotDivide, createEqual, createFft, createFlatten, createGcd, createHasNumericValue, createHypot, createIfft, createKron, createLargerEq, createLeftShift, createLsolve, createMatrixFromColumns, createMin, createMode, createNthRoots, createOnes, createPartitionSelect, createResize, createRightArithShift, createRound, createSmallerEq, createUnequal, createUsolve, createXor, createAdd, createAtan2, createBitOr, createCatalan, createCompareNatural, createCumSum, createDeepEqual, createDiff, createDot, createEqualText, createFloor, createIdentity, createInvmod, createLarger, createLog, createLsolveAll, createMatrixFromRows, createMultiply, createQr, createRange, createRightLogShift, createSetSize, createSlu, createSum, createTrace, createUsolveAll, createAsin, createCeil, createComposition, createCross, createDet, createDistance, createDotMultiply, createFibonacciHeapClass, createFix, createImmutableDenseMatrixClass, createIndexClass, createIntersect, createLcm, createLog1p, createMax, createQuantileSeq, createRow, createSetCartesian, createSetDistinct, createSetIsSubset, createSetPowerset, createSort, createColumn, createIndex, createInv, createPinv, createPow, createSetDifference, createSetMultiplicity, createSpaClass, createSqrtm, createUnitClass, createVacuumImpedance, createWienDisplacement, createAtomicMass, createBohrMagneton, createBoltzmann, createConductanceQuantum, createCreateUnit, createDeuteronMass, createDotPow, createElectricConstant, createElementaryCharge, createExpm, createFaraday, createFirstRadiation, createGamma, createGravitationConstant, createHartreeEnergy, createKlitzing, createLoschmidt, createMagneticConstant, createMolarMass, createMolarPlanckConstant, createNeutronMass, createNuclearMagneton, createPlanckCharge, createPlanckLength, createPlanckTemperature, createProtonMass, createReducedPlanckConstant, createRydberg, createSecondRadiation, createSetSymDifference, createSpeedOfLight, createStefanBoltzmann, createThomsonCrossSection, createAvogadro, createBohrRadius, createCoulomb, createDivide, createElectronMass, createFactorial, createGravity, createInverseConductanceQuantum, createLup, createMagneticFluxQuantum, createMolarMassC12, createMultinomial, createPermutations, createPlanckMass, createPolynomialRoot, createSetIntersect, createStirlingS2, createUnitFunction, createBellNumbers, createEigs, createFermiCoupling, createMean, createMolarVolume, createPlanckConstant, createQuantumOfCirculation, createSetUnion, createVariance, createClassicalElectronRadius, createLusolve, createMedian, createKldivergence, createMad, createStd, createGasConstant, createNorm, createRotationMatrix, createPlanckTime, createSchur, createRotate, createSylvester, createLyap } from '../factoriesAny.js';
9
9
  export var BigNumber = /* #__PURE__ */createBigNumberClass({
10
10
  config
11
11
  });
@@ -1308,10 +1308,15 @@ export var rydberg = /* #__PURE__ */createRydberg({
1308
1308
  Unit,
1309
1309
  config
1310
1310
  });
1311
- export var setIntersect = /* #__PURE__ */createSetIntersect({
1312
- DenseMatrix,
1311
+ export var secondRadiation = /* #__PURE__ */createSecondRadiation({
1312
+ BigNumber,
1313
+ Unit,
1314
+ config
1315
+ });
1316
+ export var setSymDifference = /* #__PURE__ */createSetSymDifference({
1313
1317
  Index,
1314
- compareNatural,
1318
+ concat,
1319
+ setDifference,
1315
1320
  size,
1316
1321
  subset,
1317
1322
  typed
@@ -1416,15 +1421,28 @@ export var planckMass = /* #__PURE__ */createPlanckMass({
1416
1421
  Unit,
1417
1422
  config
1418
1423
  });
1419
- export var quantumOfCirculation = /* #__PURE__ */createQuantumOfCirculation({
1420
- BigNumber,
1421
- Unit,
1422
- config
1424
+ export var polynomialRoot = /* #__PURE__ */createPolynomialRoot({
1425
+ add,
1426
+ cbrt,
1427
+ divide,
1428
+ equalScalar,
1429
+ im,
1430
+ isZero,
1431
+ multiply,
1432
+ re,
1433
+ sqrt,
1434
+ subtract,
1435
+ typeOf,
1436
+ typed,
1437
+ unaryMinus
1423
1438
  });
1424
- export var secondRadiation = /* #__PURE__ */createSecondRadiation({
1425
- BigNumber,
1426
- Unit,
1427
- config
1439
+ export var setIntersect = /* #__PURE__ */createSetIntersect({
1440
+ DenseMatrix,
1441
+ Index,
1442
+ compareNatural,
1443
+ size,
1444
+ subset,
1445
+ typed
1428
1446
  });
1429
1447
  export var stirlingS2 = /* #__PURE__ */createStirlingS2({
1430
1448
  bignumber,
@@ -1505,10 +1523,16 @@ export var planckConstant = /* #__PURE__ */createPlanckConstant({
1505
1523
  Unit,
1506
1524
  config
1507
1525
  });
1508
- export var setSymDifference = /* #__PURE__ */createSetSymDifference({
1526
+ export var quantumOfCirculation = /* #__PURE__ */createQuantumOfCirculation({
1527
+ BigNumber,
1528
+ Unit,
1529
+ config
1530
+ });
1531
+ export var setUnion = /* #__PURE__ */createSetUnion({
1509
1532
  Index,
1510
1533
  concat,
1511
- setDifference,
1534
+ setIntersect,
1535
+ setSymDifference,
1512
1536
  size,
1513
1537
  subset,
1514
1538
  typed
@@ -1543,13 +1567,22 @@ export var median = /* #__PURE__ */createMedian({
1543
1567
  partitionSelect,
1544
1568
  typed
1545
1569
  });
1546
- export var setUnion = /* #__PURE__ */createSetUnion({
1547
- Index,
1548
- concat,
1549
- setIntersect,
1550
- setSymDifference,
1551
- size,
1552
- subset,
1570
+ export var kldivergence = /* #__PURE__ */createKldivergence({
1571
+ divide,
1572
+ dotDivide,
1573
+ isNumeric,
1574
+ log,
1575
+ map,
1576
+ matrix,
1577
+ multiply,
1578
+ sum,
1579
+ typed
1580
+ });
1581
+ export var mad = /* #__PURE__ */createMad({
1582
+ abs,
1583
+ map,
1584
+ median,
1585
+ subtract,
1553
1586
  typed
1554
1587
  });
1555
1588
  export var std = /* #__PURE__ */createStd({
@@ -1563,13 +1596,6 @@ export var gasConstant = /* #__PURE__ */createGasConstant({
1563
1596
  Unit,
1564
1597
  config
1565
1598
  });
1566
- export var mad = /* #__PURE__ */createMad({
1567
- abs,
1568
- map,
1569
- median,
1570
- subtract,
1571
- typed
1572
- });
1573
1599
  export var norm = /* #__PURE__ */createNorm({
1574
1600
  abs,
1575
1601
  add,
@@ -1599,15 +1625,18 @@ export var rotationMatrix = /* #__PURE__ */createRotationMatrix({
1599
1625
  typed,
1600
1626
  unaryMinus
1601
1627
  });
1602
- export var kldivergence = /* #__PURE__ */createKldivergence({
1603
- divide,
1604
- dotDivide,
1605
- isNumeric,
1606
- log,
1607
- map,
1628
+ export var planckTime = /* #__PURE__ */createPlanckTime({
1629
+ BigNumber,
1630
+ Unit,
1631
+ config
1632
+ });
1633
+ export var schur = /* #__PURE__ */createSchur({
1634
+ identity,
1608
1635
  matrix,
1609
1636
  multiply,
1610
- sum,
1637
+ norm,
1638
+ qr,
1639
+ subtract,
1611
1640
  typed
1612
1641
  });
1613
1642
  export var rotate = /* #__PURE__ */createRotate({
@@ -1615,8 +1644,27 @@ export var rotate = /* #__PURE__ */createRotate({
1615
1644
  rotationMatrix,
1616
1645
  typed
1617
1646
  });
1618
- export var planckTime = /* #__PURE__ */createPlanckTime({
1619
- BigNumber,
1620
- Unit,
1621
- config
1647
+ export var sylvester = /* #__PURE__ */createSylvester({
1648
+ abs,
1649
+ add,
1650
+ concat,
1651
+ identity,
1652
+ index,
1653
+ lusolve,
1654
+ matrix,
1655
+ matrixFromColumns,
1656
+ multiply,
1657
+ range,
1658
+ schur,
1659
+ subset,
1660
+ subtract,
1661
+ transpose,
1662
+ typed
1663
+ });
1664
+ export var lyap = /* #__PURE__ */createLyap({
1665
+ matrix,
1666
+ multiply,
1667
+ sylvester,
1668
+ transpose,
1669
+ typed
1622
1670
  });
@@ -36,6 +36,7 @@ import { lsolveDocs } from './function/algebra/lsolve.js';
36
36
  import { lsolveAllDocs } from './function/algebra/lsolveAll.js';
37
37
  import { lupDocs } from './function/algebra/lup.js';
38
38
  import { lusolveDocs } from './function/algebra/lusolve.js';
39
+ import { polynomialRootDocs } from './function/algebra/polynomialRoot.js';
39
40
  import { qrDocs } from './function/algebra/qr.js';
40
41
  import { rationalizeDocs } from './function/algebra/rationalize.js';
41
42
  import { resolveDocs } from './function/algebra/resolve.js';
@@ -78,6 +79,9 @@ import { roundDocs } from './function/arithmetic/round.js';
78
79
  import { signDocs } from './function/arithmetic/sign.js';
79
80
  import { sqrtDocs } from './function/arithmetic/sqrt.js';
80
81
  import { sqrtmDocs } from './function/arithmetic/sqrtm.js';
82
+ import { sylvesterDocs } from './function/matrix/sylvester.js';
83
+ import { schurDocs } from './function/matrix/schur.js';
84
+ import { lyapDocs } from './function/matrix/lyap.js';
81
85
  import { squareDocs } from './function/arithmetic/square.js';
82
86
  import { subtractDocs } from './function/arithmetic/subtract.js';
83
87
  import { unaryMinusDocs } from './function/arithmetic/unaryMinus.js';
@@ -478,6 +482,7 @@ export var embeddedDocs = {
478
482
  lup: lupDocs,
479
483
  lusolve: lusolveDocs,
480
484
  leafCount: leafCountDocs,
485
+ polynomialRoot: polynomialRootDocs,
481
486
  resolve: resolveDocs,
482
487
  simplify: simplifyDocs,
483
488
  simplifyConstant: simplifyConstantDocs,
@@ -599,6 +604,9 @@ export var embeddedDocs = {
599
604
  zeros: zerosDocs,
600
605
  fft: fftDocs,
601
606
  ifft: ifftDocs,
607
+ sylvester: sylvesterDocs,
608
+ schur: schurDocs,
609
+ lyap: lyapDocs,
602
610
  // functions - probability
603
611
  combinations: combinationsDocs,
604
612
  combinationsWithRep: combinationsWithRepDocs,
@@ -0,0 +1,8 @@
1
+ export var polynomialRootDocs = {
2
+ name: 'polynomialRoot',
3
+ category: 'Algebra',
4
+ syntax: ['x=polynomialRoot(-6, 3)', 'x=polynomialRoot(4, -4, 1)', 'x=polynomialRoot(-8, 12, -6, 1)'],
5
+ description: 'Finds the roots of a univariate polynomial given by its coefficients starting from constant, linear, and so on, increasing in degree.',
6
+ examples: ['a = polynomialRoot(-6, 11, -6 1)'],
7
+ seealso: ['cbrt', 'sqrt']
8
+ };
@@ -3,6 +3,6 @@ export var sqrtmDocs = {
3
3
  category: 'Arithmetic',
4
4
  syntax: ['sqrtm(x)'],
5
5
  description: 'Calculate the principal square root of a square matrix. The principal square root matrix `X` of another matrix `A` is such that `X * X = A`.',
6
- examples: ['sqrtm([[1, 2], [3, 4]])'],
6
+ examples: ['sqrtm([[33, 24], [48, 57]])'],
7
7
  seealso: ['sqrt', 'abs', 'square', 'multiply']
8
8
  };
@@ -0,0 +1,8 @@
1
+ export var lyapDocs = {
2
+ name: 'lyap',
3
+ category: 'Matrix',
4
+ syntax: ['lyap(A,Q)'],
5
+ description: 'Solves the Continuous-time Lyapunov equation AP+PA\'+Q=0 for P',
6
+ examples: ['lyap([[-2, 0], [1, -4]], [[3, 1], [1, 3]])', 'lyap(A,Q)'],
7
+ seealso: ['schur', 'sylvester']
8
+ };
@@ -0,0 +1,8 @@
1
+ export var schurDocs = {
2
+ name: 'schur',
3
+ category: 'Matrix',
4
+ syntax: ['schur(A)'],
5
+ description: 'Performs a real Schur decomposition of the real matrix A = UTU\'',
6
+ examples: ['schur([[1, 0], [-4, 3]])', 'schur(A)'],
7
+ seealso: ['lyap', 'sylvester']
8
+ };
@@ -0,0 +1,8 @@
1
+ export var sylvesterDocs = {
2
+ name: 'sylvester',
3
+ category: 'Matrix',
4
+ syntax: ['sylvester(A,B,C)'],
5
+ description: 'Solves the real-valued Sylvester equation AX+XB=C for X',
6
+ examples: ['sylvester([[-1, -2], [1, 1]], [[-2, 1], [-1, 2]], [[-3, 2], [3, 0]])', 'sylvester(A,B,C)'],
7
+ seealso: ['schur', 'lyap']
8
+ };
@@ -210,6 +210,7 @@ export { createLup } from './function/algebra/decomposition/lup.js';
210
210
  export { createQr } from './function/algebra/decomposition/qr.js';
211
211
  export { createSlu } from './function/algebra/decomposition/slu.js';
212
212
  export { createLusolve } from './function/algebra/solver/lusolve.js';
213
+ export { createPolynomialRoot } from './function/algebra/polynomialRoot.js';
213
214
  export { createHelpClass } from './expression/Help.js';
214
215
  export { createChainClass } from './type/chain/Chain.js';
215
216
  export { createHelp } from './expression/function/help.js';
@@ -220,6 +221,9 @@ export { createPinv } from './function/matrix/pinv.js';
220
221
  export { createEigs } from './function/matrix/eigs.js';
221
222
  export { createExpm } from './function/matrix/expm.js';
222
223
  export { createSqrtm } from './function/matrix/sqrtm.js';
224
+ export { createSylvester } from './function/algebra/sylvester.js';
225
+ export { createSchur } from './function/algebra/decomposition/schur.js';
226
+ export { createLyap } from './function/algebra/lyap.js';
223
227
  export { createDivide } from './function/arithmetic/divide.js';
224
228
  export { createDistance } from './function/geometry/distance.js';
225
229
  export { createIntersect } from './function/geometry/intersect.js';
@@ -0,0 +1,70 @@
1
+ import { factory } from '../../../utils/factory.js';
2
+ var name = 'schur';
3
+ var dependencies = ['typed', 'matrix', 'identity', 'multiply', 'qr', 'norm', 'subtract'];
4
+ export var createSchur = /* #__PURE__ */factory(name, dependencies, _ref => {
5
+ var {
6
+ typed,
7
+ matrix,
8
+ identity,
9
+ multiply,
10
+ qr,
11
+ norm,
12
+ subtract
13
+ } = _ref;
14
+ /**
15
+ *
16
+ * Performs a real Schur decomposition of the real matrix A = UTU' where U is orthogonal
17
+ * and T is upper quasi-triangular.
18
+ * https://en.wikipedia.org/wiki/Schur_decomposition
19
+ *
20
+ * Syntax:
21
+ *
22
+ * math.schur(A)
23
+ *
24
+ * Examples:
25
+ *
26
+ * const A = [[1, 0], [-4, 3]]
27
+ * math.schur(A) // returns {T: [[3, 4], [0, 1]], R: [[0, 1], [-1, 0]]}
28
+ *
29
+ * See also:
30
+ *
31
+ * sylvester, lyap, qr
32
+ *
33
+ * @param {Array | Matrix} A Matrix A
34
+ * @return {{U: Array | Matrix, T: Array | Matrix}} Object containing both matrix U and T of the Schur Decomposition A=UTU'
35
+ */
36
+ return typed(name, {
37
+ Array: function Array(X) {
38
+ var r = _schur(matrix(X));
39
+ return {
40
+ U: r.U.valueOf(),
41
+ T: r.T.valueOf()
42
+ };
43
+ },
44
+ Matrix: function Matrix(X) {
45
+ return _schur(X);
46
+ }
47
+ });
48
+ function _schur(X) {
49
+ var n = X.size()[0];
50
+ var A = X;
51
+ var U = identity(n);
52
+ var k = 0;
53
+ var A0;
54
+ do {
55
+ A0 = A;
56
+ var QR = qr(A);
57
+ var Q = QR.Q;
58
+ var R = QR.R;
59
+ A = multiply(R, Q);
60
+ U = multiply(U, Q);
61
+ if (k++ > 100) {
62
+ break;
63
+ }
64
+ } while (norm(subtract(A, A0)) > 1e-4);
65
+ return {
66
+ U,
67
+ T: A
68
+ };
69
+ }
70
+ });
@@ -0,0 +1,52 @@
1
+ import { factory } from '../../utils/factory.js';
2
+ var name = 'lyap';
3
+ var dependencies = ['typed', 'matrix', 'sylvester', 'multiply', 'transpose'];
4
+ export var createLyap = /* #__PURE__ */factory(name, dependencies, _ref => {
5
+ var {
6
+ typed,
7
+ matrix,
8
+ sylvester,
9
+ multiply,
10
+ transpose
11
+ } = _ref;
12
+ /**
13
+ *
14
+ * Solves the Continuous-time Lyapunov equation AP+PA'+Q=0 for P, where
15
+ * Q is an input matrix. When Q is symmetric, P is also symmetric. Notice
16
+ * that different equivalent definitions exist for the Continuous-time
17
+ * Lyapunov equation.
18
+ * https://en.wikipedia.org/wiki/Lyapunov_equation
19
+ *
20
+ * Syntax:
21
+ *
22
+ * math.lyap(A, Q)
23
+ *
24
+ * Examples:
25
+ *
26
+ * const A = [[-2, 0], [1, -4]]
27
+ * const Q = [[3, 1], [1, 3]]
28
+ * const P = math.lyap(A, Q)
29
+ *
30
+ * See also:
31
+ *
32
+ * sylvester, schur
33
+ *
34
+ * @param {Matrix | Array} A Matrix A
35
+ * @param {Matrix | Array} Q Matrix Q
36
+ * @return {Matrix | Array} Matrix P solution to the Continuous-time Lyapunov equation AP+PA'=Q
37
+ */
38
+ return typed(name, {
39
+ 'Matrix, Matrix': function MatrixMatrix(A, Q) {
40
+ return sylvester(A, transpose(A), multiply(-1, Q));
41
+ },
42
+ 'Array, Matrix': function ArrayMatrix(A, Q) {
43
+ return sylvester(matrix(A), transpose(matrix(A)), multiply(-1, Q));
44
+ },
45
+ 'Matrix, Array': function MatrixArray(A, Q) {
46
+ return sylvester(A, transpose(matrix(A)), matrix(multiply(-1, Q)));
47
+ },
48
+ 'Array, Array': function ArrayArray(A, Q) {
49
+ return sylvester(matrix(A), transpose(matrix(A)), matrix(multiply(-1, Q))).toArray();
50
+ }
51
+ });
52
+ });
@@ -0,0 +1,122 @@
1
+ import { factory } from '../../utils/factory.js';
2
+ var name = 'polynomialRoot';
3
+ var dependencies = ['typed', 'isZero', 'equalScalar', 'add', 'subtract', 'multiply', 'divide', 'sqrt', 'unaryMinus', 'cbrt', 'typeOf', 'im', 're'];
4
+ export var createPolynomialRoot = /* #__PURE__ */factory(name, dependencies, _ref => {
5
+ var {
6
+ typed,
7
+ isZero,
8
+ equalScalar,
9
+ add,
10
+ subtract,
11
+ multiply,
12
+ divide,
13
+ sqrt,
14
+ unaryMinus,
15
+ cbrt,
16
+ typeOf,
17
+ im,
18
+ re
19
+ } = _ref;
20
+ /**
21
+ * Finds the numerical values of the distinct roots of a polynomial with real or complex coefficients.
22
+ * Currently operates only on linear, quadratic, and cubic polynomials using the standard
23
+ * formulas for the roots.
24
+ *
25
+ * Syntax:
26
+ *
27
+ * polynomialRoot(constant, linearCoeff, quadraticCoeff, cubicCoeff)
28
+ *
29
+ * Examples:
30
+ * // linear
31
+ * math.polynomialRoot(6, 3) // [-2]
32
+ * math.polynomialRoot(math.complex(6,3), 3) // [-2 - i]
33
+ * math.polynomialRoot(math.complex(6,3), math.complex(2,1)) // [-3 + 0i]
34
+ * // quadratic
35
+ * math.polynomialRoot(2, -3, 1) // [2, 1]
36
+ * math.polynomialRoot(8, 8, 2) // [-2]
37
+ * math.polynomialRoot(-2, 0, 1) // [1.4142135623730951, -1.4142135623730951]
38
+ * math.polynomialRoot(2, -2, 1) // [1 + i, 1 - i]
39
+ * math.polynomialRoot(math.complex(1,3), math.complex(-3, -2), 1) // [2 + i, 1 + i]
40
+ * // cubic
41
+ * math.polynomialRoot(-6, 11, -6, 1) // [1, 3, 2]
42
+ * math.polynomialRoot(-8, 0, 0, 1) // [-1 - 1.7320508075688774i, 2, -1 + 1.7320508075688774i]
43
+ * math.polynomialRoot(0, 8, 8, 2) // [0, -2]
44
+ * math.polynomialRoot(1, 1, 1, 1) // [-1 + 0i, 0 - i, 0 + i]
45
+ *
46
+ * See also:
47
+ * cbrt, sqrt
48
+ *
49
+ * @param {... number | Complex} coeffs
50
+ * The coefficients of the polynomial, starting with with the constant coefficent, followed
51
+ * by the linear coefficient and subsequent coefficients of increasing powers.
52
+ * @return {Array} The distinct roots of the polynomial
53
+ */
54
+
55
+ return typed(name, {
56
+ 'number|Complex, ...number|Complex': (constant, restCoeffs) => {
57
+ var coeffs = [constant, ...restCoeffs];
58
+ while (coeffs.length > 0 && isZero(coeffs[coeffs.length - 1])) {
59
+ coeffs.pop();
60
+ }
61
+ if (coeffs.length < 2) {
62
+ throw new RangeError("Polynomial [".concat(constant, ", ").concat(restCoeffs, "] must have a non-zero non-constant coefficient"));
63
+ }
64
+ switch (coeffs.length) {
65
+ case 2:
66
+ // linear
67
+ return [unaryMinus(divide(coeffs[0], coeffs[1]))];
68
+ case 3:
69
+ {
70
+ // quadratic
71
+ var [c, b, a] = coeffs;
72
+ var denom = multiply(2, a);
73
+ var d1 = multiply(b, b);
74
+ var d2 = multiply(4, a, c);
75
+ if (equalScalar(d1, d2)) return [divide(unaryMinus(b), denom)];
76
+ var discriminant = sqrt(subtract(d1, d2));
77
+ return [divide(subtract(discriminant, b), denom), divide(subtract(unaryMinus(discriminant), b), denom)];
78
+ }
79
+ case 4:
80
+ {
81
+ // cubic, cf. https://en.wikipedia.org/wiki/Cubic_equation
82
+ var [d, _c, _b, _a] = coeffs;
83
+ var _denom = unaryMinus(multiply(3, _a));
84
+ var D0_1 = multiply(_b, _b);
85
+ var D0_2 = multiply(3, _a, _c);
86
+ var D1_1 = add(multiply(2, _b, _b, _b), multiply(27, _a, _a, d));
87
+ var D1_2 = multiply(9, _a, _b, _c);
88
+ if (equalScalar(D0_1, D0_2) && equalScalar(D1_1, D1_2)) {
89
+ return [divide(_b, _denom)];
90
+ }
91
+ var Delta0 = subtract(D0_1, D0_2);
92
+ var Delta1 = subtract(D1_1, D1_2);
93
+ var discriminant1 = add(multiply(18, _a, _b, _c, d), multiply(_b, _b, _c, _c));
94
+ var discriminant2 = add(multiply(4, _b, _b, _b, d), multiply(4, _a, _c, _c, _c), multiply(27, _a, _a, d, d));
95
+ if (equalScalar(discriminant1, discriminant2)) {
96
+ return [divide(subtract(multiply(4, _a, _b, _c), add(multiply(9, _a, _a, d), multiply(_b, _b, _b))), multiply(_a, Delta0)),
97
+ // simple root
98
+ divide(subtract(multiply(9, _a, d), multiply(_b, _c)), multiply(2, Delta0)) // double root
99
+ ];
100
+ }
101
+ // OK, we have three distinct roots
102
+ var Ccubed;
103
+ if (equalScalar(D0_1, D0_2)) {
104
+ Ccubed = Delta1;
105
+ } else {
106
+ Ccubed = divide(add(Delta1, sqrt(subtract(multiply(Delta1, Delta1), multiply(4, Delta0, Delta0, Delta0)))), 2);
107
+ }
108
+ var allRoots = true;
109
+ var rawRoots = cbrt(Ccubed, allRoots).toArray().map(C => divide(add(_b, C, divide(Delta0, C)), _denom));
110
+ return rawRoots.map(r => {
111
+ if (typeOf(r) === 'Complex' && equalScalar(re(r), re(r) + im(r))) {
112
+ return re(r);
113
+ }
114
+ return r;
115
+ });
116
+ }
117
+ default:
118
+ throw new RangeError("only implemented for cubic or lower-order polynomials, not ".concat(coeffs));
119
+ }
120
+ }
121
+ });
122
+ });
@@ -0,0 +1,20 @@
1
+ import { isConstantNode, isFunctionNode, isOperatorNode, isParenthesisNode } from '../../../utils/is.js';
2
+ export { isConstantNode, isSymbolNode as isVariableNode } from '../../../utils/is.js';
3
+ export function isNumericNode(x) {
4
+ return isConstantNode(x) || isOperatorNode(x) && x.isUnary() && isConstantNode(x.args[0]);
5
+ }
6
+ export function isConstantExpression(x) {
7
+ if (isConstantNode(x)) {
8
+ // Basic Constant types
9
+ return true;
10
+ }
11
+ if ((isFunctionNode(x) || isOperatorNode(x)) && x.args.every(isConstantExpression)) {
12
+ // Can be constant depending on arguments
13
+ return true;
14
+ }
15
+ if (isParenthesisNode(x) && isConstantExpression(x.content)) {
16
+ // Parenthesis are transparent
17
+ return true;
18
+ }
19
+ return false; // Probably missing some edge cases
20
+ }