3.1 KiB
| sidebar_position | title |
|---|---|
| 10 | Danger |
The Danger library contains newer experimental functions which are less stable than Squiggle as a whole. Beware: their name, behavior, namespace or existence may change at any time.
laplace
Danger.laplace: (number, number) => number
Calculates the probability implied by Laplace's rule of succession
trials = 10;
successes = 1;
Danger.laplace(trials, successes); // (successes + 1) / (trials + 2) = 2 / 12 = 0.1666
factorial
Danger.factorial: (number) => number
Returns the factorial of a number
choose
Danger.choose: (number, number) => number
Danger.choose(n,k) returns factorial(n) / (factorial(n - k) *.factorial(k)), i.e., the number of ways you can choose k items from n choices, without repetition. This function is also known as the binomial coefficient.
binomial
Danger.binomial: (number, number, number) => number
Danger.binomial(n, k, p) returns choose((n, k)) * pow(p, k) * pow(1 - p, n - k), i.e., the probability that an event of probability p will happen exactly k times in n draws.
integrateFunctionBetweenWithNumIntegrationPoints
Danger.integrateFunctionBetweenWithNumIntegrationPoints: (number => number, number, number, number) => number
Danger.integrateFunctionBetweenWithNumIntegrationPoints(f, min, max, numIntegrationPoints) integrates the function f between min and max, and computes numIntegrationPoints in between to do so.
Note that the function f has to take in and return numbers. To integrate a function which returns distributios, use:
auxiliaryF(x) = mean(f(x))
Danger.integrateFunctionBetweenWithNumIntegrationPoints(auxiliaryF, min, max, numIntegrationPoints)
integrateFunctionBetweenWithEpsilon
Danger.integrateFunctionBetweenWithEpsilon: (number => number, number, number, number) => number
Danger.integrateFunctionBetweenWithEpsilon(f, min, max, epsilon) integrates the function f between min and max, and uses an interval of epsilon between integration points when doing so. This makes its runtime less predictable than integrateFunctionBetweenWithNumIntegrationPoints, because runtime will not only depend on epsilon, but also on min and max.
Same caveats as integrateFunctionBetweenWithNumIntegrationPoints apply.
optimalAllocationGivenDiminishingMarginalReturnsForManyFunctions
Danger.optimalAllocationGivenDiminishingMarginalReturnsForManyFunctions: (array<number => number>, number, number) => number
Danger.optimalAllocationGivenDiminishingMarginalReturnsForManyFunctions([f1, f2], funds, approximateIncrement) computes the optimal allocation of $funds between f1 and f2. For the answer given to be correct, f1 and f2 will have to be decreasing, i.e., if x > y, then f_i(x) < f_i(y).
Example:
Danger.optimalAllocationGivenDiminishingMarginalReturnsForManyFunctions([{|x| 20-x}, {|y| 10}], 100, 0.01)
Note also that the array ought to have more than one function in it.