Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Toán cho CNTT] Gradient descent đến khi hội tụ

    Dừng khi hội tụ

    Cho f(x)=a*x^2+b*x+c (a>0). Thực hiện gradient descent với learning rate lr, xuất phát x0, dừng khi |f'(x)| < eps hoặc đạt tối đa maxit bước.

    In ra số bước đã thực hiện và giá trị x cuối cùng, cách nhau khoảng trắng. (Kiểm tra điều kiện dừng ở đầu mỗi vòng, trước khi cập nhật.)

    Thuật toán

    k = 0
    while k < maxit and |f'(x)| >= eps:
        x = x - lr*f'(x)
        k = k + 1
    in k, x
    

    Ví dụ

    a=1,b=0,c=0,x0=10,lr=0.1,eps=1,maxit=100: dừng khi |2x|<1 tức |x|<0.5.

    • Định dạng đầu vào:

      Dòng 1: a b c. Dòng 2: x0 lr. Dòng 3: eps maxit.

    • Ràng buộc đầu vào:

      a > 0; 0 < lr <= 0.5; 0 < eps <= 10; 1 <= maxit <= 100000.

    • Định dạng đầu ra:

      Một dòng: số_bước x. Số bước là số nguyên; x in theo Số thực in với định dạng {:.6f} (6 chữ số thập phân).

    Ví dụ:

    Đầu vào:

    1 0 0
    10 0.1 1
    100
    

    Đầu ra:

    14 0.439805

    Giải thích:

    Lặp đến khi |2x|<1; sau 14 bước x≈0.4398.

    Đang tải editor...