Ошибка прямой через опорную точку

тема: Математика ИИ · уровень: продвинутый

Условие

В теплице изучается связь между освещённостью листа и температурой поверхности растения. Для калибровки известна опорная точка: при освещённости x₀ температура должна быть y₀.

Требуется подобрать прямую вида y = y₀ + k(x − x₀), то есть прямую, обязательно проходящую через опорную точку. Среди всех значений k выбирается то, для которого среднеквадратичная ошибка MSE на корректных измерениях минимальна.

Для каждого корректного измерения (xᵢ, yᵢ) ошибка равна yᵢ − (y₀ + k(xᵢ − x₀)). Если корректных измерений m, то MSE определяется формулой MSE = (1 / m) · Σ(yᵢ − (y₀ + k(xᵢ − x₀)))². Строка с NA хотя бы в одном из двух столбцов считается пропуском и в сумме не участвует.

Если несколько значений k дают одинаковую минимальную ошибку, выбирается k = 0. Такая ситуация возможна, когда у всех корректных измерений освещённость равна x₀.

Формат ввода

В первой строке находятся три целых числа n x₀ y₀ — число строк измерений, освещённость и температура в опорной точке.

В следующих n строках находятся два значения xᵢ yᵢ — освещённость и температура очередного измерения. Каждое значение записано целым числом или строкой NA.

Формат вывода

Выведите минимально возможное значение MSE с шестью знаками после десятичной точки.

Округление выполняется до ближайшего числа с шестью знаками после точки. Если следующее число находится ровно посередине, округление выполняется в большую сторону.

Ограничения

1 ≤ n ≤ 4000.

−10000 ≤ x₀, y₀ ≤ 10000.

Каждое числовое значение xᵢ и yᵢ находится в диапазоне от −10000 до 10000 включительно.

В каждой строке измерения записаны ровно два значения, разделённые пробелом. Значение NA не содержит дополнительных символов.

Хотя бы одна строка измерения не содержит NA в обоих столбцах. Повторы измерений, выбросы и пропуски допустимы.

Решить задачу с автопроверкой на Python →

Куда дальше