RustedSciThe 0.4.19

Rust framework for symbolic and numerical computing:BVP ( Newton-Raphson frozen/damped/with collocations ), IVP( BDF, Radau, Backward Euler, LSODE, LSODA, RK45, DoPri), nonlinear equations ( Levenberg, Gavin) and more
Documentation
# Руководство пользователя 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).