nerdamer 1.1.13 → 2.0.0-rc.1
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/LICENSE.md +184 -0
- package/README.md +293 -312
- package/dist/bundle.js +2 -0
- package/dist/bundle.js.LICENSE.txt +7 -0
- package/dist/parser.js +2 -0
- package/dist/parser.js.LICENSE.txt +7 -0
- package/docs-data/parser-functions.json +1960 -0
- package/index.d.ts +10 -426
- package/output/algebra/adapters.d.ts +33 -0
- package/output/algebra/adapters.js +109 -0
- package/output/algebra/algorithms/arith.d.ts +84 -0
- package/output/algebra/algorithms/arith.js +323 -0
- package/output/algebra/algorithms/factor.d.ts +3 -0
- package/output/algebra/algorithms/factor.js +5 -0
- package/output/algebra/algorithms/factorMultivariate.d.ts +23 -0
- package/output/algebra/algorithms/factorMultivariate.js +2393 -0
- package/output/algebra/algorithms/factorUnivariate.d.ts +72 -0
- package/output/algebra/algorithms/factorUnivariate.js +1072 -0
- package/output/algebra/algorithms/gcd.d.ts +22 -0
- package/output/algebra/algorithms/gcd.js +690 -0
- package/output/algebra/algorithms/groebnerBase.d.ts +157 -0
- package/output/algebra/algorithms/groebnerBase.js +1166 -0
- package/output/algebra/algorithms/multiPoly/MultiPoly.d.ts +137 -0
- package/output/algebra/algorithms/multiPoly/MultiPoly.js +346 -0
- package/output/algebra/algorithms/poly.d.ts +228 -0
- package/output/algebra/algorithms/poly.js +1299 -0
- package/output/algebra/algorithms/rational.d.ts +17 -0
- package/output/algebra/algorithms/rational.js +115 -0
- package/output/algebra/factor/factor.d.ts +62 -0
- package/output/algebra/factor/factor.js +158 -0
- package/output/algebra/gcd/gcd.d.ts +29 -0
- package/output/algebra/gcd/gcd.js +141 -0
- package/output/algebra/groebner.d.ts +21 -0
- package/output/algebra/groebner.js +42 -0
- package/output/algebra/partfrac.d.ts +19 -0
- package/output/algebra/partfrac.js +398 -0
- package/output/algebra/polynomialize.d.ts +20 -0
- package/output/algebra/polynomialize.js +24 -0
- package/output/algebra/simplify/complexsimp.d.ts +7 -0
- package/output/algebra/simplify/complexsimp.js +24 -0
- package/output/algebra/simplify/factorCommon.d.ts +13 -0
- package/output/algebra/simplify/factorCommon.js +136 -0
- package/output/algebra/simplify/funcsimp.d.ts +26 -0
- package/output/algebra/simplify/funcsimp.js +633 -0
- package/output/algebra/simplify/invtrigrewrite.d.ts +10 -0
- package/output/algebra/simplify/invtrigrewrite.js +96 -0
- package/output/algebra/simplify/ratsimp.d.ts +21 -0
- package/output/algebra/simplify/ratsimp.js +140 -0
- package/output/algebra/simplify/simplify.d.ts +25 -0
- package/output/algebra/simplify/simplify.js +228 -0
- package/output/algebra/simplify/trigreduce.d.ts +38 -0
- package/output/algebra/simplify/trigreduce.js +424 -0
- package/output/algebra/simplify/trigrewrite.d.ts +17 -0
- package/output/algebra/simplify/trigrewrite.js +156 -0
- package/output/algebra/simplify/trigsimp.d.ts +11 -0
- package/output/algebra/simplify/trigsimp.js +369 -0
- package/output/algebra/simplify/utils.d.ts +32 -0
- package/output/algebra/simplify/utils.js +56 -0
- package/output/algebra/utils.d.ts +32 -0
- package/output/algebra/utils.js +48 -0
- package/output/api/advanced.d.ts +7 -0
- package/output/api/advanced.js +18 -0
- package/output/api/algebra.d.ts +17 -0
- package/output/api/algebra.js +32 -0
- package/output/api/assumptions.d.ts +4 -0
- package/output/api/assumptions.js +11 -0
- package/output/api/calculus.d.ts +9 -0
- package/output/api/calculus.js +21 -0
- package/output/api/core.d.ts +17 -0
- package/output/api/core.js +41 -0
- package/output/api/debug.d.ts +16 -0
- package/output/api/debug.js +23 -0
- package/output/api/parser.d.ts +85 -0
- package/output/api/parser.js +16 -0
- package/output/api/solve.d.ts +10 -0
- package/output/api/solve.js +16 -0
- package/output/api/structures.d.ts +10 -0
- package/output/api/structures.js +22 -0
- package/output/calculus/derivative/diff.d.ts +30 -0
- package/output/calculus/derivative/diff.js +238 -0
- package/output/calculus/fresnel.d.ts +16 -0
- package/output/calculus/fresnel.js +39 -0
- package/output/calculus/integrate/byParts.d.ts +18 -0
- package/output/calculus/integrate/byParts.js +339 -0
- package/output/calculus/integrate/bySubstitution.d.ts +135 -0
- package/output/calculus/integrate/bySubstitution.js +411 -0
- package/output/calculus/integrate/integrate.d.ts +38 -0
- package/output/calculus/integrate/integrate.js +652 -0
- package/output/calculus/integrate/integrationTable.d.ts +2 -0
- package/output/calculus/integrate/integrationTable.js +914 -0
- package/output/calculus/integrate/utils.d.ts +28 -0
- package/output/calculus/integrate/utils.js +96 -0
- package/output/calculus/laplace/ilaplace.d.ts +31 -0
- package/output/calculus/laplace/ilaplace.js +192 -0
- package/output/calculus/laplace/ilaplaceTable.d.ts +2 -0
- package/output/calculus/laplace/ilaplaceTable.js +200 -0
- package/output/calculus/laplace/laplace.d.ts +22 -0
- package/output/calculus/laplace/laplace.js +109 -0
- package/output/calculus/laplace/laplaceTable.d.ts +2 -0
- package/output/calculus/laplace/laplaceTable.js +187 -0
- package/output/calculus/limit/limit.d.ts +35 -0
- package/output/calculus/limit/limit.js +1183 -0
- package/output/calculus/limit/limitsTable.d.ts +2 -0
- package/output/calculus/limit/limitsTable.js +7 -0
- package/output/core/Settings.d.ts +32 -0
- package/output/core/Settings.js +68 -0
- package/output/core/adapters.d.ts +18 -0
- package/output/core/adapters.js +40 -0
- package/output/core/classes/assumption/Assumption.d.ts +218 -0
- package/output/core/classes/assumption/Assumption.js +605 -0
- package/output/core/classes/assumption/assertiveFunctions.d.ts +6 -0
- package/output/core/classes/assumption/assertiveFunctions.js +64 -0
- package/output/core/classes/assumption/assume.d.ts +90 -0
- package/output/core/classes/assumption/assume.js +145 -0
- package/output/core/classes/collection/Collection.d.ts +107 -0
- package/output/core/classes/collection/Collection.js +231 -0
- package/output/core/classes/complex/Complex.d.ts +99 -0
- package/output/core/classes/complex/Complex.js +135 -0
- package/output/core/classes/decimalSet/DecimalSet.d.ts +226 -0
- package/output/core/classes/decimalSet/DecimalSet.js +453 -0
- package/output/core/classes/dictionary/Dictionary.d.ts +102 -0
- package/output/core/classes/dictionary/Dictionary.js +213 -0
- package/output/core/classes/equation/Equation.d.ts +256 -0
- package/output/core/classes/equation/Equation.js +350 -0
- package/output/core/classes/expression/CoeffObject.d.ts +100 -0
- package/output/core/classes/expression/CoeffObject.js +198 -0
- package/output/core/classes/expression/Expression.d.ts +1674 -0
- package/output/core/classes/expression/Expression.js +2332 -0
- package/output/core/classes/expression/analysis.d.ts +25 -0
- package/output/core/classes/expression/analysis.js +218 -0
- package/output/core/classes/expression/collect.d.ts +9 -0
- package/output/core/classes/expression/collect.js +49 -0
- package/output/core/classes/expression/format.d.ts +45 -0
- package/output/core/classes/expression/format.js +217 -0
- package/output/core/classes/expression/products.d.ts +23 -0
- package/output/core/classes/expression/products.js +115 -0
- package/output/core/classes/expression/shortcuts.d.ts +35 -0
- package/output/core/classes/expression/shortcuts.js +129 -0
- package/output/core/classes/expression/traversal.d.ts +31 -0
- package/output/core/classes/expression/traversal.js +216 -0
- package/output/core/classes/expression/trig.d.ts +25 -0
- package/output/core/classes/expression/trig.js +40 -0
- package/output/core/classes/expression/utils.d.ts +52 -0
- package/output/core/classes/expression/utils.js +189 -0
- package/output/core/classes/lookupTable/LookupTable.d.ts +12 -0
- package/output/core/classes/lookupTable/LookupTable.js +55 -0
- package/output/core/classes/matrix/Matrix.d.ts +227 -0
- package/output/core/classes/matrix/Matrix.js +889 -0
- package/output/core/classes/matrix/Sylvester.d.ts +11 -0
- package/output/core/classes/matrix/Sylvester.js +54 -0
- package/output/core/classes/matrix/functions.d.ts +26 -0
- package/output/core/classes/matrix/functions.js +52 -0
- package/output/core/classes/matrix/utils.d.ts +9 -0
- package/output/core/classes/matrix/utils.js +22 -0
- package/output/core/classes/parser/Parser.d.ts +480 -0
- package/output/core/classes/parser/Parser.js +1812 -0
- package/output/core/classes/parser/Token.d.ts +58 -0
- package/output/core/classes/parser/Token.js +137 -0
- package/output/core/classes/parser/constants.d.ts +160 -0
- package/output/core/classes/parser/constants.js +227 -0
- package/output/core/classes/parser/helpers.d.ts +21 -0
- package/output/core/classes/parser/helpers.js +42 -0
- package/output/core/classes/parser/operations/add.d.ts +15 -0
- package/output/core/classes/parser/operations/add.js +238 -0
- package/output/core/classes/parser/operations/comma.d.ts +7 -0
- package/output/core/classes/parser/operations/comma.js +11 -0
- package/output/core/classes/parser/operations/compare.d.ts +21 -0
- package/output/core/classes/parser/operations/compare.js +461 -0
- package/output/core/classes/parser/operations/divide.d.ts +2 -0
- package/output/core/classes/parser/operations/divide.js +72 -0
- package/output/core/classes/parser/operations/functions.d.ts +46 -0
- package/output/core/classes/parser/operations/functions.js +430 -0
- package/output/core/classes/parser/operations/multiply.d.ts +11 -0
- package/output/core/classes/parser/operations/multiply.js +321 -0
- package/output/core/classes/parser/operations/power.d.ts +48 -0
- package/output/core/classes/parser/operations/power.js +673 -0
- package/output/core/classes/parser/operations/subtract.d.ts +3 -0
- package/output/core/classes/parser/operations/subtract.js +35 -0
- package/output/core/classes/parser/preprocess.d.ts +14 -0
- package/output/core/classes/parser/preprocess.js +259 -0
- package/output/core/classes/parser/scripting/controlFlow.d.ts +121 -0
- package/output/core/classes/parser/scripting/controlFlow.js +355 -0
- package/output/core/classes/parser/scripting/evaluate.d.ts +10 -0
- package/output/core/classes/parser/scripting/evaluate.js +112 -0
- package/output/core/classes/parser/scripting/functions.d.ts +14 -0
- package/output/core/classes/parser/scripting/functions.js +59 -0
- package/output/core/classes/parser/scripting/scope.d.ts +35 -0
- package/output/core/classes/parser/scripting/scope.js +155 -0
- package/output/core/classes/parser/types.d.ts +125 -0
- package/output/core/classes/parser/types.js +2 -0
- package/output/core/classes/parser/wrappers/IndexedReference.d.ts +31 -0
- package/output/core/classes/parser/wrappers/IndexedReference.js +68 -0
- package/output/core/classes/parser/wrappers/KeyValuePair.d.ts +24 -0
- package/output/core/classes/parser/wrappers/KeyValuePair.js +51 -0
- package/output/core/classes/polynomial/Polynomial.d.ts +500 -0
- package/output/core/classes/polynomial/Polynomial.js +1149 -0
- package/output/core/classes/polynomial/Term.d.ts +222 -0
- package/output/core/classes/polynomial/Term.js +430 -0
- package/output/core/classes/polynomial/functions.d.ts +69 -0
- package/output/core/classes/polynomial/functions.js +126 -0
- package/output/core/classes/polynomial/utils.d.ts +62 -0
- package/output/core/classes/polynomial/utils.js +206 -0
- package/output/core/classes/rational/Rational.d.ts +504 -0
- package/output/core/classes/rational/Rational.js +779 -0
- package/output/core/classes/seq/SEQ.d.ts +13 -0
- package/output/core/classes/seq/SEQ.js +137 -0
- package/output/core/classes/valuesSet/ValuesSet.d.ts +179 -0
- package/output/core/classes/valuesSet/ValuesSet.js +381 -0
- package/output/core/classes/vector/Vector.d.ts +222 -0
- package/output/core/classes/vector/Vector.js +497 -0
- package/output/core/classes/vector/functions.d.ts +28 -0
- package/output/core/classes/vector/functions.js +47 -0
- package/output/core/common/classes/MathematicalAggregate.d.ts +53 -0
- package/output/core/common/classes/MathematicalAggregate.js +140 -0
- package/output/core/common/classes/Scope.d.ts +62 -0
- package/output/core/common/classes/Scope.js +122 -0
- package/output/core/common/classes/StructuredEntity.d.ts +55 -0
- package/output/core/common/classes/StructuredEntity.js +151 -0
- package/output/core/common/common.d.ts +63 -0
- package/output/core/common/common.js +279 -0
- package/output/core/common/functions/functions.d.ts +14 -0
- package/output/core/common/functions/functions.js +33 -0
- package/output/core/common/functions/structuredEntityUtils.d.ts +27 -0
- package/output/core/common/functions/structuredEntityUtils.js +40 -0
- package/output/core/converters/BaseConverter.d.ts +97 -0
- package/output/core/converters/BaseConverter.js +405 -0
- package/output/core/converters/Converter.d.ts +111 -0
- package/output/core/converters/Converter.js +802 -0
- package/output/core/converters/Pattern.d.ts +71 -0
- package/output/core/converters/Pattern.js +302 -0
- package/output/core/dispatch.d.ts +34 -0
- package/output/core/dispatch.js +304 -0
- package/output/core/errors.d.ts +531 -0
- package/output/core/errors.js +621 -0
- package/output/core/functions/bigint/bigint.d.ts +121 -0
- package/output/core/functions/bigint/bigint.js +392 -0
- package/output/core/functions/bigint/primeFactor.d.ts +49 -0
- package/output/core/functions/bigint/primeFactor.js +267 -0
- package/output/core/functions/bigint/primes.d.ts +1 -0
- package/output/core/functions/bigint/primes.js +11 -0
- package/output/core/functions/build/definitions.d.ts +12 -0
- package/output/core/functions/build/definitions.js +133 -0
- package/output/core/functions/build/index.d.ts +32 -0
- package/output/core/functions/build/index.js +136 -0
- package/output/core/functions/complex.d.ts +90 -0
- package/output/core/functions/complex.js +482 -0
- package/output/core/functions/decimal.d.ts +24 -0
- package/output/core/functions/decimal.js +664 -0
- package/output/core/functions/expand/expand.d.ts +42 -0
- package/output/core/functions/expand/expand.js +376 -0
- package/output/core/functions/fresnelNumeric.d.ts +12 -0
- package/output/core/functions/fresnelNumeric.js +123 -0
- package/output/core/functions/numeric.d.ts +140 -0
- package/output/core/functions/numeric.js +790 -0
- package/output/core/functions/rationalNormalization.d.ts +11 -0
- package/output/core/functions/rationalNormalization.js +117 -0
- package/output/core/functions/setFunction.d.ts +19 -0
- package/output/core/functions/setFunction.js +75 -0
- package/output/core/functions/string.d.ts +26 -0
- package/output/core/functions/string.js +101 -0
- package/output/core/functions/subst.d.ts +90 -0
- package/output/core/functions/subst.js +498 -0
- package/output/core/functions/utils.d.ts +24 -0
- package/output/core/functions/utils.js +51 -0
- package/output/core/types.d.ts +48 -0
- package/output/core/types.js +2 -0
- package/output/index.d.ts +339 -0
- package/output/index.js +715 -0
- package/output/math/defint/defintDecimal.d.ts +37 -0
- package/output/math/defint/defintDecimal.js +320 -0
- package/output/math/defint/defintNative.d.ts +57 -0
- package/output/math/defint/defintNative.js +292 -0
- package/output/math/geometry.d.ts +8 -0
- package/output/math/geometry.js +32 -0
- package/output/math/math.d.ts +655 -0
- package/output/math/math.js +1811 -0
- package/output/math/trig.d.ts +518 -0
- package/output/math/trig.js +1444 -0
- package/output/math/trunc.d.ts +19 -0
- package/output/math/trunc.js +36 -0
- package/output/math/utils.d.ts +60 -0
- package/output/math/utils.js +180 -0
- package/output/solve/classes/DecimalMatrix.d.ts +17 -0
- package/output/solve/classes/DecimalMatrix.js +86 -0
- package/output/solve/classes/FunctionSolver.d.ts +135 -0
- package/output/solve/classes/FunctionSolver.js +433 -0
- package/output/solve/classes/MultivariateSolver.d.ts +84 -0
- package/output/solve/classes/MultivariateSolver.js +240 -0
- package/output/solve/classes/PolynomialSolver.d.ts +85 -0
- package/output/solve/classes/PolynomialSolver.js +292 -0
- package/output/solve/classes/SolutionSet.d.ts +153 -0
- package/output/solve/classes/SolutionSet.js +357 -0
- package/output/solve/classes/Solver.d.ts +17 -0
- package/output/solve/classes/Solver.js +132 -0
- package/output/solve/classes/SymbolicSolver.d.ts +74 -0
- package/output/solve/classes/SymbolicSolver.js +601 -0
- package/output/solve/linsolve.d.ts +51 -0
- package/output/solve/linsolve.js +225 -0
- package/output/solve/solve.d.ts +34 -0
- package/output/solve/solve.js +260 -0
- package/output/solve/solveSystem.d.ts +31 -0
- package/output/solve/solveSystem.js +290 -0
- package/output/solve/utils.d.ts +9 -0
- package/output/solve/utils.js +62 -0
- package/output/utils/array.d.ts +42 -0
- package/output/utils/array.js +98 -0
- package/output/utils/debug.d.ts +131 -0
- package/output/utils/debug.js +295 -0
- package/output/utils/decimal.d.ts +3 -0
- package/output/utils/decimal.js +16 -0
- package/output/utils/numeric.d.ts +14 -0
- package/output/utils/numeric.js +51 -0
- package/output/utils/object.d.ts +26 -0
- package/output/utils/object.js +56 -0
- package/package.json +213 -57
- package/.travis.yml +0 -3
- package/Algebra.js +0 -4568
- package/BREAKING_CHANGES.md +0 -5
- package/CODE_OF_CONDUCT.md +0 -46
- package/CONTRIBUTING.md +0 -14
- package/Calculus.js +0 -2675
- package/Extra.js +0 -622
- package/Solve.js +0 -1783
- package/all.js +0 -16
- package/all.min.js +0 -1
- package/gulpfile.js +0 -16
- package/index.html +0 -158
- package/license.txt +0 -19
- package/nerdamer.core.js +0 -12510
- package/spec/LaTeX.spec.js +0 -302
- package/spec/TeXConvert.spec.js +0 -8
- package/spec/algebra.spec.js +0 -287
- package/spec/basic_parser.spec.js +0 -134
- package/spec/build.spec.js +0 -131
- package/spec/calculus.spec.js +0 -183
- package/spec/core.spec.js +0 -2970
- package/spec/extra.spec.js +0 -54
- package/spec/solve.spec.js +0 -126
- package/spec/support/jasmine.json +0 -11
- package/spec/support/utils.js +0 -42
- package/spec/text.spec.js +0 -132
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.laplace = laplace;
|
|
4
|
+
const Expression_1 = require("../../core/classes/expression/Expression");
|
|
5
|
+
const products_1 = require("../../core/classes/expression/products");
|
|
6
|
+
const shortcuts_1 = require("../../core/classes/expression/shortcuts");
|
|
7
|
+
const utils_1 = require("../../core/classes/expression/utils");
|
|
8
|
+
const constants_1 = require("../../core/classes/parser/constants");
|
|
9
|
+
const Pattern_1 = require("../../core/converters/Pattern");
|
|
10
|
+
const laplaceTable_1 = require("./laplaceTable");
|
|
11
|
+
/**
|
|
12
|
+
* Computes a symbolic Laplace transform from a time variable to a transform variable.
|
|
13
|
+
*
|
|
14
|
+
* The expression is expanded, linear sums are transformed term by term,
|
|
15
|
+
* constants independent of the time variable are extracted, and the remaining
|
|
16
|
+
* expression is matched against the transform table.
|
|
17
|
+
*
|
|
18
|
+
* @param expr - Time-domain expression.
|
|
19
|
+
* @param t - Plain time-domain variable.
|
|
20
|
+
* @param s - Plain transform-domain variable.
|
|
21
|
+
* @returns The symbolic transform, or an unevaluated `laplace(expr, t, s)`
|
|
22
|
+
* Expression when no table rule resolves the input.
|
|
23
|
+
* @throws {@link core!UnexpectedInputError} If `t` or `s` is not a plain variable.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* laplace('sin(t)', 't', 's').text();
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
function laplace(expr, t, s) {
|
|
31
|
+
expr = Expression_1.Expression.create(expr).expand();
|
|
32
|
+
s = (0, utils_1.assertPlainVariableAndGetString)(Expression_1.Expression.create(s));
|
|
33
|
+
t = (0, utils_1.assertPlainVariableAndGetString)(Expression_1.Expression.create(t));
|
|
34
|
+
let retval;
|
|
35
|
+
// Linearity over sums
|
|
36
|
+
if (expr.isSum() && expr.isLinear()) {
|
|
37
|
+
const elements = expr.elementsArray();
|
|
38
|
+
retval = (0, shortcuts_1.zero)();
|
|
39
|
+
for (const e of elements) {
|
|
40
|
+
const transform = laplace(e, t, s);
|
|
41
|
+
// Any unevaluated laplace(...) means this branch failed
|
|
42
|
+
if (transform.isFunction(constants_1.LAPLACE)) {
|
|
43
|
+
retval = undefined;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
retval = retval.plus(transform);
|
|
47
|
+
}
|
|
48
|
+
if (retval) {
|
|
49
|
+
return retval;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Pull out constants from products
|
|
53
|
+
if (expr.isProduct()) {
|
|
54
|
+
// let constants: Expression;
|
|
55
|
+
// let expression: Expression;
|
|
56
|
+
const { constants, expression } = (0, products_1.constantsFreeProduct)(expr, t);
|
|
57
|
+
// Only worthwhile if something was actually extracted
|
|
58
|
+
if (!constants.isOne()) {
|
|
59
|
+
const transform = laplace(expression, t, s);
|
|
60
|
+
if (!transform.isFunction(constants_1.LAPLACE)) {
|
|
61
|
+
return constants.times(transform);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Pattern writes a negative exponential power as a reciprocal, while the transform table
|
|
66
|
+
// stores exponential factors with their signed rate in the exponent. Apply the frequency
|
|
67
|
+
// shift directly so the remainder can use the existing table instead of duplicating rules.
|
|
68
|
+
const factors = expr.isProduct() ? expr.elementsArray() : [expr];
|
|
69
|
+
for (let i = 0; i < factors.length; i++) {
|
|
70
|
+
const factor = factors[i];
|
|
71
|
+
if (!factor.isEXP()) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const base = factor.getBase();
|
|
75
|
+
const exponent = factor.getPower();
|
|
76
|
+
if (base.hasVariable(t) || !exponent.isPolynomialLike()) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const coefficients = exponent.coeffs(t).toArray();
|
|
80
|
+
if (coefficients.length !== 2 || !coefficients[0].isZero()) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const rate = coefficients[1];
|
|
84
|
+
if (rate.sign() !== -1) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
let remainder = (0, shortcuts_1.one)();
|
|
88
|
+
for (let j = 0; j < factors.length; j++) {
|
|
89
|
+
if (j !== i) {
|
|
90
|
+
remainder = remainder.times(factors[j]);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const transform = laplace(remainder, t, s);
|
|
94
|
+
if (!transform.isFunction(constants_1.LAPLACE)) {
|
|
95
|
+
const baseLog = base.isE() ? (0, shortcuts_1.one)() : Expression_1.Expression.toFunction(constants_1.LOG, [base]);
|
|
96
|
+
const shiftedVariable = Expression_1.Expression.Variable(s).minus(rate.copy().times(baseLog));
|
|
97
|
+
return transform.subst(s, shiftedVariable);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Base/derived table lookup
|
|
101
|
+
retval = laplaceTable_1.tableOfTransforms.lookup(new Pattern_1.Pattern(expr, [t]), 0);
|
|
102
|
+
if (retval) {
|
|
103
|
+
if (s !== 's') {
|
|
104
|
+
retval = retval.evaluate({ s });
|
|
105
|
+
}
|
|
106
|
+
return retval;
|
|
107
|
+
}
|
|
108
|
+
return Expression_1.Expression.toFunction(constants_1.LAPLACE, [expr, t, s]);
|
|
109
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tableOfTransforms = void 0;
|
|
4
|
+
const LookupTable_1 = require("../../core/classes/lookupTable/LookupTable");
|
|
5
|
+
const diff_1 = require("../derivative/diff");
|
|
6
|
+
const laplaceTable = {
|
|
7
|
+
// L{a1}
|
|
8
|
+
a1: (p, _depth) => {
|
|
9
|
+
return p.fromPattern('a1/s');
|
|
10
|
+
},
|
|
11
|
+
// L{a1*t^n1}
|
|
12
|
+
'a1*x1^n1': p => {
|
|
13
|
+
const { n1 } = p.references;
|
|
14
|
+
// Reject Gamma poles: n1 = -1, -2, -3, ...
|
|
15
|
+
if (n1.isNegative() && n1.plus(1).isInteger()) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
return p.fromPattern('a1*gamma(n1+1)/s^(n1+1)');
|
|
19
|
+
},
|
|
20
|
+
// L{a1*(a2)^(a3*x1)}
|
|
21
|
+
'a1*(a2)^(a3*x1^n1)': p => {
|
|
22
|
+
if (!p.get('n1').isOne()) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
// a^(b t) = e^(log(a) b t)
|
|
26
|
+
return p.fromPattern('a1/(s-log(a2)*a3)');
|
|
27
|
+
},
|
|
28
|
+
// L{a1*sin(a2*x1)}
|
|
29
|
+
'a1*sin(a2*x1^n1)^n2': p => {
|
|
30
|
+
if (!p.get('n1').isOne() || !p.get('n2').isOne()) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
return p.fromPattern('(a1*a2)/(s^2+a2^2)');
|
|
34
|
+
},
|
|
35
|
+
// L{a1*cos(a2*x1)}
|
|
36
|
+
'a1*cos(a2*x1^n1)^n2': p => {
|
|
37
|
+
if (!p.get('n1').isOne() || !p.get('n2').isOne()) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
return p.fromPattern('(a1*s)/(s^2+a2^2)');
|
|
41
|
+
},
|
|
42
|
+
'a1*(a2)^(a3*x1^n1)*x1^n2': p => {
|
|
43
|
+
const { n1, n2 } = p.references;
|
|
44
|
+
if (!n1.isOne()) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
// Reject the pole at Gamma(0), Gamma(-1), ...
|
|
48
|
+
if (n2.isNegative() && n2.plus(1).isInteger()) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
return p.fromPattern('a1*gamma(n2+1)/(s-log(a2)*a3)^(n2+1)');
|
|
52
|
+
},
|
|
53
|
+
'a1*x1^n1*sin(a2*x1^n2)^n3': p => {
|
|
54
|
+
const { _a1, n1, n2, n3, _a2 } = p.references;
|
|
55
|
+
if (!n2.isOne() || !n3.isOne()) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
if (!n1.isInteger() || n1.isNegative()) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
const n = Number(n1.getMultiplier().numerator);
|
|
62
|
+
let result = p.fromPattern('(a1*a2)/(s^2+a2^2)');
|
|
63
|
+
for (let i = 0; i < n; i++) {
|
|
64
|
+
result = (0, diff_1.diff)(result, 's').neg();
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
},
|
|
68
|
+
'a1*x1^n1*cos(a2*x1^n2)^n3': p => {
|
|
69
|
+
const { _a1, n1, n2, n3, _a2 } = p.references;
|
|
70
|
+
if (!n2.isOne() || !n3.isOne()) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
if (!n1.isInteger() || n1.isNegative()) {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
const n = Number(n1.getMultiplier().numerator);
|
|
77
|
+
let result = p.fromPattern('(a1*s)/(s^2+a2^2)');
|
|
78
|
+
for (let i = 0; i < n; i++) {
|
|
79
|
+
result = (0, diff_1.diff)(result, 's').neg();
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
},
|
|
83
|
+
'a1*(a2)^(a3*x1^n1)*sin(a4*x1^n2)^n3': p => {
|
|
84
|
+
const { n1, n2, n3 } = p.references;
|
|
85
|
+
if (!n1.isOne() || !n2.isOne() || !n3.isOne()) {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
return p.fromPattern('(a1*a4)/((s-log(a2)*a3)^2+a4^2)');
|
|
89
|
+
},
|
|
90
|
+
'a1*(a2)^(a3*x1^n1)*cos(a4*x1^n2)^n3': p => {
|
|
91
|
+
const { n1, n2, n3 } = p.references;
|
|
92
|
+
if (!n1.isOne() || !n2.isOne() || !n3.isOne()) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
return p.fromPattern('a1*(s-log(a2)*a3)/((s-log(a2)*a3)^2+a4^2)');
|
|
96
|
+
},
|
|
97
|
+
'a1*cos(a2*x1^n1)^n2*sin(a3*x1^n3)^n4': p => {
|
|
98
|
+
const { _a1, a2, a3, n1, n2, n3, n4 } = p.references;
|
|
99
|
+
if (!n1.isOne() || !n2.isOne() || !n3.isOne() || !n4.isOne()) {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
if (!a2.eq(a3)) {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
return p.fromPattern('(a1*a2)/(s^2+4*a2^2)');
|
|
106
|
+
},
|
|
107
|
+
'a1*(a2)^(a3*x1^n1)*x1^n2*sin(a4*x1^n3)^n4': p => {
|
|
108
|
+
const { n1, n2, n3, n4 } = p.references;
|
|
109
|
+
if (!n1.isOne() || !n2.isOne() || !n3.isOne() || !n4.isOne()) {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
return p.fromPattern('(2*a1*a4*(s-a3*log(a2)))/((a4^2+(s-a3*log(a2))^2)^2)');
|
|
113
|
+
},
|
|
114
|
+
'a1*(a2)^(a3*x1^n1)*x1^n2*cos(a4*x1^n3)^n4': p => {
|
|
115
|
+
const { n1, n2, n3, n4 } = p.references;
|
|
116
|
+
if (!n1.isOne() || !n2.isOne() || !n3.isOne() || !n4.isOne()) {
|
|
117
|
+
return undefined;
|
|
118
|
+
}
|
|
119
|
+
return p.fromPattern('(a1*((s-a3*log(a2))^2-a4^2))/((a4^2+(s-a3*log(a2))^2)^2)');
|
|
120
|
+
},
|
|
121
|
+
'a1*(a2)^(a3*x1^n1)*(a4*sin(a5*x1^n2)^n3-a6*x1^n4*cos(a7*x1^n5)^n6)^n7': p => {
|
|
122
|
+
const { n1, n2, n3, n4, n5, n6, n7, a5, a7 } = p.references;
|
|
123
|
+
if (!n1.isOne() ||
|
|
124
|
+
!n2.isOne() ||
|
|
125
|
+
!n3.isOne() ||
|
|
126
|
+
!n4.isOne() ||
|
|
127
|
+
!n5.isOne() ||
|
|
128
|
+
!n6.isOne() ||
|
|
129
|
+
!n7.isOne()) {
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
if (!a5.eq(a7)) {
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
return p.fromPattern('(a1*(a4*a5^2-a6*((s-a3*log(a2))^2-a5^2)))/(((s-a3*log(a2))^2+a5^2)^2)');
|
|
136
|
+
},
|
|
137
|
+
'a1*(a2)^(a3*x1^n1)*(a4*sin(a5*x1^n2)^n3+a6*x1^n4*cos(a7*x1^n5)^n6)^n7': p => {
|
|
138
|
+
const { n1, n2, n3, n4, n5, n6, n7, a5, a7 } = p.references;
|
|
139
|
+
if (!n1.isOne() ||
|
|
140
|
+
!n2.isOne() ||
|
|
141
|
+
!n3.isOne() ||
|
|
142
|
+
!n4.isOne() ||
|
|
143
|
+
!n5.isOne() ||
|
|
144
|
+
!n6.isOne() ||
|
|
145
|
+
!n7.isOne()) {
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
if (!a5.eq(a7)) {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
return p.fromPattern('(a1*(a4*a5^2+a6*((s-a3*log(a2))^2-a5^2)))/(((s-a3*log(a2))^2+a5^2)^2)');
|
|
152
|
+
},
|
|
153
|
+
// e^(a t) sinh(b t)
|
|
154
|
+
'a1*(a2)^(a3*x1^n1)*sinh(a4*x1^n2)^n3': p => {
|
|
155
|
+
const { n1, n2, n3 } = p.references;
|
|
156
|
+
if (!n1.isOne() || !n2.isOne() || !n3.isOne()) {
|
|
157
|
+
return undefined;
|
|
158
|
+
}
|
|
159
|
+
return p.fromPattern('(a1*a4)/((s-a3*log(a2))^2-a4^2)');
|
|
160
|
+
},
|
|
161
|
+
// e^(a t) cosh(b t)
|
|
162
|
+
'a1*(a2)^(a3*x1^n1)*cosh(a4*x1^n2)^n3': p => {
|
|
163
|
+
const { n1, n2, n3 } = p.references;
|
|
164
|
+
if (!n1.isOne() || !n2.isOne() || !n3.isOne()) {
|
|
165
|
+
return undefined;
|
|
166
|
+
}
|
|
167
|
+
return p.fromPattern('(a1*(s-a3*log(a2)))/((s-a3*log(a2))^2-a4^2)');
|
|
168
|
+
},
|
|
169
|
+
// t*e^(a t) sinh(b t)
|
|
170
|
+
'a1*(a2)^(a3*x1^n1)*x1^n2*sinh(a4*x1^n3)^n4': p => {
|
|
171
|
+
const { n1, n2, n3, n4 } = p.references;
|
|
172
|
+
if (!n1.isOne() || !n2.isOne() || !n3.isOne() || !n4.isOne()) {
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
return p.fromPattern('(2*a1*a4*(s-a3*log(a2)))/(((s-a3*log(a2))^2-a4^2)^2)');
|
|
176
|
+
},
|
|
177
|
+
// t*e^(a t) cosh(b t)
|
|
178
|
+
'a1*(a2)^(a3*x1^n1)*x1^n2*cosh(a4*x1^n3)^n4': p => {
|
|
179
|
+
const { n1, n2, n3, n4 } = p.references;
|
|
180
|
+
if (!n1.isOne() || !n2.isOne() || !n3.isOne() || !n4.isOne()) {
|
|
181
|
+
return undefined;
|
|
182
|
+
}
|
|
183
|
+
return p.fromPattern('(a1*((s-a3*log(a2))^2+a4^2))/(((s-a3*log(a2))^2-a4^2)^2)');
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
exports.tableOfTransforms = new LookupTable_1.LookupTable();
|
|
187
|
+
exports.tableOfTransforms.addEntries(laplaceTable);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Expression } from '../../core/classes/expression/Expression';
|
|
2
|
+
import type { ExpressionInput } from '../../core/types';
|
|
3
|
+
/** Direction from which the independent variable approaches a finite point. */
|
|
4
|
+
export type LimitDir = 'both' | 'left' | 'right';
|
|
5
|
+
/**
|
|
6
|
+
* Computes a symbolic finite or infinite limit.
|
|
7
|
+
*
|
|
8
|
+
* The implementation combines direct substitution, side-aware pole analysis,
|
|
9
|
+
* simplification, bounded L'Hopital recursion, indeterminate-form rewrites,
|
|
10
|
+
* composition rules, dominant-growth analysis at infinity, and a table of
|
|
11
|
+
* known limits.
|
|
12
|
+
*
|
|
13
|
+
* @remarks
|
|
14
|
+
* `'left'` and `'right'` request one-sided limits; `'both'` is the default
|
|
15
|
+
* two-sided direction. Direction is significant for poles and piecewise
|
|
16
|
+
* functions such as `sign`. When the available strategies cannot establish a
|
|
17
|
+
* result, the function returns an unevaluated `limit(expr, x, val, dir)`
|
|
18
|
+
* Expression. That form can therefore mean unsupported, undefined, or
|
|
19
|
+
* non-existent; it is not a proof that a limit exists.
|
|
20
|
+
*
|
|
21
|
+
* The implementation primarily reasons about real signs and real growth.
|
|
22
|
+
* Oscillatory and branch-sensitive complex cases are intentionally left
|
|
23
|
+
* symbolic unless a specific rule resolves them. Decimal input is preserved in
|
|
24
|
+
* the formatting of a resolved result.
|
|
25
|
+
*
|
|
26
|
+
* `depth` is an internal recursion counter and should normally be omitted.
|
|
27
|
+
*
|
|
28
|
+
* @param expr - Expression whose limit is sought.
|
|
29
|
+
* @param x - Independent variable.
|
|
30
|
+
* @param val - Finite value or positive/negative infinity to approach.
|
|
31
|
+
* @param dir - Two-sided, left-sided, or right-sided approach.
|
|
32
|
+
* @param depth - Internal recursion depth. Defaults to zero.
|
|
33
|
+
* @returns The resolved limit or an unevaluated `limit(...)` Expression.
|
|
34
|
+
*/
|
|
35
|
+
export declare function limit(expr: ExpressionInput, x: ExpressionInput, val: ExpressionInput, dir?: LimitDir, depth?: number): Expression;
|