@Override public IExpr median(IAST dist) { IExpr[] minMax = minmax(dist); if (minMax != null) { IExpr l = minMax[0]; IExpr r = minMax[1]; // (l,r) => -1 + l + Max(1, Ceiling((1/2)*(1 - l + r))) return F.Plus(F.CN1, l, F.Max(F.C1, F.Ceiling(F.Times(F.C1D2, F.Plus(F.C1, F.Negate(l), r))))); } return F.NIL; }
@Override public IExpr evaluate(final IAST functionList, EvalEngine engine) { if (functionList.size() != 3) { throw new WrongNumberOfArguments(functionList, 2, functionList.argSize()); } IExpr arg1 = functionList.arg1(); IExpr arg2 = functionList.arg2(); int dim1 = arg1.isVector(); if (dim1 > (-1)) { int dim2 = arg2.isVector(); if (dim1 == dim2) { if (dim1 == 0) { return F.C0; } IAST a1 = ((IAST) arg1); IAST a2 = ((IAST) arg2); IASTAppendable maxAST = F.Max(); return maxAST.appendArgs(a1.size(), i -> F.Abs(F.Subtract(a1.get(i), a2.get(i)))); // for (int i = 1; i < a1.size(); i++) { // maxAST.append(F.Abs(F.Subtract(a1.get(i), a2.get(i)))); // } // return maxAST; } } return F.NIL; }
public IExpr evaluate(final IAST functionList) { if (functionList.size() != 3) { throw new WrongNumberOfArguments(functionList, 2, functionList.size() - 1); } IExpr arg1 = functionList.get(1); IExpr arg2 = functionList.get(2); int dim1 = arg1.isVector(); if (dim1 > (-1)) { int dim2 = arg2.isVector(); if (dim1 == dim2) { if (dim1 == 0) { return F.C0; } IAST a1 = ((IAST) arg1); IAST a2 = ((IAST) arg2); IAST maxAST = F.Max(); for (int i = 1; i < a1.size(); i++) { maxAST.add(F.Abs(F.Subtract(a1.get(i), a2.get(i)))); } return maxAST; } } return null; }
@Override public IExpr evaluate(final IAST ast, EvalEngine engine) { Validate.checkSize(ast, 2); int size = ast.arg1().isVector(); if (size >= 0) { IAST param = F.List(F.List(F.C1D2, F.C0), // F.List(F.C0, F.C1)); IAST list = (IAST) ast.arg1(); IASTAppendable result = F.ListAlloc(5); result.append(F.Min(list)); result.append(F.Quantile(list, F.C1D4, param)); result.append(F.Median(list)); result.append(F.Quantile(list, F.C3D4, param)); result.append(F.Max(list)); return result; } return F.NIL; }
private IExpr timesInterval(final IExpr o0, final IExpr o1) { return F.Interval(F.List( F.Min(o0.lower().times(o1.lower()), o0.lower().times(o1.upper()), o0.upper().times(o1.lower()), o0.upper().times(o1.upper())), F.Max(o0.lower().times(o1.lower()), o0.lower().times(o1.upper()), o0.upper().times(o1.lower()), o0.upper().times(o1.upper())))); }
private static IExpr powerIntervalPositiveExponent(final IExpr interval, IInteger exponent) { if (exponent.isEven()) { if (interval.lower().isNonNegativeResult()) { return F.Interval(F.List(interval.lower().power(exponent), interval.upper().power(exponent))); } else { if (interval.upper().isNegativeResult()) { return F.Interval(F.List(interval.upper().power(exponent), interval.lower().power(exponent))); } return F.Interval( F.List(F.C0, F.Max(interval.lower().power(exponent), interval.upper().power(exponent)))); } } return F.Interval(F.List(interval.lower().power(exponent), interval.upper().power(exponent))); }