FEMM 5

Магнитное поле и электромеханика · Плоскопараллельная

Пульсации момента и скос: сравнение отдельных сечений и углового усреднения

Скос пазов или магнитов можно предварительно исследовать усреднением согласованных двумерных сечений. Такой метод помогает увидеть подавление пространственных гармоник, сохраняя границу между приближением сечений и полноценной трёхмерной моделью.

Самостоятельная учебная модель FEMM 5: от физических соотношений к полевому решению и проверке результата.

Допущения и устройство учебной модели

Принятые допущения и их назначение
Учебная модель FEMM 5Причина
Параметры и диапазон исследования выбраны для последовательного изучения в нашем курсе.Учебная постановка FEMM 5
Геометрия, источники, русские свойства, управление серией и проверки объединены в самостоятельную программу встроенного Python.Учебная постановка FEMM 5
Сеточная чувствительность и физические контроли показаны отдельно от основной параметрической характеристики.Учебная постановка FEMM 5

Все размеры, свойства материалов и условия возбуждения заданы ниже. Численные результаты относятся к опубликованной версии модели FEMM 5.

Физическая и математическая постановка

Принцип действия и расчётные соотношения

Для каждого общего положения задаются сбалансированные фазные токи статора. Затем три сечения ротора с угловыми смещениями −5°, 0° и +5° рассчитываются при ОДНИХ И ТЕХ ЖЕ токах этого положения. Среднее этих трёх независимых полевых моментов приближает равновесный трёхсекционный скос. Средний полезный момент при таком скосе может уменьшиться: это физическое следствие уменьшения рабочей гармоники. Соседние точки синхронной характеристики с разными токами не заменяют сечения одного положения. Метод не учитывает осевые токи и торцевые поля.

\overline T(\theta,\mathbf I(\theta))=\tfrac13\sum_{j=-1}^{1}T(\theta+j\Delta\theta,\mathbf I(\theta))

Численная проверка и новая серия расчётов

Сначала выполняются три независимых расчёта одной постановки с масштабами размеров элементов 0,8; 0,5; 0,3 относительно учебного входа. Фактический размер в узких местах задаётся программой отдельно и может быть меньше этого масштаба. Сравниваются наблюдаемая величина и число элементов, а не только вид поля. После этого на мелкой сетке выполняется параметрическая серия и независимые физические контроли. Каждый файл модели перед расчётом закрывается и открывается повторно; этим проверяется сохранение русских свойств в точной решаемой копии.

Для нового опыта скачайте файлы со страницы работы в отдельный каталог и откройте reproduce.py в редакторе встроенного Python FEMM 5. Программа использует непосредственные команды mi/ mo и не требует внешнего управления Python. Она создаёт новую папку calculated-NN рядом с программой. Прежние решения не используются для получения новых чисел. Результат и все входы сохраняются вместе, поэтому найденное число всегда можно связать с параметрами, сеткой и точным файлом.

Исходные данные

Плоскопараллельная

Величины, единицы и происхождение параметров
ПараметрЗначениеЕдиницаПроисхождение
Геометрия и источникиОтдельная русская учебная копия геометрии нашего курса. Все координаты, витки, материалы и глубина заданы в input.fem; рабочие токи и угловая серия задаются программой. Сталь линейная, μr=1000.СИ и ммВыбранные учебные параметры
Рабочая координатаМеханический угол, градсм. подписи результатовПараметрическая серия

Порядок воспроизведения

  1. Разберите физическую модель и соотношения до запуска программы. Найдите каждое число из таблицы в CONFIG и геометрических командах.
  2. Откройте reproduce.py во встроенном Python FEMM 5. Сохраните пользовательские документы и запустите программу.
  3. Сопоставьте три сетки одной постановки и независимые физические проверки. Не подменяйте сравнение сеток разными рабочими режимами.
  4. Изучите параметрическую серию: объясните знак, размерность и тенденцию каждой величины. Измените один параметр и повторите опыт в новой папке.
  5. Оцените, какие выводы требуют трёхмерного, теплового или динамического расчёта. Сохраните модель и результат новой серии вместе.

Скачайте нужные файлы по отдельным ссылкам ниже в одну рабочую папку, затем откройте reproduce.py во встроенном Python FEMM 5 и выполните его. Сохраните имена файлов и структуру подпапок. Условия конкретного запуска и путь новых результатов указаны в комментариях программы.

Программа встроенного Python FEMM 5
Python · reproduce.py
"""Самостоятельное полевое исследование во встроенном Python FEMM 5.

Все размеры геометрии указаны в миллиметрах, результаты — в СИ. Значения
гармонических токов являются амплитудами. Материалы и условия имеют русские
имена; номера групп описаны в README. Программа создаёт новую calculated-NN
рядом с собой, не заменяя предшествующих расчётов. Каждая входная модель
сохраняется, закрывается, открывается повторно и только затем решается.
Открытые пользовательские документы не изменяются. Параметры — в CONFIG.
"""

import os
import sys
import json
import math

MU0 = 4e-7 * math.pi
script = globals().get("__file__", "") or (sys.argv[0] if sys.argv else "")
HERE = os.path.dirname(os.path.abspath(script)) if script else os.getcwd()
number = 1
while True:
    OUT = HERE + "/calculated-%02d" % number
    try:
        os.stat(OUT)
        number += 1
    except OSError:
        os.mkdir(OUT)
        break


def scalar(value):
    if isinstance(value, (list, tuple)):
        return scalar(value[0])
    return complex(value).real


def complex_parts(value):
    value = complex(value)
    return [value.real, value.imag]


def point(radius, angle):
    angle = angle * math.pi / 180
    return (radius * math.cos(angle), radius * math.sin(angle))


def line(a, b, group=0, size=0):
    mi_addnode(a[0], a[1])
    mi_addnode(b[0], b[1])
    mi_addsegment(a[0], a[1], b[0], b[1])
    mi_selectsegment((a[0] + b[0]) / 2, (a[1] + b[1]) / 2)
    boundary = (
        "Внешняя граница A=0"
        if globals().get("AXIS", False) and abs(a[0]) + abs(b[0]) < 1e-9
        else "<None>"
    )
    mi_setsegmentprop(boundary, size, 0 if size else 1, 0, group)
    mi_clearselected()


def polygon(points, group=0, size=0):
    for index in range(len(points)):
        line(points[index], points[(index + 1) % len(points)], group, size)


def rectangle(x1, y1, x2, y2, group=0, size=0):
    polygon([(x1, y1), (x2, y1), (x2, y2), (x1, y2)], group, size)


