/src/main/java/net/finmath/montecarlo/interestrate/models/LIBORMarketModelStandard.java
RandomVariable libor = liborLongPeriod.mult( periodEnd-previousStartTime).add( 1.0).div( liborShortPeriod.mult( nextStartTime-previousStartTime).add( 1.0).log( ).mult( ( previousEndTime-previousStartTime) /( nextStartTime-previousStartTime) ).exp( )).sub( 1.0).div( periodEnd-periodStart) ;
RandomVariable libor = liborLongPeriod.mult ( periodEnd-previousStartTime ) .add ( 1.0 ) .div ( liborShortPeriod.mult ( nextStartTime-previousStartTime ) .add ( 1.0 ) .log ( ) .mult ( ( periodStart-previousStartTime ) / ( nextStartTime-previousStartTime ) ) .exp ( ) ) .sub ( 1.0 ) .div ( periodEnd-periodStart ) ;
if(periodStartIndex < 0) { final int previousStartIndex = (-periodStartIndex-1)-1; final double previousStartTime = getLiborPeriod(previousStartIndex); final double nextStartTime = getLiborPeriod(previousStartIndex+1); final RandomVariable liborLongPeriod = getForwardRate(process, time, previousStartTime, periodEnd); final RandomVariable liborShortPeriod = getForwardRate(process, time, previousStartTime, nextStartTime); <extra_id_0> final double analyticLibor = getForwardRateCurve().getForward(getAnalyticModel(), previousStartTime, nextStartTime-periodStart); final double analyticLiborShortPeriod = getForwardRateCurve().getForward(getAnalyticModel(), previousStartTime, nextStartTime-previousStartTime); final double analyticInterpolatedOnePlusLiborDt = (1 + analyticLiborShortPeriod * (nextStartTime-previousStartTime)) / Math.exp(Math.log(1 + analyticLiborShortPeriod * (nextStartTime-previousStartTime)) * (nextStartTime-periodStart)/(nextStartTime-previousStartTime)); final double analyticOnePlusLiborDt = (1 + analyticLibor * (periodStart-previousStartTime)); final double adjustment = analyticOnePlusLiborDt / analyticInterpolatedOnePlusLiborDt; libor = libor.mult(periodEnd-periodStart).add(1.0).div(adjustment).sub(1.0).div(periodEnd-periodStart);