public Polynomial differentiate(int order) { double coef; double power; Polynomial result = new Polynomial(); Polynomial derivTerm; for (Map.Entry<Double, Double> e : this.entrySet()) { coef = e.getValue(); power = e.getKey(); if (order <= power) { derivTerm = new Polynomial( new double[][] {{power - order, coef * numutil.MathTools.binomNum(power, order)}}); result = result.add(derivTerm); } } return result; }
public Polynomial antiderivative(int order) { double coef; double power; Polynomial result = new Polynomial(); Polynomial antiderivTerm; // for each term, raise its power by order amount and divide coefficient by // (order+power)!/power! for (Map.Entry<Double, Double> e : this.entrySet()) { coef = e.getValue(); power = e.getKey(); antiderivTerm = new Polynomial( new double[][] { {power + order, coef / numutil.MathTools.binomNum(power + order, order)} }); result = result.add(antiderivTerm); } return result; }