FRAMES NO FRAMES

IlcMonotonicIncreasingFloatExp

public IlcFloatExp IlcMonotonicIncreasingFloatExp(IlcFloatExp x, IlcFloatFunction f, IlcFloatFunction invf, const char * functionName=0)
Definition file: ilsolver/nlinflt.h
Include file: <ilsolver/ilosolver.h>

This function creates a new constrained expression equal f(x). The arguments f and invf must be pointers to functions of type IlcFloatFunction. Those two functions must be inverses of one another, that is,

invf(f(x)) == x and f(invf(x)) == x for all x.

Those two functions must also be monotonically increasing.

IlcMonotonicIncreasingFloatExp does not verify whether f and invf are inverses of one another. It does not verify whether they are monotonically increasing either.

The effects of this function are reversible.

Examples:

Here's how to define IlcExponent and IlcLog in terms of this function:

 static IlcFloat CallFloatExponent(IlcFloat x) {
     return (x > 709) ?  1e308 : exp(x);
 }
 static IlcFloat CallFloatLog(IlcFloat x) {
     return  (x <= 0) ? -1e308 : log(x);
 }
 IlcFloatExp IlcExponent(const IlcFloatExp var) {
   return IlcMonotonicIncreasingFloatExp
             (var, CallFloatExponent,CallFloatLog, ?IlcExponent?);
 }
 IlcFloatExp IlcLog(const IlcFloatExp var) {
   return IlcMonotonicIncreasingFloatExp
             (var, CallFloatLog,CallFloatExponent, ?IlcLog?);
 }

See Also: