include node_modules so release .zip is deployable
This commit is contained in:
+68
@@ -0,0 +1,68 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.assoc_legendre = exports.legendre = void 0;
|
||||
//================================================================
|
||||
/**
|
||||
* @packageDocumentation
|
||||
* @module std
|
||||
*/
|
||||
//================================================================
|
||||
var InvalidArgument_1 = require("../../exception/InvalidArgument");
|
||||
/**
|
||||
* Legendre polynomials.
|
||||
*
|
||||
* @reference http://en.cppreference.com/w/cpp/numeric/special_math/legendre
|
||||
*/
|
||||
function legendre(n, x) {
|
||||
return assoc_legendre(n, 0, x);
|
||||
}
|
||||
exports.legendre = legendre;
|
||||
/**
|
||||
* Associated Legendre polynomials.
|
||||
*
|
||||
* @reference https://en.wikipedia.org/wiki/Associated_Legendre_polynomials
|
||||
*/
|
||||
function assoc_legendre(n, m, x) {
|
||||
// VALIDATE PARAMETERS
|
||||
if ((n = Math.floor(n)) < 0 || (m = Math.floor(m)) < 0)
|
||||
throw new InvalidArgument_1.InvalidArgument("Error on std.assoc_legendre(): both n and m must be unsigned integer -> (n = ".concat(n, ", m = ").concat(m, ")."));
|
||||
else if (Math.abs(x) > 1)
|
||||
throw new InvalidArgument_1.InvalidArgument("Error on std.assoc_legendre(): must be |x| <= 1 -> (x = ".concat(x, ")."));
|
||||
// MEMORIZATION
|
||||
var matrix = [[1, x]];
|
||||
matrix.length = m + 1;
|
||||
for (var i = 1; i < matrix.length; ++i)
|
||||
matrix[i] = [];
|
||||
// COMPUTE RETURN VALUE
|
||||
return _Compute_assoc_legendre(n, m, x, matrix);
|
||||
}
|
||||
exports.assoc_legendre = assoc_legendre;
|
||||
function _Compute_legendre(n, x, memory) {
|
||||
if (memory.length > n)
|
||||
return memory[n];
|
||||
var pn_1 = _Compute_legendre(n - 1, x, memory);
|
||||
var pn_2 = _Compute_legendre(n - 2, x, memory);
|
||||
var ret = (2 * n - 1) * x * pn_1 - (n - 1) * pn_2;
|
||||
ret /= n;
|
||||
memory[n] = ret;
|
||||
return ret;
|
||||
}
|
||||
function _Compute_assoc_legendre(n, m, x, matrix) {
|
||||
if (n < 0)
|
||||
n = -n - 1;
|
||||
if (m === 0)
|
||||
return _Compute_legendre(n, x, matrix[0]);
|
||||
else if (matrix[m].length > n && matrix[m][n] !== undefined)
|
||||
return matrix[m][n];
|
||||
var left = (n - m + 1) *
|
||||
(n - m + 2) *
|
||||
_Compute_assoc_legendre(n + 1, m - 1, x, matrix);
|
||||
var right = (n + m - 1) *
|
||||
(n + m) *
|
||||
_Compute_assoc_legendre(n - 1, m - 1, x, matrix);
|
||||
var ret = (left - right) / (2 * n + 1);
|
||||
ret /= Math.sqrt(1 - x * x);
|
||||
matrix[m][n] = ret;
|
||||
return ret;
|
||||
}
|
||||
//# sourceMappingURL=legendres.js.map
|
||||
Reference in New Issue
Block a user