def arc(radius, start, end, group=0, step=2):
    a, b = point(radius, start), point(radius, end)
    mi_addnode(a[0], a[1])
    mi_addnode(b[0], b[1])
    mi_addarc(a[0], a[1], b[0], b[1], end - start, step)
    middle = point(radius, (start + end) / 2)
    mi_selectarcsegment(middle[0], middle[1])
    mi_setarcsegmentprop(step, "<None>", 0, group)
    mi_clearselected()


def circle(radius, group=0, step=2):
    for start in (0, 90, 180, 270):
        arc(radius, start, start + 90, group, step)


def label(x, y, material, mesh, group=0, circuit="<None>", turns=1, angle=0):
    mi_addblocklabel(x, y)
    mi_selectlabel(x, y)
    mi_setblockprop(material, 0, mesh, circuit, angle, group, turns)
    mi_clearselected()


def begin(mesh, kind="planar", frequency=0, depth=40, radius=100, br=1.1, mur=1.05):
    global AXIS
    AXIS = kind == "axi"
    newdocument(0)
    mi_probdef(frequency, "millimeters", kind, 1e-9, depth, 25)
    mi_addmaterial("Воздух", 1, 1, 0, 0, 0)
    mi_addmaterial("Обмотка без вытеснения тока", 1, 1, 0, 0, 0)
    mi_addmaterial("Медь 58 МСм на метр", 1, 1, 0, 0, 58)
    mi_addmaterial("Сталь с линейной проницаемостью", 1000, 1000, 0, 0, 0)
    mi_addmaterial("Сталь с учебной кривой насыщения", 1, 1, 0, 0, 0)
    for b, h in (
        (0, 0),
        (0.3, 100),
        (0.6, 200),
        (1, 350),
        (1.3, 700),
        (1.5, 1800),
        (1.65, 5000),
        (1.8, 15000),
        (2, 60000),
        (2.2, 200000),
    ):
        mi_addbhpoint("Сталь с учебной кривой насыщения", b, h)
    mi_addmaterial("Постоянный магнит учебный NdFeB", mur, mur, br / (MU0 * mur), 0, 0)
    mi_addboundprop("Внешняя граница A=0", 0, 0, 0, 0, 0, 0, 0, 0, 0)
    if kind == "axi":
        rectangle(0, -radius, radius, radius)
        for x, y in ((0, 0), (radius, 0), (radius / 2, -radius), (radius / 2, radius)):
            mi_selectsegment(x, y)
            mi_setsegmentprop("Внешняя граница A=0", 0, 1, 0, 0)
            mi_clearselected()
    else:
        circle(radius, step=4)
        for angle in (45, 135, 225, 315):
            x, y = point(radius, angle)
            mi_selectarcsegment(x, y)
            mi_setarcsegmentprop(4, "Внешняя граница A=0", 0, 0)
            mi_clearselected()


def band(r1, r2, count, fraction, group, mesh, phase=0, mode="radial"):
    """Кольцевая сборка: заданные магнитные секторы и воздушные промежутки."""
    pitch = 360 / count
    for index in range(count):
        start = index * pitch + phase
        stop = start + pitch * fraction
        for radius in (r1, r2):
            arc(radius, start, stop, group, step=2)
            if fraction < 0.999999:
                arc(radius, stop, start + pitch, group, step=2)
        line(point(r1, start), point(r2, start), group)
        line(point(r1, stop), point(r2, stop), group)
        angle = (start + stop) / 2
        x, y = point((r1 + r2) / 2, angle)
        if mode == "steel":
            label(x, y, "Сталь с линейной проницаемостью", mesh, group)
        else:
            direction = 2 * angle if mode == "halbach" else angle + 180 * (index % 2)
            label(x, y, "Постоянный магнит учебный NdFeB", mesh, group, angle=direction)
        if fraction < 0.999999:
            x, y = point((r1 + r2) / 2, (stop + start + pitch) / 2)
            label(x, y, "Воздух", mesh, group)


def energy():
    mo_clearblock()
    mo_groupselectblock()
    values = [scalar(mo_blockintegral(k)) for k in (2, 17, 4)]
    mo_clearblock()
    return values


def solve(tag, group=2, probe=(1, 0), circuits=()):
    path = OUT + "/" + tag + ".fem"
    mi_saveas(path)
    mi_close()
    opendocument(path)
    mi_analyze(1)
    mi_loadsolution()
    e, w, p = energy()
    row = {
        "state": tag,
        "elements": mo_numelements(),
        "energy_J": e,
        "coenergy_J": w,
        "loss_W": p,
    }
    if group:
        mo_groupselectblock(group)
        if CONFIG.get("kind") != "course":
            row["Fx_N"] = scalar(mo_blockintegral(18))
            row["Fy_N"] = scalar(mo_blockintegral(19))
        row["torque_Nm"] = scalar(mo_blockintegral(22))
        if CONFIG.get("kind") != "course":
            row["lorentz_x_N"] = scalar(mo_blockintegral(11))
            row["lorentz_y_N"] = scalar(mo_blockintegral(12))
        mo_clearblock()
    if CONFIG.get("kind") == "gear":
        for part in (2, 3, 4):
            mo_groupselectblock(part)
            row["T%d_Nm" % part] = scalar(mo_blockintegral(22))
            mo_clearblock()
    values = mo_getpointvalues(probe[0], probe[1])
    row["Bx_T"] = scalar(values[1])
    row["By_T"] = scalar(values[2])
    row["Hx_Am"] = scalar(values[5])
    row["Hy_Am"] = scalar(values[6])
    for circuit in circuits:
        i, v, psi = mo_getcircuitproperties(circuit)
        row[circuit + "_I_A"] = scalar(i)
        row[circuit + "_Psi_Wb"] = scalar(psi)
        row[circuit + "_Psi_im_Wb"] = complex(psi).imag
        row[circuit + "_V_V"] = scalar(v)
        row[circuit + "_V_im_V"] = complex(v).imag
    mo_close()
    mi_close()
    return row


def check(name, value, limit, passed):
    CHECKS.append(
        {"name": name, "value": value, "limit": limit, "passed": bool(passed)}
    )


def relative(a, b, minimum=1e-15):
    return abs(a - b) / max(abs(a), abs(b), minimum)


