/** 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; }
private double[] rootsToPolynomial(Complex[] x){ /* Returns a double array of coefficients of the polynomial, assuming the each complex root has it's conjugate in the same array. */ PolynomialFunction[] polynomialFunctionArray = new PolynomialFunction[x.length/2]; PolynomialFunction product = new PolynomialFunction(new double[]{1}); for(int i = 0; i < x.length / 2; i++){ PolynomialFunction complexRoot = new PolynomialFunction(new double[]{-x[i].getReal(), 1}); complexRoot = complexRoot.multiply(complexRoot); complexRoot = complexRoot.subtract(new PolynomialFunction(new double[]{-1 * x[i].getImaginary() * x[i].getImaginary()})); System.out.println((complexRoot)); polynomialFunctionArray[i] = complexRoot; } for (PolynomialFunction aPolynomialFunctionArray : polynomialFunctionArray) product = aPolynomialFunctionArray.multiply(product); return product.getCoefficients(); }
/** 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; }
&& aNew[leadIndex].getCoefficients()[0] == 0)) { for (int j = n - 1; j < leadIndex - n; ++j) { aNew[j] = aNew[j].multiply(bPolys[n]); aNew[j] = aNew[j].multiply(bPolys[n]) .subtract(bPolys[j - leadIndex + n] .multiply(aNew[leadIndex])); && aNew[leadIndex].getCoefficients()[0] == 0)) { for (int j = leadIndex - n; j < leadIndex; ++j) { aNew[j] = aNew[j].multiply(bPolys[n]) .subtract(bPolys[j - leadIndex + n] .multiply(aNew[leadIndex])); mat[i][j] = mat[i][j].multiply(new PolynomialFunction( new double[] { reduceFactor })); PolynomialFunction t1 = mat[i][j].multiply(mat[k][k]); PolynomialFunction t2 = mat[i][k].multiply(mat[k][j]); PolynomialFunction t = t1.subtract(t2); mat[i][j] = PolynomialUtils.polynomialDivision(t, c);