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.
- package/HISTORY.md +25 -0
- package/lib/browser/math.js +1 -1
- package/lib/browser/math.js.LICENSE.txt +2 -2
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/entry/dependenciesAny/dependenciesLyap.generated.js +26 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesPolynomialRoot.generated.js +42 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSchur.generated.js +30 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSylvester.generated.js +46 -0
- package/lib/cjs/entry/dependenciesAny.generated.js +28 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +21 -17
- package/lib/cjs/entry/pureFunctionsAny.generated.js +100 -48
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +8 -0
- package/lib/cjs/expression/embeddedDocs/function/algebra/polynomialRoot.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/arithmetic/sqrtm.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/matrix/lyap.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/matrix/schur.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/matrix/sylvester.js +15 -0
- package/lib/cjs/factoriesAny.js +28 -0
- package/lib/cjs/function/algebra/decomposition/schur.js +75 -0
- package/lib/cjs/function/algebra/lyap.js +57 -0
- package/lib/cjs/function/algebra/polynomialRoot.js +139 -0
- package/lib/cjs/function/algebra/simplify/wildcards.js +38 -0
- package/lib/cjs/function/algebra/simplify.js +104 -44
- package/lib/cjs/function/algebra/simplifyConstant.js +29 -12
- package/lib/cjs/function/algebra/sylvester.js +127 -0
- package/lib/cjs/function/matrix/forEach.js +1 -1
- package/lib/cjs/function/matrix/sqrtm.js +1 -1
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/type/matrix/SparseMatrix.js +4 -2
- package/lib/cjs/version.js +1 -1
- package/lib/esm/entry/dependenciesAny/dependenciesLyap.generated.js +18 -0
- package/lib/esm/entry/dependenciesAny/dependenciesPolynomialRoot.generated.js +34 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSchur.generated.js +22 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSylvester.generated.js +38 -0
- package/lib/esm/entry/dependenciesAny.generated.js +4 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +22 -18
- package/lib/esm/entry/pureFunctionsAny.generated.js +87 -39
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/algebra/polynomialRoot.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/arithmetic/sqrtm.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/matrix/lyap.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/matrix/schur.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/matrix/sylvester.js +8 -0
- package/lib/esm/factoriesAny.js +4 -0
- package/lib/esm/function/algebra/decomposition/schur.js +70 -0
- package/lib/esm/function/algebra/lyap.js +52 -0
- package/lib/esm/function/algebra/polynomialRoot.js +122 -0
- package/lib/esm/function/algebra/simplify/wildcards.js +20 -0
- package/lib/esm/function/algebra/simplify.js +105 -45
- package/lib/esm/function/algebra/simplifyConstant.js +29 -12
- package/lib/esm/function/algebra/sylvester.js +118 -0
- package/lib/esm/function/matrix/forEach.js +1 -1
- package/lib/esm/function/matrix/sqrtm.js +1 -1
- package/lib/esm/type/matrix/SparseMatrix.js +4 -2
- package/lib/esm/version.js +1 -1
- package/package.json +13 -13
- 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,
|
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
|
1312
|
-
|
1311
|
+
export var secondRadiation = /* #__PURE__ */createSecondRadiation({
|
1312
|
+
BigNumber,
|
1313
|
+
Unit,
|
1314
|
+
config
|
1315
|
+
});
|
1316
|
+
export var setSymDifference = /* #__PURE__ */createSetSymDifference({
|
1313
1317
|
Index,
|
1314
|
-
|
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
|
1420
|
-
|
1421
|
-
|
1422
|
-
|
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
|
1425
|
-
|
1426
|
-
|
1427
|
-
|
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
|
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
|
-
|
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
|
1547
|
-
|
1548
|
-
|
1549
|
-
|
1550
|
-
|
1551
|
-
|
1552
|
-
|
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
|
1603
|
-
|
1604
|
-
|
1605
|
-
|
1606
|
-
|
1607
|
-
|
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
|
-
|
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
|
1619
|
-
|
1620
|
-
|
1621
|
-
|
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([[
|
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 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
|
+
};
|
package/lib/esm/factoriesAny.js
CHANGED
@@ -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
|
+
}
|