"""Самостоятельный аналитический контроль занятия.
Среда: встроенный MicroPython FEMM 5; используется только стандартная арифметика.
Этот код проверяет формулы и единицы; нативные поля имеют отдельные квитанции.
"""
import math
mu0=4e-7*math.pi; a=0.01; b=0.02; gap=0.0005
# Местная щель клина меняется вдоль полюса; угол задаётся в радианах.
def permeance(theta):
    if abs(theta)<1e-12:
        return mu0*b*a/gap
    t=math.tan(theta)
    return mu0*b/t*math.log(1+a*t/gap)
theta=5*math.pi/180; step=0.05*math.pi/180
moment=0.5*300**2*(permeance(theta+step)-permeance(theta-step))/(2*step)
assert moment<0
# Проверяем предел параллельного якоря и размерную формулу расчётных полюсов.
assert abs(permeance(1e-7)/(mu0*b*a/gap)-1)<2e-6
p3=mu0*0.001*12*22
assert abs(p3/(mu0*0.01*0.02/0.001)-1.32)<1e-12
print("Момент закрытия, Н м",moment,"Проводимость 3D-оценки, Гн",p3)

# Пассивная пара полюсов усиливает малое смещение ротора.
f0=10.0; g=0.001; x=0.0001
fx=f0*((g/(g-x))**2-(g/(g+x))**2)
assert fx*x>0 and abs(fx-4.08121620243)<1e-9
print("Дестабилизирующая сила, Н",fx)
