public double forwardTimeEvolution(int x,int y,double t){
  if (t < 0) {
    throw new IllegalArgumentException("Cannot go backwards in time: t=" + t);
  }
  double m[]={getForwardRate(0,1),getForwardRate(1,0)};
  double mt=m[0] + m[1];
  if (y == x) {
    return (m[x] * Math.exp(-mt * t) + m[1 - x]) / mt;
  }
 else {
    return m[x] * (1.0 - Math.exp(-mt * t)) / mt;
  }
}

public double forwardTimeEvolution ( int x , int y , double t ) { if ( t < 0 ) { throw new IllegalArgumentException ( "Cannot go backwards in time: t=" + t ) ; } double m [ ] = { getForwardRate ( 0 , 1 ) , getForwardRate ( 1 , 0 ) } ; double mt = m [ 0 ] + m [ 1 ] ; if ( y == x ) { return ( m [ x ] * Math . exp ( - mt * t ) + m [ 1 - x ] ) / mt ; } else { return m [ x ] * ( 1.0 - Math . exp ( - mt * t ) ) / mt ; } }
the probability of ending in state y after time t , conditional on starting in state x , according to the forward evolution matrix .
