RustedSciThe 0.4.20

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
# Руководство пользователя 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).

## Текстовые task documents

Используйте task document, если эксперимент BE должен быть воспроизводимым или
входить в batch-запуск. Текстовый маршрут направляется в native Backward Euler
adapter:

```text
task
solver: IVP
method: BackwardEuler

equations
arg: t
parameters: k
parameter_values: 2.0
y: -k*y

initial_conditions
t0: 0.0
t_end: 1.0
y0: 1.0

solver_options
step_size: 1e-2
tolerance: 1e-7
max_iterations: 100

postprocessing
output_policy: none
```

`step_size` задаёт фиксированный шаг BE; последний шаг может быть обрезан до
границы интервала. `tolerance` и `max_iterations` настраивают Newton solve.
`output_policy` принимает `none`, `terminal`, `plotters` или `gnuplot`; `plot` —
только compatibility alias. Комментарии, начинающиеся с `#`, игнорируются.

Текстовый adapter намеренно уже native API. Он использует плотный BE route и
не обещает sparse matrices, adaptive error control, reuse Jacobian/LU или
локализацию событий. Для выбора `ExprLegacy`/`AtomViewNative`, аналитического
или finite-difference Jacobian, AOT lifecycle, telemetry и точной continuation/
restart policy используйте `BeSolverOptions` и типизированный BE API. `None`
для native Jacobian означает finite differences, а не выбор другого
символьного frontend.

Continuation задаётся явно:

```text
continuation
parameter: k
values: 1.0, 2.0, 4.0
mode: prepared
restart_each: false
```

`fresh` подготавливает каждый сегмент заново, `warm` переиспользует callbacks,
а `prepared` запрашивает максимально сильный reuse модели. При
`restart_each: true` каждый сегмент начинается с объявленного initial state;
для сегмента можно задать новые `y0`, `t0` или `t_end`. В отчётах отделяйте
fresh/warm/prepared timings от времени численного решения. Общая грамматика и
batch-runner описаны в
[`TASK_DOCS_GUIDE_EN.md`](../../command_interpreter/TASK_DOCS_GUIDE_EN.md).