Task2 — метод Ньютона - gogafefe/StAlGoLM GitHub Wiki

Task2 — метод Ньютона

Вариант №6 из общего списка курса ("Типовые варианты"): дана функция f(x), начальное приближение x₀ и значение производной f'(x₀), нужно найти следующее приближение x₁ по формуле Ньютона.

Формула

x1 = x0 - f(x0) / f'(x0)

Почему это выбор из 4 вариантов, а не число

Вся система проверки ответов в проекте рассчитана на целое число (session.currentCorrectAnswer — int, сравнение userAnswer == correctAnswer). x₁ — дробное число, поэтому задание оформлено как выбор из 4 значений: сервер сам считает верный x₁ и подмешивает к нему 3 правдоподобные ошибки:

  • перепутан знак: x0 + f(x0)/f'(x0) вместо x0 - f(x0)/f'(x0)
  • перепутаны числитель и знаменатель: x0 - f'(x0)/f(x0)
  • забыли вычесть из x0: f(x0)/f'(x0)

Варианты перемешиваются случайно (Fisher–Yates), студент выбирает номер 1–4.

10 шаблонов функций (num от 1 до 10)

num Функция Категория
1 c·x² + d·x + e квадратичная
2 c·x³ + d кубическая
3 c·x² - d квадратичная
4 c·x³ + d·x кубическая
5 c·sin(x) - d тригонометрия
6 c·cos(x) - d тригонометрия
7 c·sin(d·x) тригонометрия
8 c·eˣ - d экспонента
9 c·e^(d·x) - e экспонента
10 c·x - d линейная (f'(x) = const)

Параметры (c, d, e) и x0 рандомизируются при каждом вызове. x0 для каждого шаблона подобран так, чтобы f'(x0) заведомо не была близка к нулю — иначе шаг Ньютона выродился бы в деление на почти ноль.

Изначально задание разрабатывалось как task5 (пятая таблица статистики), но чтобы не оставлять в проекте пустых заглушек, оно заняло место бывшей заглушки task2 — статистика ведётся в StatisticTask2.

Тестирование

Пройдено полным циклом через настоящий сервер: регистрация → вход → task2 1 → правильный ответ → task2 2 → заведомо неправильный ответ. Подробный протокол — в файле V_test_case_task2.xlsx (тест-кейс + карточка найденного попутно дефекта авторизации). Математика задания (совпадение помеченного варианта с формулой Ньютона) дополнительно проверяется модульными тестами в tests/ (200 случайных генераций на тест).