@Override public DoubleArray apply(final DoubleArray x) { calculateSwapRates(); final double[] yield = x.toArray(); final double[] diff = new double[n]; double pi; double acc = 0.0; for (int i = 0; i < n; i++) { pi = Math.exp(-yield[i] * TIME_GRID[i]); acc += (TIME_GRID[i] - (i == 0 ? 0.0 : TIME_GRID[i - 1])) * pi; diff[i] = (1.0 - pi) / acc - _swapRates[i]; } return DoubleArray.copyOf(diff); }