Egy változós az még nem olyan fájdalmas általában, hacsak nem oszcilláló. Vágj ki egy random darabot egy Bessel-függvényből valamilyen jó nagy x környékén, onnan vegyél random pontokat, és arra próbáld meg megilleszteni a sin(x + delta)-t.
A Powell fv egy implementációja (x az input):
double t1 = x(0) + 10 * x(1), t2 = x(2) - x(3), t3 = x(1) - 2 * x(2), t4 = x(0) - x(3); return t1*t1 + 5 * t2*t2 + t3*t3*t3*t3 + 10 * t4*t4*t4*t4;
Fletcher-Powell:
{
double theta = (x(0) == 0) ? 0.25 : ((x(0) > 0) ? atan2(x(1), x(0)) / 2 / M_PI : atan2(x(1), x(0)) / 2 / M_PI + 0.5);
double t0 = x(2) - 10 * theta;
double t1 = sqrt(x(0)*x(0) + x(1)*x(1)) - 1.0;
return 100 * t0*t0 + t1*t1 + x(2)*x(2);
}
Ezek olyanok, amik egy sima gradienst kinyírnak, és a különböző javított módszerek (BFGS, kvázi-Newton, ...) sikeresen elbánnak velük. A Numerical Recipes-ben van egy példa, ami a gradiens-alapú optimalizációnak nehéz szokott lenni, a szimulált hőkezelés tesztelésére. A FORTRAN verziót meg lehet nézni a honlapjukon ingyen. Nem másolom be, copyrightos, de megtalálható.