- •Алгоритм программы
- •1. Структура данных и функциональные компоненты
- •2. Загрузка и предварительная обработка данных
- •3. Сортировка данных
- •4. Выбор степени аппроксимирующего полинома
- •5. Аппроксимация методом наименьших квадратов
- •6. Генерация точек для построения графика
- •Алгоритм Гаусса
- •Алгоритм сортировки слиянием
- •Перечень функций
- •Программа
- •Тестирование
- •Заключение
Алгоритм Гаусса
Метод состоит из двух основных этапов: прямого хода и обратного хода. Прямой ход преобразует матрицу системы к верхнетреугольному виду путём последовательного исключения переменных.
На каждом шаге выбирается ведущий элемент — максимальный по модулю элемент в текущем столбце. Выбор максимального элемента повышает устойчивость алгоритма и уменьшает погрешность вычислений.
Если ведущий элемент оказывается слишком мал (менее 10⁻¹²), программа сообщает о вырожденности матрицы.
После приведения матрицы к треугольному виду выполняется обратный ход — последовательное вычисление значений неизвестных, начиная с последнего уравнения.
Каждое найденное значение подставляется в предыдущие уравнения, что позволяет определить все коэффициенты полинома.
Алгоритм сортировки слиянием
Метод состоит из двух основных этапов: разделения и слияния.
На этапе разделения исходный массив рекурсивно делится на две примерно равные части до тех пор, пока не будут получены подмассивы длиной 0 или 1 элемент, которые считаются отсортированными по определению.
После достижения минимальных фрагментов начинается этап слияния — отсортированные подмассивы объединяются в один упорядоченный массив с сохранением порядка элементов.
Процедура слияния сравнивает первые элементы двух упорядоченных массивов, выбирает меньший по значению x и помещает его в результирующий массив.
Этот процесс повторяется до полного исчерпания обоих массивов.
Если один из массивов заканчивается раньше, оставшиеся элементы второго массива копируются в результат без дополнительных сравнений.
Перечень функций
Ввод/вывод данных:
requestFilePath — запрос пути к файлу с проверкой существования
readPoints — чтение точек (x y) из файла с удалением дубликатов
writeResultsToFile — сохранение результатов в файл с коэффициентами
printResultsTable — табличный вывод исходных и аппроксимированных значений
Обработка дубликатов:
handleDuplicateXs — интерактивная обработка точек с одинаковыми X (усреднение/мин/макс)
mergeSort — стабильная сортировка слиянием для группировки дубликатов
nubBy — удаление полных дубликатов (x,y с точностью 1e-9)
Математика полиномов Эрмита:
hermite — рекуррентное вычисление полинома Эрмита степени n
hermiteVector — вектор базисных полиномов [H0(x), H1(x), ..., Hm(x)]
evalHermitePoly — вычисление значения полинома по коэффициентам
Метод наименьших квадратов:
buildSystem — построение матрицы Грама и правой части с весами
gaussElimination — метод Гаусса с выбором главного элемента
solveLeastSquares — полное решение задачи МНК в базисе Эрмита
Визуализация:
linspace — равномерная сетка точек для графика
asciiPlot — ASCII-график (70x20) с осями и легендой (* точки, + кривая)
calculateRMSE — среднеквадратичная ошибка аппроксимации
Схема
Рисунок 1. Общая схема работы программы
Рисунок 2. Метод Гаусса
Рисунок 3. Удаление дубликатов
Рисунок 4. Считывание точек из файла
Рисунок
5. Поиск дубликатов
