import math
# Линейная машина с внутренними магнитами: число пар полюсов; магнитное потокосцепление, Вб;
# индуктивности по осям d и q, Гн; допустимая амплитуда тока, А.
pole_pairs, pm_flux_wb, ld, lq, current = 4, 0.08, 0.005, 0.008, 10.0
difference = ld-lq
# Два алгебраических корня условия максимума момента при заданной амплитуде тока.
roots = [(-pm_flux_wb+sign*math.sqrt(pm_flux_wb**2+8*difference**2*current**2))/(4*difference)
         for sign in [1, -1]]
for id_a in roots:
    # Отбрасываем корень вне окружности допустимого тока до извлечения квадратного корня.
    if abs(id_a) > current:
        print("Недопустимый корень:", id_a)
        continue
    # Выбираем положительную поперечную составляющую тока для рассматриваемой ветви момента.
    iq_a = math.sqrt(current**2-id_a**2)
    torque = 1.5*pole_pairs*(pm_flux_wb+difference*id_a)*iq_a
    # Порядок вывода: продольный ток, А; поперечный ток, А; момент, Н·м.
    # Насыщенную машину исследуют по двумерной таблице потокосцеплений, а не по постоянным Ld и Lq.
    print(id_a, iq_a, torque)