def finish(plot=None):
    result = {
        "title": CONFIG["title"],
        "records": ROWS,
        "checks": CHECKS,
        "units": "Геометрия мм; магнитное поле Тл, А/м; энергия Дж; сила Н; момент Н·м; потокосцепление Вб.",
        "passed": bool(CHECKS) and all(row["passed"] for row in CHECKS),
    }
    if plot:
        result["plot"] = plot
    with open(OUT + "/result.json", "w") as stream:
        json.dump(result, stream)
    print(CONFIG["id"], result["passed"], len(ROWS), "решений", OUT)
    assert result["passed"], "Не пройдена независимая проверка физической модели."


ROWS = []
CHECKS = []


CONFIG = {
    "id": "pm-machine-skew",
    "kind": "course",
    "study": "pm-skew",
    "title": "Пульсации момента и скос: сравнение отдельных сечений и углового усреднения",
    "source_model": "spm",
    "baseline": 10,
    "angle": 10,
    "metric": "torque_Nm",
    "sweep": [
        0,
        5,
        10,
        15,
        20,
        25,
        30,
        35,
        40,
        45,
        50,
        55,
        60,
        65,
        70,
        75,
        80,
        85,
        90,
        95,
        100,
        105,
        110,
        115,
        120,
        125,
        130,
        135,
        140,
        145,
        150,
        155,
        160,
        165,
        170,
        175,
        180,
    ],
    "metric_label": "Момент, Н·м",
    "parameter_name": "Механический угол, град",
    "circuits": ["Фаза A", "Фаза B", "Фаза C"],
    "group": 2,
    "probe": [58.5, 0],
    "intro": "Скос пазов или магнитов можно предварительно исследовать усреднением согласованных двумерных сечений. Такой метод помогает увидеть подавление пространственных гармоник, сохраняя границу между приближением сечений и полноценной трёхмерной моделью.",
    "theory": "Для каждого общего положения задаются сбалансированные фазные токи статора. Затем три сечения ротора с угловыми смещениями −5°, 0° и +5° рассчитываются при ОДНИХ И ТЕХ ЖЕ токах этого положения. Среднее этих трёх независимых полевых моментов приближает равновесный трёхсекционный скос. Средний полезный момент при таком скосе может уменьшиться: это физическое следствие уменьшения рабочей гармоники. Соседние точки синхронной характеристики с разными токами не заменяют сечения одного положения. Метод не учитывает осевые токи и торцевые поля.",
    "formula": "\\overline T(\\theta,\\mathbf I(\\theta))=\\tfrac13\\sum_{j=-1}^{1}T(\\theta+j\\Delta\\theta,\\mathbf I(\\theta))",
    "scope": "Двумерная учебная геометрия; точные входы и русские свойства включены в комплект. Торцевые поля, механическая динамика, температурная зависимость и реальные потери стали требуют отдельных моделей.",
    "related_lessons": ["I10.2", "II07.2", "II07.3"],
    "dimensions": "Отдельная русская учебная копия геометрии нашего курса. Все координаты, витки, материалы и глубина заданы в input.fem; рабочие токи и угловая серия задаются программой. Сталь линейная, μr=1000.",
    "mesh_scales": [0.8, 0.5, 0.3],
    "magnet_hc": 909456.8176679733,
    "depth": 80.0,
}

with open(HERE + "/input.fem", "r") as stream:
    BASE_TEXT = stream.read()


def prepare(scale=1, angle=0, currents=None, frequency=0, defect=False):
    lines = BASE_TEXT.split("\n")
    start = next(
        i for i in range(len(lines)) if lines[i].startswith("[NumBlockLabels]")
    )
    count = int(lines[start].split("=")[1])
    for i in range(start + 1, start + 1 + count):
        fields = lines[i].split("\t")
        fields[3] = str(float(fields[3]) * scale)
        lines[i] = "\t".join(fields)
    path = OUT + "/текущая-настройка.fem"
    with open(path, "w") as stream:
        stream.write("\n".join(lines) + "\n")
    opendocument(path)
    mi_probdef(frequency, "millimeters", "planar", 1e-9, CONFIG.get("depth", 80), 25)
    for name, value in (currents or {}).items():
        mi_modifycircprop(name, 1, value)
    if defect:
        mi_addmaterial(
            "NdFeB с ослабленной намагниченностью",
            1.05,
            1.05,
            CONFIG["magnet_hc"] * 0.6,
            0,
            0,
        )
        mi_selectlabel(52, 0)
        mi_setblockprop(
            "NdFeB с ослабленной намагниченностью",
            0,
            1.5 * scale,
            "<None>",
            "theta",
            2,
            1,
        )
        mi_clearselected()
    if angle:
        mi_selectgroup(2)
        mi_moverotate(0, 0, angle)
        mi_clearselected()


def phase_currents(angle=0, amplitude=1, delta=0):
    return {
        name: amplitude * math.cos((2 * angle + delta - offset) * math.pi / 180)
        for name, offset in (("Фаза A", 0), ("Фаза B", 120), ("Фаза C", 240))
    }


study = CONFIG["study"]
names = CONFIG["circuits"]
opendocument(HERE + "/input.fem")
ROWS.append(solve("input", CONFIG.get("group", 0), CONFIG.get("probe", [1, 0]), names))
mesh_rows = []
mesh_scales = CONFIG.get("mesh_scales", (0.8, 0.5, 0.3))
fine_scale = mesh_scales[-1]
for index, scale in enumerate(mesh_scales):
    angle = CONFIG.get("angle", 0)
    if study in ("pm-emf", "pm-defect"):
        currents = {name: 0 for name in names}
    elif study == "pm-skew":
        currents = phase_currents(angle, 3, 60)
    elif study == "dc-reaction":
        currents = {names[0]: 1, names[1]: 2}
    elif study == "ct-burden":
        currents = {names[0]: 1, names[1]: 0}
    elif study == "three-phase":
        currents = {names[0]: 1, names[1]: 0, names[2]: 0}
    elif study == "induction-slip":
        currents = {
            names[0]: 1,
            names[1]: complex(-0.5, -math.sqrt(3) / 2),
            names[2]: complex(-0.5, math.sqrt(3) / 2),
        }
    else:
        currents = {
            names[0]: 1,
            names[1]: -0.5 if study == "synrm-angle" else 0,
            names[2]: -0.5 if study == "synrm-angle" else 0,
        }
    prepare(
        scale,
        angle,
        currents,
        frequency=CONFIG.get("frequency", 0),
        defect=study == "pm-defect",
    )
    row = solve(
        "сетка-%d" % (index + 1),
        CONFIG.get("group", 0),
        CONFIG.get("probe", [1, 0]),
        names,
    )
    row["mesh_scale"] = scale
    row["parameter"] = (
        2
        if study == "dc-reaction"
        else CONFIG.get("frequency", 0)
        if study == "induction-slip"
        else angle
    )
    ROWS.append(row)
    mesh_rows.append(row)
