public virtual void ComputeSamples(double proportion = 1)
{
double requiredPower = Power;
// Attempt to locate the optimal sample size
// to attain the required power by locating
// a zero in the difference function:
double sol = BrentSearch.FindRoot(n =>
{
Samples1 = n;
Samples2 = n * proportion;
ComputePower();
return requiredPower - Power;
},
lowerBound: 2,
upperBound: 1e+4);
// Check it
Samples1 = sol;
Samples2 = sol * proportion;
ComputePower();
double newPower = Power;
Power = requiredPower;
if (Math.Abs(requiredPower - newPower) > 1e-5)
Samples1 = Samples2 = Double.NaN;
}