multinomial.js (1794B)
1 "use strict"; 2 3 Object.defineProperty(exports, "__esModule", { 4 value: true 5 }); 6 exports.createMultinomial = void 0; 7 8 var _collection = require("../../utils/collection.js"); 9 10 var _factory = require("../../utils/factory.js"); 11 12 var name = 'multinomial'; 13 var dependencies = ['typed', 'add', 'divide', 'multiply', 'factorial', 'isInteger', 'isPositive']; 14 var createMultinomial = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) { 15 var typed = _ref.typed, 16 add = _ref.add, 17 divide = _ref.divide, 18 multiply = _ref.multiply, 19 factorial = _ref.factorial, 20 isInteger = _ref.isInteger, 21 isPositive = _ref.isPositive; 22 23 /** 24 * Multinomial Coefficients compute the number of ways of picking a1, a2, ..., ai unordered outcomes from `n` possibilities. 25 * 26 * multinomial takes one array of integers as an argument. 27 * The following condition must be enforced: every ai <= 0 28 * 29 * Syntax: 30 * 31 * math.multinomial(a) // a is an array type 32 * 33 * Examples: 34 * 35 * math.multinomial([1,2,1]) // returns 12 36 * 37 * See also: 38 * 39 * combinations, factorial 40 * 41 * @param {number[] | BigNumber[]} a Integer numbers of objects in the subset 42 * @return {Number | BigNumber} Multinomial coefficient. 43 */ 44 return typed(name, { 45 'Array | Matrix': function ArrayMatrix(a) { 46 var sum = 0; 47 var denom = 1; 48 (0, _collection.deepForEach)(a, function (ai) { 49 if (!isInteger(ai) || !isPositive(ai)) { 50 throw new TypeError('Positive integer value expected in function multinomial'); 51 } 52 53 sum = add(sum, ai); 54 denom = multiply(denom, factorial(ai)); 55 }); 56 return divide(factorial(sum), denom); 57 } 58 }); 59 }); 60 exports.createMultinomial = createMultinomial;