fine = mesh_rows[-1]
metric = CONFIG["metric"]
err = relative(mesh_rows[-2][metric], fine[metric])
check("Стабилизация наблюдаемой величины при сгущении сетки", err, 0.025, err < 0.025)
check(
    "Фактическое увеличение числа элементов",
    fine["elements"] / mesh_rows[0]["elements"],
    1.2,
    fine["elements"] > 1.2 * mesh_rows[0]["elements"],
)

if study in ("pm-emf", "pm-skew", "pm-defect", "synrm-angle", "srm-map"):
    for angle in CONFIG["sweep"]:
        if study in ("pm-emf", "pm-defect"):
            currents = {name: 0 for name in names}
        elif study == "pm-skew":
            currents = phase_currents(angle, 3, 60)
        else:
            currents = {
                names[0]: 1,
                names[1]: -0.5 if study == "synrm-angle" else 0,
                names[2]: -0.5 if study == "synrm-angle" else 0,
            }
        prepare(fine_scale, angle, currents, defect=study == "pm-defect")
        row = solve(
            "угол-" + str(angle),
            CONFIG.get("group", 0),
            CONFIG.get("probe", [1, 0]),
            names,
        )
        row["parameter"] = angle
        row["mesh_scale"] = fine_scale
        ROWS.append(row)
    data = ROWS[4:]
    if study in ("pm-emf", "pm-skew", "pm-defect"):
        # Первый и последний узлы — одинаковое положение после периода.
        key = names[0] + "_Psi_Wb" if study != "pm-skew" else "torque_Nm"
        amplitude = max(abs(r[key]) for r in data)
        err = abs(data[-1][key] - data[0][key]) / max(amplitude, 1e-12)
        check("Замыкание углового периода", err, 0.025, err < 0.025)
        if study in ("pm-emf", "pm-defect"):
            omega = 1000 * 2 * math.pi / 60
            step = (data[1]["parameter"] - data[0]["parameter"]) * math.pi / 180
            values = [r[names[0] + "_Psi_Wb"] for r in data[:-1]]

            def derivative_emf(values, step):
                size = len(values)
                return [
                    -omega
                    * (
                        -values[(i + 2) % size]
                        + 8 * values[(i + 1) % size]
                        - 8 * values[(i - 1) % size]
                        + values[(i - 2) % size]
                    )
                    / (12 * step)
                    for i in range(size)
                ]

            emf = derivative_emf(values, step)
            coarse_emf = derivative_emf(values[::2], 2 * step)
            order = int(round((CONFIG["sweep"][-1] - CONFIG["sweep"][0]) * 2 / 360))

            def amplitude(samples):
                size = len(samples)
                coefficient = 0j
                for i, value in enumerate(samples):
                    phase = 2 * math.pi * order * i / size
                    coefficient += value * complex(math.cos(phase), -math.sin(phase))
                return 2 * abs(coefficient) / size

            fine_amplitude = amplitude(emf)
            coarse_amplitude = amplitude(coarse_emf)
            angular_error = relative(fine_amplitude, coarse_amplitude)
            check(
                "Сходимость основной гармоники ЭДС по угловому шагу 15 и 7,5 град",
                angular_error,
                0.01,
                angular_error < 0.01,
            )
            for i, value in enumerate(emf):
                data[i]["emf_A_V"] = value
            check(
                "Ненулевая ЭДС при вращении",
                max(abs(v) for v in emf),
                0,
                max(abs(v) for v in emf) > 0,
            )
        else:
            values = []
            averaged = []
            for center in data:
                angle = center["parameter"]
                currents = phase_currents(angle, 3, 60)
                torques = [center["torque_Nm"]]
                for offset in (-5, 5):
                    # У всех сечений одного положения ОДИН И ТОТ ЖЕ ток статора.
                    prepare(fine_scale, angle + offset, currents)
                    row = solve(
                        "сечение-%03d-%s" % (angle, str(offset)),
                        2,
                        CONFIG.get("probe", [1, 0]),
                        names,
                    )
                    row.update(global_angle_deg=angle, slice_offset_deg=offset)
                    ROWS.append(row)
                    torques.append(row["torque_Nm"])
                center["skew_averaged_torque_Nm"] = sum(torques) / 3
                if angle != CONFIG["sweep"][-1]:
                    values.append(center["torque_Nm"])
                    averaged.append(sum(torques) / 3)
            factor = (1 + 2 * math.cos(2 * 5 * math.pi / 180)) / 3
            err = relative(sum(averaged), factor * sum(values))
            check(
                "Средний момент и гармонический коэффициент трёх фиксированных токовых сечений",
                err,
                0.03,
                err < 0.03,
            )
    elif study == "srm-map":
        angle = CONFIG.get("angle", 15)
        prepare(fine_scale, angle, {names[0]: 2, names[1]: 0, names[2]: 0})
        double = solve("удвоенный-ток", 0, CONFIG.get("probe", [1, 0]), names)
        ROWS.append(double)
        err = relative(double[names[0] + "_Psi_Wb"], 2 * fine[names[0] + "_Psi_Wb"])
        check("Линейное масштабирование потокосцепления", err, 0.001, err < 0.001)
        err = relative(double["coenergy_J"], 4 * fine["coenergy_J"])
        check("Квадратичное масштабирование коэнергии", err, 0.001, err < 0.001)
    else:
        controls = []
        for angle in (CONFIG["angle"] - 0.5, CONFIG["angle"] + 0.5):
            prepare(0.3, angle, {names[0]: 1, names[1]: -0.5, names[2]: -0.5})
            row = solve(
                "виртуальное-смещение-%d" % len(ROWS),
                2,
                CONFIG.get("probe", [1, 0]),
                names,
            )
            ROWS.append(row)
            controls.append(row)
        derivative = (controls[1]["coenergy_J"] - controls[0]["coenergy_J"]) / (
            math.pi / 180
        )
        err = relative(derivative, fine["torque_Nm"])
        check(
            "Момент и производная коэнергии при фиксированных токах",
            err,
            0.07,
            err < 0.07,
        )
