No solution exists in closed form. However, since both the numerator and denominator are monotonic, the ratio is also monotonic, which means you can use bisection to find a solution iteratively.
In other words, find two initial values of t such that the value of the RHS is less than a for one of them, and greater than a for the other. Then recursively bisect the interval, getting closer and closer to the true root.
Something like:
Code:
double Function( double b, double c, double t )
{
return ( 1.0 - exp( b * t ) ) / ( 1.0 - exp( c * t ) );
}
double FindRoot( double a, double b, double c )
{
double tLow = ???;
double tHigh = ???;
double guess = Function( b, c, tLow );
while( fabs( a - guess ) > 1e-5 )
{
double tMid = ( tLow + tHigh ) * 0.5;
guess = Function( b, c, tMid );
if( guess > a ) tHigh = tMid else tLow = tMid;
}
return tLow;
}
If you don't know what to put in for the ??? marks, just use a very small (but nonzero) value for tLow and a very large value for tHigh. The only requirement is that tLow < tTrue < tHigh