106 lines
3.9 KiB
JavaScript
106 lines
3.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.comp_ellint_3 = exports.ellint_3 = exports.comp_ellint_2 = exports.ellint_2 = exports.comp_ellint_1 = exports.ellint_1 = void 0;
|
|
//================================================================
|
|
/**
|
|
* @packageDocumentation
|
|
* @module std
|
|
*/
|
|
//================================================================
|
|
var MathUtil_1 = require("../../internal/numeric/MathUtil");
|
|
var InvalidArgument_1 = require("../../exception/InvalidArgument");
|
|
/* ---------------------------------------------------------------
|
|
FIRST
|
|
--------------------------------------------------------------- */
|
|
/**
|
|
* Incomplete elliptic integral of the 1st kind.
|
|
*
|
|
* @reference https://en.wikipedia.org/wiki/Elliptic_integral#Complete_elliptic_integral_of_the_first_kind
|
|
*/
|
|
function ellint_1(k, phi) {
|
|
// FORMULA OF INTEGRAL
|
|
var formula = function (x) {
|
|
return 1.0 / _Common_formula(k, x);
|
|
};
|
|
return _Post_process("ellint_1", k, phi, formula);
|
|
}
|
|
exports.ellint_1 = ellint_1;
|
|
/**
|
|
* Complete elliptic integral of the 1st kind.
|
|
*
|
|
* @reference https://en.wikipedia.org/wiki/Elliptic_integral#Elliptic_integral_of_the_first_kind
|
|
*/
|
|
function comp_ellint_1(k) {
|
|
return ellint_1(k, Math.PI / 2);
|
|
}
|
|
exports.comp_ellint_1 = comp_ellint_1;
|
|
/* ---------------------------------------------------------------
|
|
SECOND
|
|
--------------------------------------------------------------- */
|
|
/**
|
|
* Incomplete elliptic integral of the 2nd kind.
|
|
*
|
|
* @reference https://en.wikipedia.org/wiki/Elliptic_integral#Incomplete_elliptic_integral_of_the_second_kind
|
|
*/
|
|
function ellint_2(k, phi) {
|
|
var formula = function (x) {
|
|
return _Common_formula(k, x);
|
|
};
|
|
return _Post_process("ellint_2", k, phi, formula);
|
|
}
|
|
exports.ellint_2 = ellint_2;
|
|
/**
|
|
* Complete elliptic integral of the 2nd kind.
|
|
*
|
|
* @reference https://en.wikipedia.org/wiki/Elliptic_integral#Complete_elliptic_integral_of_the_second_kind
|
|
*/
|
|
function comp_ellint_2(k) {
|
|
return ellint_2(k, Math.PI / 2);
|
|
}
|
|
exports.comp_ellint_2 = comp_ellint_2;
|
|
/* ---------------------------------------------------------------
|
|
THIRD
|
|
--------------------------------------------------------------- */
|
|
/**
|
|
* Incomplete elliptic integral of the 3rd kind.
|
|
*
|
|
* @reference https://en.wikipedia.org/wiki/Elliptic_integral#Complete_elliptic_integral_of_the_third_kind
|
|
*/
|
|
function ellint_3(k, v, phi) {
|
|
// SPECIAL VALIDATIONS ONLY FOR SERIES-3
|
|
var predicator = 1 / Math.pow(Math.sin(phi), 2);
|
|
if (v > predicator)
|
|
throw new InvalidArgument_1.InvalidArgument("Error on std.ellint_3(): must be v < (1 / sin^2(phi)) -> (v = ".concat(v, ", 1 / sin^2(phi) = ").concat(predicator, ")."));
|
|
return _Ellint_3(k, v, phi);
|
|
}
|
|
exports.ellint_3 = ellint_3;
|
|
/**
|
|
* Complete elliptic integral of the 3rd kind.
|
|
*
|
|
* @reference https://en.wikipedia.org/wiki/Elliptic_integral#Incomplete_elliptic_integral_of_the_third_kind
|
|
*/
|
|
function comp_ellint_3(k, n) {
|
|
return ellint_3(k, n, Math.PI / 2);
|
|
}
|
|
exports.comp_ellint_3 = comp_ellint_3;
|
|
function _Ellint_3(k, v, phi) {
|
|
var formula = function (x) {
|
|
var denominator = 1 - v * Math.pow(Math.sin(x), 2);
|
|
denominator *= _Common_formula(k, x);
|
|
return 1.0 / denominator;
|
|
};
|
|
return _Post_process("ellint_3", k, phi, formula);
|
|
}
|
|
/* ---------------------------------------------------------------
|
|
BACKGROUNDS
|
|
--------------------------------------------------------------- */
|
|
function _Common_formula(k, x) {
|
|
return Math.sqrt(1 - Math.pow(k * Math.sin(x), 2));
|
|
}
|
|
function _Post_process(func, k, phi, formula) {
|
|
if (Math.abs(k) > 1)
|
|
throw new InvalidArgument_1.InvalidArgument("Error on std.".concat(func, "(): must be |k| <= 1 -> (k = ").concat(k, ")."));
|
|
var area = MathUtil_1.MathUtil.integral(formula, 0, phi);
|
|
return phi < 0 ? -area : area;
|
|
}
|
|
//# sourceMappingURL=ellints.js.map
|