"""Параметризация геометрии, чувствительность и численный шум.

Среда: встроенный Python FEMM 5.
Проверяется только авторский аналитический эталон, полевой решатель не вызывается.
Полученные числа не являются квитанцией расчёта электромагнита или машины.
"""

# Аналитическая сила задана в ньютонах при числовом значении зазора в миллиметрах.
# Для трёх шагов вычисляем центральную разность в Н/мм и сравниваем с точной производной.
def force(g_mm):
    return 100.0 / g_mm**2

g_mm = 1.0
exact = -2 * force(g_mm) / g_mm
for step_mm in (0.1, 0.05, 0.025):
    difference = (force(g_mm + step_mm) - force(g_mm - step_mm)) / (2 * step_mm)
    print("Шаг, мм:", step_mm, "Производная, Н/мм:", difference, "Относительная ошибка:", abs(difference / exact - 1))
