public class FORECAST extends AbstractFunction
{
public Expr evaluate(Expr[] args) throws ExprException {
assertArgCount(args, 3);
Expr eF = evalArg(args[0]);
if (!(eF instanceof ExprNumber))
return ExprError.VALUE;
Expr eY = evalArg(args[1]);
if (!(eY instanceof ExprArray))
return ExprError.VALUE;
Expr eX = evalArg(args[2]);
if (!(eX instanceof ExprArray))
return ExprError.VALUE;
double forecastX = ((ExprNumber) eF).doubleValue();
ExprArray knownY = (ExprArray) eY;
ExprArray knownX = (ExprArray) eX;
if (knownY.length() != knownX.length())
return ExprError.NA;
Expr aeY = AVERAGE.average(knownY);
if (aeY instanceof ExprError)
return aeY;
Expr aeX = AVERAGE.average(knownX);
if (aeX instanceof ExprError)
return aeX;
double averageY = ((ExprNumber) aeY).doubleValue();
double averageX = ((ExprNumber) aeX).doubleValue();