Документ описывает пошаговую процедуру добавления нового алгоритма ускорения сходимости рядов в фреймворк.
Расположение: backend/core/include/transformations/
Имя файла: my_algorithm.hpp (snake_case)
#ifndef MY_ALGORITHM_HPP
#define MY_ALGORITHM_HPP
#pragma once
#include "series_acceleration.hpp"
namespace shanks { namespace algos {
template <AcceptedLike T, UnsignedIntLike K>
class my_algorithm final : public series_acceleration<T, K> {
public:
explicit my_algorithm(...args...);
T operator()(
const K n,
const K order,
const series_result<T>& data
) const override;
};
}} // namespace shanks
#endif
Базовый класс: series_acceleration<T, K>
Интерфейс:
template<AcceptedLike T, UnsignedIntLike K>
class series_acceleration
{
public:
explicit series_acceleration(std::string name = "unknown");
// Главный метод: вычислить ускоренную сумму
virtual T operator()(
const K n, // Количество членов
const K order, // Порядок преобразования (m)
const series_result<T>& data // Данные ряда
) const = 0;
virtual std::string get_name();
protected:
std::string acceleration_name;
};
| Параметр | Тип | Описание |
|---|---|---|
n |
K |
Количество членов ряда для использования |
order |
K |
Порядок преобразования (параметр m) |
data |
series_result<T> |
Структура с данными ряда |
struct series_result<T> {
std::vector<T> Sn; // Частичные суммы: Sn[i] = S_{i+1}
std::vector<T> an; // Члены ряда: an[i] = a_{i+1}
};
Важно: Индексация в векторах начинается с 0:
Sn[0] = S₁ (сумма первого члена)Sn[n-1] = S_n (сумма n членов)Ускоренное значение суммы ряда (тип T).
// Минимально требуемый размер зависит от алгоритма
const K required_size = /* вычислить */;
if (data.Sn.size() < required_size) {
throw std::out_of_range("Insufficient data size");
}
Файл: backend/core/include/transformation_registry.def
TRANSFORMATION_ENTRY(my_algorithm_id, "MyAlgorithm", {
return std::make_unique<my_algorithm<T, K>>(...args...);
})
Параметры макроса:
_id суффиксом)Файл: backend/core/include/methods.hpp
Добавьте:
#include "transformations/my_algorithm.hpp"
cd backend/runner
./install_pyshanks.sh
Или вручную:
cd backend/bindings
mkdir -p build && cd build
cmake ..
make -j$(nproc)
import pyshanks as ps
# Класс доступен с суффиксом точности
cls = getattr(ps, "MyAlgorithmF64")
instance = cls(...args...)
# Создаём данные ряда
series_data = ps.series_resultF64()
series_data.Sn = [1.0, 0.5, 0.75, ...]
series_data.an = [1.0, -0.5, 0.25, ...]
# Применяем алгоритм
result = instance(10, 2, series_data)