elif study == "dc-reaction":
    separate = []
    for field, armature in ((1, 0), (0, 2)):
        prepare(fine_scale, 0, {names[0]: field, names[1]: armature})
        row = solve("раздельное-возбуждение-%d" % len(ROWS), 0, CONFIG["probe"], names)
        ROWS.append(row)
        separate.append(row)
    err = max(
        relative(fine[name + "_Psi_Wb"], sum(r[name + "_Psi_Wb"] for r in separate))
        for name in names
    )
    check(
        "Суперпозиция потокосцеплений двух систем возбуждения", err, 0.002, err < 0.002
    )
    for armature in (0, 1, 2, 3, 4):
        prepare(fine_scale, 0, {names[0]: 1, names[1]: armature})
        row = solve("реакция-якоря-%d" % armature, 0, CONFIG["probe"], names)
        row["parameter"] = armature
        ROWS.append(row)
elif study == "ct-burden":
    prepare(fine_scale, 0, {names[0]: 0, names[1]: 1})
    secondary = solve("вторичный-столбец", 0, CONFIG["probe"], names)
    ROWS.append(secondary)
    l1 = fine[names[0] + "_Psi_Wb"]
    m1 = fine[names[1] + "_Psi_Wb"]
    m2 = secondary[names[0] + "_Psi_Wb"]
    l2 = secondary[names[1] + "_Psi_Wb"]
    err = relative(m1, m2)
    check("Взаимность связи обмоток", err, 0.001, err < 0.001)
    for resistance in (0.01, 0.03, 0.1, 0.3, 1):
        omega = 2 * math.pi * 50
        ip = 100
        secondary_current = -1j * omega * m1 * ip / (resistance + 1j * omega * l2)
        prepare(fine_scale, 0, {names[0]: ip, names[1]: secondary_current}, 50)
        row = solve("нагрузка-%d" % len(ROWS), 0, CONFIG["probe"], names)
        i2 = secondary_current
        v2 = complex(row[names[1] + "_V_V"], row[names[1] + "_V_im_V"])
        v1 = complex(row[names[0] + "_V_V"], row[names[0] + "_V_im_V"])
        residual = abs(v2 + resistance * i2) / max(abs(v2), 1e-12)
        supplied = 0.5 * (v1 * ip).real
        load = 0.5 * resistance * abs(i2) ** 2
        err = relative(supplied, load)
        row.update(
            parameter=resistance,
            secondary_amplitude_A=abs(i2),
            load_power_W=load,
            supplied_power_W=supplied,
            kvl_residual=residual,
            power_error=err,
        )
        ROWS.append(row)
        check(
            "Невязка уравнения вторичной цепи R=" + str(resistance),
            residual,
            0.002,
            residual < 0.002,
        )
        check("Баланс активной мощности R=" + str(resistance), err, 0.002, err < 0.002)
elif study == "three-phase":
    matrix = []
    for i in range(3):
        prepare(
            fine_scale, 0, {name: 1 if j == i else 0 for j, name in enumerate(names)}
        )
        row = solve("столбец-%d" % i, 0, CONFIG["probe"], names)
        ROWS.append(row)
        row["parameter"] = i
        matrix.append([row[name + "_Psi_Wb"] for name in names])
    asym = max(relative(matrix[i][j], matrix[j][i]) for i in range(3) for j in range(3))
    check("Взаимность трёхфазной матрицы", asym, 0.002, asym < 0.002)
    for label_, currents in (
        ("нулевая-последовательность", [1, 1, 1]),
        ("несимметрия", [1, 2, -1]),
        ("баланс", [1, -0.5, -0.5]),
    ):
        prepare(fine_scale, 0, {name: currents[i] for i, name in enumerate(names)})
        row = solve(label_, 0, CONFIG["probe"], names)
        ROWS.append(row)
        expected = 0.5 * sum(
            currents[i] * matrix[j][i] * currents[j] for i in range(3) for j in range(3)
        )
        err = relative(expected, row["energy_J"])
        check("Энергия поля и матрица: " + label_, err, 0.002, err < 0.002)
elif study == "induction-slip":
    for frequency in CONFIG["sweep"]:
        currents = {
            names[0]: 1,
            names[1]: complex(-0.5, -math.sqrt(3) / 2),
            names[2]: complex(-0.5, math.sqrt(3) / 2),
        }
        prepare(fine_scale, 0, currents, frequency)
        row = solve("частота-%d" % len(ROWS), 0, CONFIG["probe"], names)
        supplied = 0
        for name, current in currents.items():
            voltage = complex(row[name + "_V_V"], row[name + "_V_im_V"])
            supplied += 0.5 * (voltage * complex(current).conjugate()).real
        err = relative(supplied, row["loss_W"])
        row.update(parameter=frequency, terminal_power_W=supplied, power_error=err)
        ROWS.append(row)
        check(
            "Баланс потерь поля и выводов, f=" + str(frequency), err, 0.02, err < 0.02
        )

finish(
    {
        "x": "parameter",
        "y": CONFIG.get("plot_metric", CONFIG["metric"]),
        "x_label": CONFIG.get("parameter_name", "Параметр"),
        "y_label": CONFIG.get("plot_label", CONFIG["metric_label"]),
    }
)

Картина рассчитанного поля

Линии магнитного потока: сетка-3.ans
Визуализация сохранённого решения FEMM 5 сетка-3.ans. Плоская постановка: изолинии векторного потенциала Az. Показана магнитостатическая картина; численной шкалы индукции здесь нет. Показан увеличенный фрагмент расчётной области. Контуры деталей взяты из той же модели. Области вне сохранённых треугольников не заполняются. Это научный график сохранённых данных. Нажмите на карту, чтобы открыть её отдельно и увеличить.

Окна FEMM 5

Снимки интерфейса FEMM показывают геометрию, настройки и работу с результатами в FEMM 5. Откройте изображение, чтобы рассмотреть подписи и значения в полном размере.

Машина с постоянными магнитами: одно плоское сечение из расчётной серии для учёта скоса. Подписи скрыты для читаемости.
Машина с постоянными магнитами: одно плоское сечение из расчётной серии для учёта скоса. Подписи скрыты для читаемости. Открыть в полном размере
Учёт скоса машины с постоянными магнитами: статическое поле одного выбранного плоского сечения. Карта |B|, Т, и линии поля; итоговый эффект скоса получают взвешиванием серии угловых сечений.
Учёт скоса машины с постоянными магнитами: статическое поле одного выбранного плоского сечения. Карта |B|, Т, и линии поля; итоговый эффект скоса получают взвешиванием серии угловых сечений. Открыть в полном размере

Результаты и численные проверки

Сохранено решений FEMM: 4. Выполнено проверок: 4. Полная точность чисел и условия сравнения доступны в таблицах результатов JSON.

