더북(TheBook)

우리는 이 간단한 알고리즘에 대해 서로 다른 두 가지 구현 코드를 작성했다. 기술적인 내용을 이해하지 말고 들여다보길 바란다.

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;
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.