1ЗадачаMedium
Корень квадратного уравнения градиентным спуском
Условие
Дано квадратное уравнение:
Нужно приблизить один из корней через gradient descent по loss:
На каждом шаге обновляйте:
Сигнатура
def gd_quadratic_root(a: float, b: float, c: float, x0: float, lr: float, steps: int) -> float:
Верните x, округленный до 6 знаков.
Решение прямо на странице
Напишите код, запустите проверки и только потом открывайте разбор.
Проверка решения
Нажмите «Запустить проверки» или Ctrl+Enter.
Показать разбор
Подсказки
- Loss
Корни уравнения — это точки, где f(x)^2 равно нулю.
- Производная
Используйте chain rule: derivative of f(x)^2 is 2 * f(x) * f_prime(x).
Идея решения
Минимизируем не само f(x), а f(x)^2, потому что корень уравнения соответствует нулю этого loss. Производная по x:
Дальше остается обычный gradient descent от начальной точки x0.
Эталонный код
def gd_quadratic_root(a: float, b: float, c: float, x0: float, lr: float, steps: int) -> float:
x = float(x0)
for _ in range(steps):
fx = a * x * x + b * x + c
grad = 2 * fx * (2 * a * x + b)
x -= lr * grad
return round(x, 6)Сложность
Время: O(steps). Память: O(1).
Каждый шаг делает константное число арифметических операций.