우리는 이 간단한 알고리즘에 대해 서로 다른 두 가지 구현 코드를 작성했다. 기술적인 내용을 이해하지 말고 들여다보길 바란다.
void gradient_descent(double* x, double* y, double s, double eps, double (*f)(double, double), double (*gx)(double, double), double (*gy)(double, double)) { double val = f(*x, *y), delta; do { *x -= s * gx(*x, *y); *y -= s * gy(*x, *y); double new_val = f(*x, *y); delta = abs(new_val - val); val = new_val; } while(delta > eps); }
template<typename Value, typename P1, typename P2, typename F, typename G> Value gradient_descent(Value x, P1 s, P2 eps, F f, G g) { auto val = f(x), delta= val; do { x -= s * g(x); auto new_val = f(x); delta = abs(new_val - val); val = new_val; } while (delta > eps); return x; }