Численный градиент калибровки счётчиков

тема: Градиентный шаг · уровень: средний

Условие

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

Коэффициент калибровки счётчика равен w. Модель предсказывает контрольный расход по формуле p = w · x. Качество коэффициента измеряется среднеквадратичной ошибкой

L(w) = (1 / n) · Σ (w · x_i − y_i)^2.

Требуется найти численный градиент функции ошибки по коэффициенту w методом центральной разности с шагом h:

g = (L(w + h) − L(w − h)) / (2 · h).

Данные поступают двумя таблицами. Строки таблиц могут быть записаны в разном порядке, поэтому значения необходимо сопоставлять по идентификатору счётчика. Идентификатор каждого счётчика встречается ровно один раз в каждой таблице, пропусков нет. Нулевые показания счётчика разрешены.

Выведите g, округлённый до четырёх знаков после точки. При точном равенстве числа двум соседним вариантам округления выбирается вариант с чётной последней сохранённой цифрой. Если после округления градиент равен нулю, следует вывести 0.0000.

Формат ввода

В первой строке дано целое число n — количество счётчиков.

Во второй строке даны два вещественных числа w и h — текущий коэффициент калибровки и шаг численного дифференцирования.

В следующих n строках дана первая таблица. Каждая строка содержит идентификатор счётчика meter_id и целое число x — расход по данным умного счётчика.

В следующих n строках дана вторая таблица. Каждая строка содержит идентификатор счётчика meter_id и целое число y — контрольный расход.

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

Выведите одно число — численный градиент g с четырьмя знаками после точки.

Ограничения

1 ≤ n ≤ 2000.

-10 ≤ w ≤ 10.

0.0001 ≤ h ≤ 1.

0 ≤ x, y ≤ 20000.

Идентификатор meter_id состоит из строчных латинских букв, цифр и символа _, его длина составляет от 1 до 20 символов.

Все идентификаторы в первой таблице различны. Наборы идентификаторов первой и второй таблиц совпадают.

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

Куда дальше