"""Холостой ход и короткое замыкание с учётом активных сопротивлений.

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

import numpy as np

# Линейный аналитический эталон двух обмоток; сопротивления в омах.
z11, z22, mutual = 2 + 20j, 1 + 5j, 9j
# Холостой ход: вторичный ток равен нулю, амплитуда первичного напряжения — 100 В.
open_current = 100 / z11
open_voltage = mutual * open_current
# Короткое замыкание: вторичное напряжение равно нулю, внешняя нагрузка исключена.
short_matrix = np.array([[z11, mutual], [mutual, z22]])
# Для ограничения тока амплитуда первичного напряжения снижена до 10 В.
short_currents = np.linalg.solve(short_matrix, np.array([10 + 0j, 0j]))
# Вывод для холостого хода: первичный ток, А; вторичное напряжение, В.
print("ХХ:", open_current, open_voltage)
# Вывод для короткого замыкания: токи обеих обмоток, А.
print("КЗ:", short_currents)
# Независимая подстановка во второе уравнение проверяет напряжение на выводах, В.
print("Невязка вторичной цепи:", mutual * short_currents[0] + z22 * short_currents[1])
