{
  "id": "nonlinear-transformer-newton",
  "lesson_ids": [
    "II03.2",
    "II03.3",
    "II03.4"
  ],
  "title": "Нелинейный трансформатор: четыре вещественные неизвестные и полный метод Ньютона",
  "intro": [
    "При заданном напряжении ток намагничивания заранее неизвестен: он определяется насыщением сердечника и нагрузкой. FEMM принимает токи обмоток и возвращает поле и портовые величины, поэтому рабочую точку находят согласованием внешней электрической цепи с полевым решением.",
    "В этом примере используются собственная геометрия курса, её однозначная восьмиточечная B–H-кривая, нагрузка 10 Ом и внешнее сопротивление первичной обмотки 0,8 Ом. Источники 100 и 105 В здесь амплитудные: это примерно 70,71 и 74,25 В действующего значения."
  ],
  "theory": [
    {
      "heading": "Как получить систему для Ньютона",
      "paragraphs": [
        "Комплексные токи содержат четыре независимые вещественные компоненты. Для нелинейного материала не следует предполагать, что отображение токов в напряжения является комплексно-аналитическим. Поэтому записываем действительную и мнимую части обоих цепных остатков отдельно.",
        "Линеаризация остатка в окрестности текущего вектора x даёт r(x+Δx)≈r(x)+JΔx. Условие нулевого линейного остатка приводит к системе JΔx=−r. Каждый столбец J получают двумя полноценными полевыми решениями, изменяя одну из четырёх компонент токов.",
        "Следовательно, построение центрального Якобиана требует восьми возмущённых решений. Плюс базовое поле, пробный шаг и заключительный повтор — именно поэтому число полевых обращений больше числа итераций."
      ],
      "formulas": [
        {
          "latex": "\\mathbf x=\\begin{bmatrix}\\operatorname{Re}\\widehat I_1&\\operatorname{Im}\\widehat I_1&\\operatorname{Re}\\widehat I_2&\\operatorname{Im}\\widehat I_2\\end{bmatrix}^{\\mathsf T}",
          "explanation": "Токи задаются амплитудными фазорами."
        },
        {
          "latex": "\\underline r_1=R_1\\widehat I_1+\\widehat U_{1,\\mathrm{поле}}-\\widehat U_{\\mathrm{ист}},\\qquad \\underline r_2=\\widehat U_{2,\\mathrm{поле}}+R_{\\mathrm{наг}}\\widehat I_2",
          "explanation": "Внешний R₁ добавляется один раз: исходные обмоточные области этой модели имеют σ=0."
        },
        {
          "latex": "J_{jk}\\approx\\frac{r_j(\\mathbf x+h\\mathbf e_k)-r_j(\\mathbf x-h\\mathbf e_k)}{2h},\\qquad \\mathbf J\\Delta\\mathbf x=-\\mathbf r,\\qquad \\mathbf x_{\\mathrm{нов}}=\\mathbf x+\\alpha\\Delta\\mathbf x",
          "explanation": "Множитель 0<α≤1 выбирают так, чтобы остаток уменьшался."
        }
      ]
    },
    {
      "heading": "Сходимость и независимые контроли",
      "paragraphs": [
        "Шаг разности h выбирается достаточно большим относительно ошибки поля и достаточно малым для локальной линейности. Повтор с h/2 выполняется из той же начальной точки: запуск из уже найденного решения практически не проверяет Якобиан.",
        "Для продолжения по напряжению решение при 100 В используется как начальная точка для 105 В. Это ускоряет поиск, но не освобождает от заключительной проверки цепных уравнений при новом напряжении.",
        "В таблице отчётливо видно, что первичный реактивный ток возрастает нелинейно. Энергии гармонической модели не подставляются без проверки в магнитостатические формулы; критерием согласования служат напряжения, токи и средняя активная мощность."
      ],
      "formulas": [
        {
          "latex": "\\varepsilon_r=\\frac{\\|\\mathbf r\\|_\\infty}{\\max(U_{\\mathrm{ист,амп}},1\\,\\mathrm{В})},\\qquad P=\\frac12\\operatorname{Re}\\!\\left(\\widehat U\\widehat I^{*}\\right)",
          "explanation": "Нормировка остатка имеет объявленный размерный масштаб."
        }
      ]
    }
  ],
  "parameters": [
    {
      "name": "Амплитуды напряжения",
      "value": "100;105",
      "unit": "В"
    },
    {
      "name": "Внешнее первичное сопротивление",
      "value": 0.8,
      "unit": "Ом"
    },
    {
      "name": "Нагрузка",
      "value": 10,
      "unit": "Ом"
    },
    {
      "name": "Разностный шаг",
      "value": "0,001;0,0005",
      "unit": "А"
    },
    {
      "name": "Критерий относительного остатка",
      "value": 1e-05,
      "unit": ""
    }
  ],
  "steps": [
    "Изучите обозначения портов и выпишите четыре вещественных неизвестных до запуска программы.",
    "Выполните reproduce.py и сопоставьте новое контрольное поле с принятой рабочей точкой.",
    "Полные программы, названные далее, запускайте через run-series.py из корня распакованного комплекта: выберите SERIES_NUMBER по списку README.html. Диспетчер сам устанавливает подпапку и контекст исходной программы; прежний рабочий каталог FEMM не важен.",
    "Для полного поиска запустите reference/native-circuits.py встроенным Python из каталога reference. Файл native-newton-validation.py повторяет проверку шага из исходной точки.",
    "Просмотрите журнал r(k) и число обращений FEMM. Сравните 100 и 105 В; не заменяйте источник амплитудными 120 В из другого разбора.",
    "Сверьте заключительное поле, половинный шаг и строгую точность поля 10⁻¹⁰."
  ],
  "table": {
    "columns": [
      {
        "key": "u",
        "label": "Напряжение, амплитуда",
        "unit": "В"
      },
      {
        "key": "i1r",
        "label": "Re I₁",
        "unit": "А"
      },
      {
        "key": "i1i",
        "label": "Im I₁",
        "unit": "А"
      },
      {
        "key": "i2r",
        "label": "Re I₂",
        "unit": "А"
      },
      {
        "key": "i2i",
        "label": "Im I₂",
        "unit": "А"
      },
      {
        "key": "calls",
        "label": "Обращения FEMM",
        "unit": ""
      },
      {
        "key": "res",
        "label": "Норма остатка ∞",
        "unit": "В"
      }
    ],
    "rows": [
      {
        "u": 100.0,
        "i1r": 2.6574203310878195,
        "i1i": -5.275875042865364,
        "i2r": -4.8727704597038555,
        "i2i": -0.19668979959378033,
        "calls": 42,
        "res": 5.089387739509732e-05
      },
      {
        "u": 105.0,
        "i1r": 2.9898335364519277,
        "i1i": -7.555630598751489,
        "i2r": -5.101899896181523,
        "i2i": -0.28646886037533215,
        "calls": 32,
        "res": 5.616569067967703e-05
      }
    ]
  },
  "series": [
    {
      "title": "Сходимость при 100 В",
      "x_label": "Итерация",
      "y_label": "Относительный остаток",
      "points": [
        [
          0,
          0.31281590710690316
        ],
        [
          1,
          0.040222585542992136
        ],
        [
          2,
          0.0074855790014541415
        ],
        [
          3,
          0.00029063867946035773
        ],
        [
          4,
          5.089387739509732e-07
        ]
      ]
    },
    {
      "title": "Продолжение до 105 В",
      "x_label": "Итерация",
      "y_label": "Относительный остаток",
      "points": [
        [
          0,
          0.0476194840780246
        ],
        [
          1,
          0.008126006674916517
        ],
        [
          2,
          0.00032366554233646247
        ],
        [
          3,
          5.349113398064479e-07
        ]
      ]
    }
  ],
  "scope": [
    "Расчёт нелинейной основной гармоники не воспроизводит бросок включения, апериодическую составляющую и полную временную петлю гистерезиса.",
    "B–H-кривая учебная; отсутствие магнитных потерь в данном материале не подтверждает высокий КПД реального трансформатора.",
    "Фиксированная комплексная поправка исходника MyTransformer и этот обновляемый вещественный Якобиан — разные алгоритмы."
  ],
  "sources": [
    {
      "title": "D. Meeker. Determination of Single-Phase Transformer Operating Point",
      "url": "https://www.femm.info/doku/doku.php?id=MyTransformer"
    },
    {
      "title": "Руководство FEMM 5, разделы магнитного поля и встроенного Python",
      "url": "https://www.femm.info/doku/lib/exe/fetch.php?media=femm-qt:docs:manual.pdf"
    }
  ],
  "checks": [
    {
      "name": "Относительный цепной остаток при 100 В",
      "value": 5.089387739509732e-07,
      "limit": "< 10⁻⁵",
      "passed": true
    },
    {
      "name": "Относительный цепной остаток при 105 В",
      "value": 5.349113398064479e-07,
      "limit": "< 10⁻⁵",
      "passed": true
    }
  ],
  "downloads": [],
  "python": {
    "path": "downloads/audit-native/nonlinear-transformer-newton/reproduce.py",
    "description": "Распакуйте ZIP целиком в новую папку. Выполните reproduce.py встроенным Python FEMM 5: проверяются хеши, заново решаются контрольные поля и пересчитываются численные проверки таблиц. Рабочий каталог определяется по пути сохранённого сценария. Полные программы запускайте через run-series.py; номер SERIES_NUMBER выбирается по списку в README.html."
  },
  "provenance": {
    "origin": "Неизменённые ранее выполненные расчёты FEMM 5 и новый читаемый разбор",
    "runtime": "FEMM 5.0 06Oct2026; встроенный MicroPython; без внешнего Python/COM/TCP",
    "files": [
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/checks.json",
        "path": "reference/checks.json",
        "sha256": "028201bcab6465b2b465d538cd64d7a6c2590c05d17f70dcf56f614847f69169",
        "bytes": 2543
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/complete-plan.json",
        "path": "reference/complete-plan.json",
        "sha256": "63f6a8186ab76dcb96785d195e1e148446e06151e38a650e3f921671fb274348",
        "bytes": 2349
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/control-0.fem",
        "path": "reference/control-0.fem",
        "sha256": "a7ca08dce6a26b490d2ea0964e9da33fe82bf39eaad58f62e68e69999442568d",
        "bytes": 4302
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/key-cases.json",
        "path": "reference/key-cases.json",
        "sha256": "498f675f56cbc13071682dbd43f861391e712b0bd3327722266f0e4009ac6559",
        "bytes": 788
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/measurements.json",
        "path": "reference/measurements.json",
        "sha256": "9742e80f3cdb3a47d465aeb6ba9fc05cf87230f3df8efda123076486f5371a83",
        "bytes": 21550
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/native-circuits.py",
        "path": "reference/native-circuits.py",
        "sha256": "ecc580e80f8c75ae27badd372b5b85771807c52be251edf1dc1679e75297abd7",
        "bytes": 11097
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/native-experiments-02.json",
        "path": "reference/native-experiments-02.json",
        "sha256": "1f5c05e285bba7f53c68182ea6a04541979fcbff0163aeb10e5d0bc4ed2064ec",
        "bytes": 54774
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/native-experiments-06.json",
        "path": "reference/native-experiments-06.json",
        "sha256": "7fcea1590892f661aa7fb40877607af0319676ddeb252b61d534cf5c92f24f14",
        "bytes": 10511
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/native-experiments-25.json",
        "path": "reference/native-experiments-25.json",
        "sha256": "24b538dbf639066ed50d2e418f14c697a56a7953910ca2e40c1263b58bf4276e",
        "bytes": 5005
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/native-newton-validation.py",
        "path": "reference/native-newton-validation.py",
        "sha256": "25e8520ae1054c98eba15031ff97f7f84570c06c6271d626dae1746fc08b678d",
        "bytes": 7640
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/native-power-controls.py",
        "path": "reference/native-power-controls.py",
        "sha256": "2054d8bdc7f5b1b841a6fa6199efd2ec4bf1177ab4b47fbadecd19c14721dc97",
        "bytes": 8163
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/native-receipt-06.json",
        "path": "reference/native-receipt-06.json",
        "sha256": "2c7aeeccf89b6f929ce598d0a5e018bf86c9fced3d6160bca86248054b3a84a7",
        "bytes": 7650
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/native-receipt-25.json",
        "path": "reference/native-receipt-25.json",
        "sha256": "2fa28fcc2b15d5c2c95f338e8b1bb0ee039c80098183735040bb3ccca1645302",
        "bytes": 11247
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/native-receipt-31.json",
        "path": "reference/native-receipt-31.json",
        "sha256": "eadf6cf4d0e3434585c00c4cfac9b1cde5edca8cb69120cd12a200baceb5e498",
        "bytes": 12051
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/original-00.py",
        "path": "reference/original-00.py",
        "sha256": "9acebc4a17deae4c41bd7c7abdfb5a2b4be531cc1fec39ba7c8542b9a686b046",
        "bytes": 3431
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/practice-ii03-3-source-model.fem",
        "path": "reference/practice-ii03-3-source-model.fem",
        "sha256": "b8dd950f2a7fc8ae185404ce0152efc14337db666f550b90981304f08435ca8c",
        "bytes": 4064
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/practice-ii04-1-source-model.fem",
        "path": "reference/practice-ii04-1-source-model.fem",
        "sha256": "3cfadefe050e83f49a32a3b9818451bbaeb14796087be247a184ad45b98a6917",
        "bytes": 5980
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/practice-ii10-1-source-model.fem",
        "path": "reference/practice-ii10-1-source-model.fem",
        "sha256": "4359e6c02996417d398d057cc9a85d8f495a3362389f4127f9562217d5c122de",
        "bytes": 4307
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/REPORT.md",
        "path": "reference/REPORT.md",
        "sha256": "39cd900a98ab1d3533ac733b3438ec7c3df614ea951c4d5db79a57349d4e9678",
        "bytes": 9991
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/reproduce.py",
        "path": "reference/reproduce.py",
        "sha256": "387b7342605f5c0a00ce968898383f66175be4fa0f1ffd6d9656d603236cca56",
        "bytes": 2375
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/result.json",
        "path": "reference/result.json",
        "sha256": "54d565de79a9c0ae18c7ed9224ec2a7d58a8c8d943db70327db3589930a345e7",
        "bytes": 18985
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/results.csv",
        "path": "reference/results.csv",
        "sha256": "7153876911e0d0115edf6f21f98e50745845f39ed1b95d43f5c17a16e7bcf38b",
        "bytes": 34005
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/secondary-marking-reversed-source-model.fem",
        "path": "reference/secondary-marking-reversed-source-model.fem",
        "sha256": "16129745b2809dab4531b3a3b3f930dbae60e5a4ae1ae491a0768e4b5729f082",
        "bytes": 6336
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/source-manifest.json",
        "path": "reference/source-manifest.json",
        "sha256": "cf12118bc866964d4a58c925e6c70beb3f9e100aa5c2321abe2967232e7e9814",
        "bytes": 2620
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/source-task.json",
        "path": "reference/source-task.json",
        "sha256": "e97064e6837fdd90c509cd63b6d875b08cf55345dedc9a46d9673b6f4f62ec44",
        "bytes": 108832
      },
      {
        "origin": "work/assignment-native-280-2026-10-16/python/practice-ii03-3/A/strict-nonlinear-source-model.fem",
        "path": "reference/strict-nonlinear-source-model.fem",
        "sha256": "6dc08d2b65dba5edf882a64f0a1a7e8360c201ad1bc0c92052f2f59dcb5eee99",
        "bytes": 4307
      }
    ],
    "native_key_fields_per_replay": 1,
    "full_series_entrypoints": [
      "reference/native-circuits.py",
      "reference/native-newton-validation.py"
    ],
    "source_models_mutated": false,
    "original_check_reports": [
      {
        "path": "reference/checks.json",
        "checks": 10,
        "passed": 10
      }
    ],
    "native_replay": {
      "passed": true,
      "fresh_fields": 1,
      "checks": 8,
      "runtime_sha256": "6a79ed0e882d054275347a1f267b57d04a31e900beaa7f6a6251487ed2e1df1b",
      "launch_cwd_differs_from_package": true
    }
  }
}