/** Compute the interpolation polynomials. * @return interpolation polynomials array * @exception NoDataException if sample is empty */ public PolynomialFunction[] getPolynomials() throws NoDataException { // safety check checkInterpolation(); // iteration initialization final PolynomialFunction zero = polynomial(0); PolynomialFunction[] polynomials = new PolynomialFunction[topDiagonal.get(0).length]; for (int i = 0; i < polynomials.length; ++i) { polynomials[i] = zero; } PolynomialFunction coeff = polynomial(1); // build the polynomials by iterating on the top diagonal of the divided differences array for (int i = 0; i < topDiagonal.size(); ++i) { double[] tdi = topDiagonal.get(i); for (int k = 0; k < polynomials.length; ++k) { polynomials[k] = polynomials[k].add(coeff.multiply(polynomial(tdi[k]))); } coeff = coeff.multiply(polynomial(-abscissae.get(i), 1.0)); } return polynomials; }
/** * @param coeff * implicit poly coefficients * @param tx * function of t to plug into x * @param ty * function of t to plug into y * @return function of t representing f(tx(t),ty(t)) */ public static PolynomialFunction lineIntersect(double[][] coeff, PolynomialFunction tx, PolynomialFunction ty) { PolynomialFunction sum = null; PolynomialFunction zs = null; for (int i = coeff.length - 1; i >= 0; i--) { zs = new PolynomialFunction( new double[] { coeff[i][coeff[i].length - 1] }); for (int j = coeff[i].length - 2; j >= 0; j--) { zs = zs.multiply(ty).add( new PolynomialFunction(new double[] { coeff[i][j] })); // y*zs+coeff[i][j]; } if (sum == null) { sum = zs; } else { sum = sum.multiply(tx).add(zs); // sum*x+zs; } } return sum; }
/** Compute the interpolation polynomials. * @return interpolation polynomials array * @exception NoDataException if sample is empty */ public PolynomialFunction[] getPolynomials() throws NoDataException { // safety check checkInterpolation(); // iteration initialization final PolynomialFunction zero = polynomial(0); PolynomialFunction[] polynomials = new PolynomialFunction[topDiagonal.get(0).length]; for (int i = 0; i < polynomials.length; ++i) { polynomials[i] = zero; } PolynomialFunction coeff = polynomial(1); // build the polynomials by iterating on the top diagonal of the divided differences array for (int i = 0; i < topDiagonal.size(); ++i) { double[] tdi = topDiagonal.get(i); for (int k = 0; k < polynomials.length; ++k) { polynomials[k] = polynomials[k].add(coeff.multiply(polynomial(tdi[k]))); } coeff = coeff.multiply(polynomial(-abscissae.get(i), 1.0)); } return polynomials; }
/** Compute the interpolation polynomials. * @return interpolation polynomials array * @exception NoDataException if sample is empty */ public PolynomialFunction[] getPolynomials() throws NoDataException { // safety check checkInterpolation(); // iteration initialization final PolynomialFunction zero = polynomial(0); PolynomialFunction[] polynomials = new PolynomialFunction[topDiagonal.get(0).length]; for (int i = 0; i < polynomials.length; ++i) { polynomials[i] = zero; } PolynomialFunction coeff = polynomial(1); // build the polynomials by iterating on the top diagonal of the divided differences array for (int i = 0; i < topDiagonal.size(); ++i) { double[] tdi = topDiagonal.get(i); for (int k = 0; k < polynomials.length; ++k) { polynomials[k] = polynomials[k].add(coeff.multiply(polynomial(tdi[k]))); } coeff = coeff.multiply(polynomial(-abscissae.get(i), 1.0)); } return polynomials; }