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 случайных генераций на тест).