"""Фиксированная и дифференциальная проницаемости: силы и проверка производных.

Среда: встроенный MicroPython FEMM 5.
Аналитический учебный пример; полевой решатель не вызывается.
Параметры, единицы величин и порядок вывода пояснены по стадиям.
"""

import math

# Постоянная C = μ₀·N²·S в согласованных единицах СИ; L = C/g.
# Здесь проверяется производная аналитической коэнергии, а не режим проницаемости FEMM.
constant = 4 * math.pi * 1e-7 * 200**2 * 4e-4
current_a, gap_m = 1.0, 0.001


# Коэнергия, Дж, как функция зазора, м; ток во всех состояниях сохраняется.
def coenergy_j(gap):
    return constant * current_a**2 / (2 * gap)


# Независимая производная даёт силу, Н. Отрицательный знак означает уменьшение зазора.
exact_force_n = -constant * current_a**2 / (2 * gap_m**2)
# Сравниваем два механических шага. Для переноса геометрии FEMM шаг переводят в мм.
for step_m in [0.00005, 0.000025]:
    force_n = (coenergy_j(gap_m + step_m) - coenergy_j(gap_m - step_m)) / (2 * step_m)
    # Порядок вывода: шаг, м; разностная сила, Н; точная аналитическая сила, Н.
    print(step_m, force_n, exact_force_n)
