@Override public IExpr evaluate(final IAST ast, EvalEngine engine) { Validate.checkSize(ast, 3); if (ast.arg1().isList()) { IAST list = (IAST) ast.arg1(); IExpr r = ast.arg2(); return F.Divide(F.Total(F.Power(F.Subtract(list, F.Mean(list)), r)), F.Length(list)); } return F.NIL; }
@Override public IExpr evaluate(final IAST ast, EvalEngine engine) { Validate.checkSize(ast, 2); int[] dim = ast.arg1().isMatrix(); if (dim == null && ast.arg1().isListOfLists()) { return F.NIL; } if (dim != null) { IAST matrix = (IAST) ast.arg1(); return matrix.mapMatrixColumns(dim, x -> F.MeanDeviation(x)); } int length = ast.arg1().isVector(); if (length > 0) { IAST vector = (IAST) ast.arg1(); int size = vector.size(); IASTAppendable sum = F.PlusAlloc(size); final IExpr mean = F.eval(F.Mean(F.Negate(vector))); vector.forEach(x -> sum.append(F.Abs(F.Plus(x, mean)))); return F.Times(F.Power(F.ZZ(size - 1), -1), sum); } return F.NIL; }
@Override public IExpr evaluate(final IAST ast, EvalEngine engine) { Validate.checkSize(ast, 2); IExpr arg1 = ast.arg1(); int[] dim = arg1.isMatrix(); if (dim == null && arg1.isListOfLists()) { return F.NIL; } if (dim != null) { IAST matrix = (IAST) arg1; return F.Transpose(matrix.mapMatrixColumns(dim, v -> F.Standardize(v))); } IExpr sd = F.StandardDeviation.of(engine, arg1); if (!sd.isZero()) { return engine.evaluate(F.Divide(F.Subtract(arg1, F.Mean(arg1)), sd)); } return F.NIL; }