( rpsoft | 2022. 11. 30., sze – 10:25 )

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ó.