# Руководство пользователя Backward Euler
Backward Euler (BE) — неявный метод с фиксированным шагом для малых и средних
систем, где важна устойчивость, а стоимость плотного шага Ньютона приемлема.
Реализация использует плотный якобиан `nalgebra` и LU-факторизацию. Это не
разреженный решатель для огромных систем; для таких задач нужен метод,
изначально рассчитанный на sparse-линейную алгебру.
## Выбор вычислительного маршрута
Для численной модели настройте `BE::try_set_native_initial` либо
`BE::try_set_initial` вместе с `set_native_ode_callbacks`. По возможности
передавайте аналитический плотный якобиан. Если передать `None`, якобиан будет
строиться конечными разностями, что требует дополнительных вычислений RHS.
Пример с аналитическим якобианом:
```powershell
cargo run --no-default-features --example rus_be_native_callbacks_guide
```
## Шаг и точность
`h: Some(step)` задаёт фиксированный шаг; только последний шаг обрезается по
конечной границе интервала. Классический BE имеет первый порядок точности:
уменьшайте `h` и проверяйте сходимость относительно независимого эталона для
конкретной задачи.
`h: None` включает историческую локальную эвристику, вычисляющую шаг по текущему
масштабу RHS/якобиана и оставшемуся интервалу. Это не оценка ошибки, не
адаптивный контроллер и не гарантия точности. Выбранный шаг фиксируется на время
решения Ньютона. Не следует трактовать `None` как автоматический режим заданной
точности.
## Symbolic Lambdify и повторное использование параметров
Символьные уравнения задаются через `Expr`. Выбор
`BeSymbolicAssemblyBackend::ExprLegacy` или `AtomViewNative` задаётся в
`BeSolverOptions`; `ExprLegacy` пока остаётся вариантом по умолчанию для
совместимости. Быстрейший frontend зависит от размера и структуры выражений.
Объявите параметры через `try_set_equation_parameters`, а значения передавайте
через `set_parameter_values`. При изменении только значений подготовленные
callbacks переиспользуются. `try_solve` начинает заново с исходных `(t0, y0)`.
Для продолжения с последнего принятого `(t, y)` после смены параметров вызовите
`try_continue_to(new_t_bound)`. Пример использует AtomViewNative и Lambdify:
```powershell
cargo run --no-default-features --example rus_be_symbolic_continuation_guide
```
## Сгенерированный AOT
Символьный AOT-маршрут настраивается до первого решения. Пример использует
AtomViewNative и C/tcc с release-политикой сборки. Первый запуск может
материализовать, скомпилировать и связать артефакт; последующие запуски могут
использовать cache. AOT окупается только когда повторные или достаточно дорогие
вычисления компенсируют setup. Если `tcc` отсутствует в `PATH`, пример завершится
успешно с сообщением о пропуске.
```powershell
cargo run --no-default-features --example rus_be_aot_guide
```
## Ошибки, статус и результат
Предпочитайте `BE::try_new_with_options`, `try_set_initial`, `try_solve` и
`try_continue_to`: они возвращают типизированный `BeError`, различающий
некорректную конфигурацию, ошибки backend/generated backend, Ньютона,
невозможность продвижения времени и превышение лимита шагов. `BeStatus`
различает `Running`, `Finished`, `StoppedByCondition` и `Failed`. Методы
совместимости, например `solve`, могут паниковать при ошибке.
`numerical::BE::prelude` содержит часто используемые типы BE, NRE, символьного
API и `nalgebra` для коротких импортов.
`get_result()` возвращает `(times, states)`. Каждая строка `states` соответствует
одному временному отсчёту, каждый столбец — переменной состояния. Начальная
точка включена; при ошибке сохраняется только уже принятый префикс траектории.
`trajectory()` возвращает те же данные по ссылке без копирования всей истории;
предпочитайте его, если нужно только прочитать или сериализовать результат.
Условия остановки проверяются на принятых узлах в заданном допуске. Метод не
интерполирует пересечение и не локализует событие.
## Телеметрия
`BeTelemetryMode::Off` отключает инструментирование горячего пути;
`Counters` считает операции без чтения часов; `Timings` добавляет диагностические
тайминги. Для сравнения измерений используйте одинаковый режим: таймеры могут
заметно влиять на очень короткие решения. Сводки доступны через
`statistics_report()` и типизированные структуры статистики.
## Проверка и ограничения
Проверяйте размерности и конечность входов, сходимость по шагу и независимый
эталон. Если возможно, сравнивайте аналитический якобиан с конечными разностями.
Сейчас используются плотные матрицы Ньютона; sparse-якобианы, адаптивная оценка
ошибки, повторное использование якобиана/LU и локализация событий не входят в
текущую реализацию. Это отдельные возможные расширения, а не скрытая функциональность
классического Backward Euler.
См. [`BE_STORY_TESTS.md`](BE_STORY_TESTS.md), [`BE_BENCHMARKS.md`](BE_BENCHMARKS.md)
и [`BE_PERFORMANCE_BASELINE.md`](BE_PERFORMANCE_BASELINE.md).