Результаты расчётов и производные итоги
ЭлементовНапряжение, В: Фаза CМнимая часть потокосцепления, Вб: Фаза BНапряжение, В: Фаза AИндукция Bx, ТлКоэнергия, ДжМнимая часть потокосцепления, Вб: Фаза AСостояниеТок, А: Фаза BМнимая часть потокосцепления, Вб: Фаза CМнимая часть напряжения, В: Фаза CПотокосцепление, Вб: Фаза BНапряжение, В: Фаза BПотери, ВтНапряжённость Hy, А/мМнимая часть напряжения, В: Фаза BПотокосцепление, Вб: Фаза CМомент, Н·мТок, А: Фаза CИндукция By, ТлТок, А: Фаза AМнимая часть напряжения, В: Фаза AПотокосцепление, Вб: Фаза AЭнергия, ДжНапряжённость Hx, А/мОтносительный масштаб сеткиПараметр серииМомент после усреднения скоса, Н·мОбщий угол ротора, °Угловое смещение сечения, °
484140000,500480,840input1000,290400-19110-0,2922-1,156-2-0,002401100,001816196398200—————
686660000,503382,860сетка-12,298000,37100-7690-0,19679,983-2,819-966,3 × 10⁻⁶0,52090-0,097341984006000,810———
1605880000,502982,920сетка-22,298000,371300-9030-0,19699,905-2,819-0,0011350,52090-0,097411984002000,510———
4301230000,503282,960сетка-32,298000,371400-7300-0,1979,858-2,819-917,4 × 10⁻⁶0,52090-0,09745198,14005000,310———
4302300000,503281,450угол-01,5000,291900-29710-0,2946-1,727-3-0,0037331,500,002732196,64005000,30-1,648——
4302680000,502981,90угол-51,928000,338400-27090-0,2458,969-2,954-0,0034041,0260-0,048581974002000,355,733——
4301230000,503282,960угол-102,298000,371400-7300-0,1979,858-2,819-917,4 × 10⁻⁶0,52090-0,09745198,14005000,3105,85——
4305590000,505183,550угол-152,598000,384800-13710-0,15-1,414-2,598-0,001723183,7 × 10⁻¹⁸0-0,1451198,74019000,315-1,424——
4303440000,502882,980угол-202,819000,372300-32520-0,1027-12,82-2,298-0,004086-0,52090-0,1927198,14001000,320-8,813——
4303870000,501481,920угол-252,954000,340200-36510-0,05408-12,22-1,928-0,004588-1,0260-0,24141973990000,325-8,94——
4308930000,495681,440угол-303000,294500-121300-0,002827-1,729-1,5-0,01524-1,50-0,2918196,63944000,330-1,652——
4306530000,469881,890угол-352,954000,244900-5628000,048528,995-1,026-0,07073-1,9280-0,33841973738000,3355,754——
4304730000,249182,950угол-402,819000,196900-21960000,09749,897-0,5209-0,2759-2,2980-0,3714198,11982000,3405,883——
4308700000,0028983,550угол-452,598000,149800-10840000,1451-1,38183,7 × 10⁻¹⁸-0,1362-2,5980-0,3848198,723000,345-1,396——
430477000-0,243182,980угол-502,298000,102500-21990000,1927-12,80,5209-0,2763-2,8190-0,3723198,1-1934000,350-8,794——
430445000-0,463981,920угол-551,928000,0538900-5442000,2414-12,211,026-0,06839-2,9540-0,3402197-3691000,355-8,931——
430300000-0,490581,440угол-601,5000,0026300-908900,2917-1,7261,5-0,01142-30-0,2945196,6-3904000,360-1,647——
429996000-0,495981,890угол-651,02600-0,048700132,300,33848,9961,928166,2 × 10⁻⁶-2,9540-0,2449197-3946000,3655,76——
430243000-0,498982,950угол-700,520900-0,097600170000,37149,9112,2980,002136-2,8190-0,1969198,1-3970000,3705,899——
430687000-0,502283,550угол-75183,7 × 10⁻¹⁸00-0,145200287700,3848-1,3462,5980,003615-2,5980-0,1498198,7-3996000,375-1,366——
431100000-0,501382,980угол-80-0,520900-0,192900438500,3724-12,762,8190,00551-2,2980-0,1026198,1-3989000,380-8,76——
430838000-0,501881,930угол-85-1,02600-0,241500281500,3403-12,182,9540,003537-1,9280-0,05395197,1-3992880,385-8,908——
430114000-0,503481,450угол-90-1,500-0,291800319900,2945-1,72530,00402-1,50-0,002726196,6-4006000,390-1,647——
430622000-0,503181,90угол-95-1,92800-0,338400294100,2458,9682,9540,003696-1,02600,04858197-4004000,3955,734——
430856000-0,503882,960угол-100-2,29800-0,371400743,800,1979,8592,819934,6 × 10⁻⁶-0,520900,09746198,1-4009000,31005,851——
430470000-0,504883,550угол-105-2,59800-0,384800178000,15-1,412,5980,002237-551,1 × 10⁻¹⁸00,1451198,7-4017000,3105-1,422——
430324000-0,503682,980угол-110-2,81900-0,372300319600,1027-12,822,2980,0040160,520900,1927198,1-4007000,3110-8,811——
430044000-0,501981,920угол-115-2,95400-0,340200347500,05408-12,211,9280,0043671,02600,2414197-3994000,3115-8,939——
430227000-0,496181,440угол-120-300-0,2945001213000,00282-1,7291,50,015241,500,2918196,6-3948000,3120-1,651——
430421000-0,469781,890угол-125-2,95400-0,244900563300-0,048518,9951,0260,070791,92800,3384197-3737000,31255,755——
430155000-0,248682,950угол-130-2,81900-0,1969002211000-0,097429,8990,52090,27782,29800,3714198,1-1978000,31305,882——
430657000-0,0032683,550угол-135-2,59800-0,1498001083000-0,1451-1,385183,7 × 10⁻¹⁸0,13612,59800,3848198,7-25940,3135-1,396——
4307080000,243782,980угол-140-2,29800-0,1025002195000-0,1927-12,8-0,52090,27582,81900,3724198,11939000,3140-8,796——
4297660000,463681,920угол-145-1,92800-0,0538900544300-0,2414-12,21-1,0260,06842,95400,34021973689000,3145-8,932——
4305390000,490881,440угол-150-1,500-0,002630093350-0,2917-1,728-1,50,01173300,2945196,63905000,3150-1,648——
4307440000,496581,890угол-155-1,026000,048710058,850-0,33849-1,92873,95 × 10⁻⁶2,95400,24491973951000,31555,761——
4305220000,498682,950угол-160-0,5209000,097600-15280-0,37149,911-2,298-0,001922,81900,1969198,13968000,31605,9——
4304860000,501783,550угол-165-551,1 × 10⁻¹⁸000,145200-33830-0,3848-1,346-2,598-0,0042512,59800,1498198,73993000,3165-1,366——
4306110000,50182,990угол-1700,5209000,192900-41620-0,3724-12,76-2,819-0,0052312,29800,1026198,13987000,3170-8,76——
4307830000,50281,930угол-1751,026000,241500-29550-0,3403-12,18-2,954-0,0037131,92800,053951973995000,3175-8,909——
4306740000,504481,450угол-1801,5000,291800-25370-0,2946-1,726-3-0,0031881,500,002728196,64014000,3180-1,647——
4307250000,502582,030сечение-000--51,5000,242400-26300-0,3404-11,7-3-0,0033051,500,05318197,2399800———0-5
4302680000,502481,740сечение-000-51,5000,337600-36250-0,24518,479-3-0,0045561,50-0,04772196,9399800———05
4302300000,503781,560сечение-005--51,928000,292600-20530-0,2945-1,181-2,954-0,002581,02600,001871196,7400800———5-5
4301230000,50382,80сечение-005-51,928000,370800-17070-0,19739,411-2,954-0,0021451,0260-0,09653197,9400200———55
4302680000,503282,010сечение-010--52,298000,339100-17320-0,24489,5-2,819-0,0021770,52090-0,0495197,1400400———10-5
4305590000,50583,390сечение-010-52,298000,384200-23780-0,1504-1,808-2,819-0,0029880,52090-0,1441198,5401900———105
4301230000,503383,080сечение-015--52,598000,37200277,30-0,196610,34-2,598348,5 × 10⁻⁶183,7 × 10⁻¹⁸0-0,0984198,2400500———15-5
4303440000,502982,830сечение-015-52,598000,371900-42590-0,1033-13,2-2,598-0,005352183,7 × 10⁻¹⁸0-0,1918197,9400200———155
4305590000,50583,670сечение-020--52,819000,385200-3640-0,1494-0,9779-2,298-457,5 × 10⁻⁶-0,52090-0,146198,8401900———20-5
4303870000,501681,770сечение-020-52,819000,3400-46280-0,05475-12,64-2,298-0,005816-0,52090-0,2405196,9399200———205
4303440000,502583,090сечение-025--52,954000,372600-22750-0,1021-12,38-1,928-0,002859-1,0260-0,1936198,2399900———25-5
4308930000,496181,290сечение-025-52,954000,294400-130500-0,003605-2,223-1,928-0,01639-1,0260-0,2909196,4394800———255
4303870000,500982,030сечение-030--53000,340300-27340-0,0533-11,73-1,5-0,003435-1,50-0,2423197,1398600———30-5
4306530000,470481,730сечение-030-53000,244900-5711000,047668,505-1,5-0,07177-1,50-0,3376196,9374300———305
4308930000,49581,550сечение-035--52,954000,294400-113000-0,001965-1,183-1,026-0,0142-1,9280-0,2925196,7393900———35-5
4304730000,249982,790сечение-035-52,954000,197100-22030000,096489,45-1,026-0,2769-1,9280-0,3707197,9198900———355
4306530000,469820сечение-040--52,819000,244600-5557000,049449,526-0,5209-0,06983-2,2980-0,339197,1373200———40-5
4308700000,00377183,390сечение-040-52,819000,150200-10900000,1441-1,775-0,5209-0,1369-2,2980-0,3842198,53001———405
4304730000,248283,070сечение-045--52,598000,196500-21900000,0983510,38183,7 × 10⁻¹⁸-0,2752-2,5980-0,372198,2197500———45-5
430477000-0,242182,830сечение-045-52,598000,103100-22030000,1917-13,19183,7 × 10⁻¹⁸-0,2768-2,5980-0,3719197,9-192700———455
4308700000,00191583,660сечение-050--52,298000,149300-10800000,146-0,94420,5209-0,1357-2,8190-0,3852198,81524———50-5
430445000-0,462881,770сечение-050-52,298000,0545700-5468000,2405-12,640,5209-0,06871-2,8190-0,34196,9-368300———505
430477000-0,244183,090сечение-055--51,928000,101900-21960000,1936-12,371,026-0,276-2,9540-0,3726198,2-194300———55-5
430300000-0,489481,290сечение-055-51,928000,00340900-917700,2909-2,2191,026-0,01153-2,9540-0,2944196,4-389500———555
430445000-0,46582,020сечение-060--51,5000,0531100-5434000,2422-11,721,5-0,06828-30-0,3403197,1-370000———60-5
429996000-0,494881,730сечение-060-51,500-0,0478400220,900,33768,5061,5277,6 × 10⁻⁶-30-0,245196,9-393700———605
430300000-0,491681,550сечение-065--51,026000,00176800-917700,2925-1,181,928-0,01153-2,9540-0,2944196,7-391200———65-5
430243000-0,497882,790сечение-065-51,02600-0,0966800196100,37079,4641,9280,002465-2,9540-0,1971197,9-396200———655
429996000-0,4969820сечение-070--50,520900-0,0496200-13000,3399,5272,298-163,4 × 10⁻⁶-2,8190-0,2446197,1-395500———70-5
430687000-0,501283,390сечение-070-50,520900-0,144300330500,3842-1,742,2980,004153-2,8190-0,1502198,5-398800———705
430243000-0,499983,070сечение-075--5183,7 × 10⁻¹⁸00-0,0985500127300,371910,392,5980,001599-2,5980-0,1965198,2-397800———75-5
431100000-0,500482,830сечение-075-5183,7 × 10⁻¹⁸00-0,191900496500,372-13,152,5980,006239-2,5980-0,1031198-398200———755
430687000-0,503183,670сечение-080--5-0,520900-0,146200229600,3852-0,90992,8190,002886-2,2980-0,1493198,8-400300———80-5
430838000-0,50181,780сечение-080-5-0,520900-0,240600353000,34-12,612,8190,004436-2,2980-0,05462196,9-398700———805
431100000-0,50283,090сечение-085--5-1,02600-0,193800367000,3726-12,332,9540,004612-1,9280-0,1019198,2-399500———85-5
430114000-0,502881,30сечение-085-5-1,02600-0,29100402600,2945-2,2182,9540,005059-1,9280-0,003504196,4-400100———855
430838000-0,502482,040сечение-090--5-1,500-0,242400198700,3404-11,6930,002496-1,50-0,05317197,2-399800———90-5
430622000-0,502781,740сечение-090-5-1,500-0,337600385700,24518,47830,004847-1,500,04772196,9-400000———905
430114000-0,503981,560сечение-095--5-1,92800-0,292600228300,2945-1,1792,9540,002869-1,0260-0,001864196,7-401000———95-5
430856000-0,503582,80сечение-095-5-1,92800-0,370800172000,19739,4122,9540,002162-1,02600,09654197,9-400700———955
430622000-0,503482,010сечение-100--5-2,29800-0,339100196500,24489,4992,8190,002469-0,520900,0495197,1-400600———100-5
430470000-0,504783,390сечение-100-5-2,29800-0,384200278800,1504-1,8042,8190,003503-0,520900,1441198,5-401600———1005
430856000-0,503983,080сечение-105--5-2,59800-0,37200-263,300,196610,342,598-330,9 × 10⁻⁶-551,1 × 10⁻¹⁸00,09841198,2-401000———105-5
430324000-0,503782,830сечение-105-5-2,59800-0,371900420300,1033-13,22,5980,005281-551,1 × 10⁻¹⁸00,1918198-400800———1055
430470000-0,504783,670сечение-110--5-2,81900-0,385200773,400,1494-0,9742,298971,9 × 10⁻⁶0,520900,146198,8-401600———110-5
430044000-0,502281,770сечение-110-5-2,81900-0,3400445100,05475-12,642,2980,0055940,520900,2405196,9-399600———1105
430324000-0,503383,090сечение-115--5-2,95400-0,372600221900,1021-12,381,9280,0027891,02600,1936198,2-400500———115-5
430227000-0,496581,290сечение-115-5-2,95400-0,2944001305000,003599-2,2231,9280,016391,02600,2909196,4-395100———1155
430044000-0,501582,020сечение-120--5-300-0,340300256000,0533-11,731,50,0032161,500,2422197,1-399000———120-5
430421000-0,470381,730сечение-120-5-300-0,24500571600-0,047658,5051,50,071831,500,3376196,9-374200———1205
430227000-0,495481,550сечение-125--5-2,95400-0,2944001130000,001959-1,1831,0260,01421,92800,2925196,7-394300———125-5
430155000-0,249482,790сечение-125-5-2,95400-0,1971002218000-0,09659,4521,0260,27871,92800,3707197,9-198500———1255
430421000-0,4689820сечение-130--5-2,81900-0,244600556200-0,049439,5260,52090,069892,29800,339197,1-373100———130-5
430657000-0,0041483,390сечение-130-5-2,81900-0,1502001089000-0,1441-1,7790,52090,13692,29800,3842198,5-3295———1305
430155000-0,247783,070сечение-135--5-2,59800-0,1965002205000-0,0983710,38183,7 × 10⁻¹⁸0,27712,59800,372198,2-197100———135-5
4307080000,242782,830сечение-135-5-2,59800-0,1031002199000-0,1917-13,18183,7 × 10⁻¹⁸0,27632,59800,3719197,9193200———1355
430657000-0,00228683,660сечение-140--5-2,29800-0,1493001079000-0,146-0,9491-0,52090,13562,81900,3852198,8-1819———140-5
4297660000,462581,770сечение-140-5-2,29800-0,0545600546900-0,2405-12,64-0,52090,068722,81900,34196,9368100———1405
4307080000,244883,090сечение-145--5-1,92800-0,1019002192000-0,1936-12,37-1,0260,27552,95400,3726198,2194800———145-5
4305390000,489781,280сечение-145-5-1,92800-0,0034080094220-0,2909-2,222-1,0260,011842,95400,2944196,4389700———1455
4297660000,464782,020сечение-150--5-1,500-0,0531100543400-0,2422-11,72-1,50,06829300,3403197,1369800———150-5
4307440000,495481,730сечение-150-5-1,5000,0478400-30,220-0,33768,51-1,5-37,97 × 10⁻⁶300,245196,9394200———1505
4305390000,491881,550сечение-155--5-1,02600-0,0017680094240-0,2925-1,182-1,9280,011842,95400,2944196,7391400———155-5
4305220000,497682,790сечение-155-5-1,026000,0966800-17900-0,37079,464-1,928-0,0022492,95400,1971197,9395900———1555
4307440000,4975820сечение-160--5-0,5209000,0496200321,60-0,3399,53-2,298404,2 × 10⁻⁶2,81900,2447197,1395900———160-5
4304860000,500783,390сечение-160-5-0,5209000,144300-38100-0,3842-1,74-2,298-0,0047882,81900,1502198,5398500———1605
4305220000,499683,070сечение-165--5-551,1 × 10⁻¹⁸000,0985500-11010-0,371910,39-2,598-0,0013832,59800,1965198,2397600———165-5
4306110000,500182,830сечение-165-5-551,1 × 10⁻¹⁸000,191900-47430-0,372-13,14-2,598-0,005962,59800,1031198398000———1655
4304860000,502683,670сечение-170--50,5209000,146200-28030-0,3852-0,9098-2,819-0,0035232,29800,1493198,8400000———170-5
4307830000,501281,780сечение-170-50,5209000,240600-36690-0,34-12,61-2,819-0,0046112,29800,05462196,9398800———1705
4306110000,501883,10сечение-175--51,026000,193800-34470-0,3726-12,33-2,954-0,0043321,92800,1019198,2399300———175-5
4306740000,503881,30сечение-175-51,026000,29100-33650-0,2945-2,219-2,954-0,0042291,92800,003507196,4400900———1755
4307830000,502682,030сечение-180--51,5000,242400-21260-0,3404-11,7-3-0,0026721,500,05317197,2400000———180-5
4303180000,502981,740сечение-180-51,5000,337600-37930-0,24518,48-3-0,0047671,50-0,04772196,9400200———1805
Проверки опубликованного расчёта
КритерийПолученоДопуск или ожидаемое значениеИтог
Стабилизация наблюдаемой величины при сгущении сетки0,0047520,025Выполнен
Фактическое увеличение числа элементов6,2641,2Выполнен
Замыкание углового периода85,98 × 10⁻⁶0,025Выполнен
Средний момент и гармонический коэффициент трёх фиксированных токовых сечений664,9 × 10⁻⁹0,03Выполнен

Допуски относятся к указанной учебной задаче и способу сравнения. Число показанных цифр не означает такой же физической точности.

Модели, решения и программа

Для нового расчёта сохраните программу, модели и необходимые данные в одну рабочую папку, сохраняя структуру подпапок.

Полные численные результаты

Границы применимости