"Численные исследования сходимости многочлена Ньютона к приближаемой функции при увеличении степени многочлена"
- Написать программу, исходные данные: дан отрезок [a, b] - вводим с клавиатеры, и функция f = (1-x) / (1 + x^2), по которой будем считать значения в узлах. Используем многочлен n степени (n+1 узла), и они равноотстощие на отрезке [a, b]. Запрограммировать вычисление многочлена Ньютона тремя известными способами в произволной точке x:
- cпособом решения системы линейных алгебраических уравнений;
- способом составления таблицы разделенных разностей;
- способом, основанным на использовании формулы через сумму обратных произведений.
- Построить графики и сравнить с графиком функции и между собой, сделать выводы, написать отчет.
UPD: Решение на Matlab UPD: Старое решение на Matlab UPD: Решение на Python UPD: Решение на C#
Теория к лаб.раб. №2 Гудович Н.Н. Избранные вопросы курса ЧМ. Выпуск 2. Многочлен Ньютона
Задание: (интерполяция полиномом Ньютона)
В папке две основные функции: interpNewton.m (вычисление интерполяционного полинома Ньютона в точке) и interpolateNewtonAndPlot.m (вычисление полинома Ньютона для отрезка и построение графика совместно с графиком функции). Сама исходная функция, по которой рассчитываются узлы, в файле f.m. Чтобы вызвать расчет интерполяции и вывод графика интерполяционного полинома, необходимо в командной строке матлаба ввести и выполнить:
interpolateNewtonAndPlot(-1, 2, 3)
где -1 и 2 - границы отрезка, 3 - задаваемая степень полинома Ньютона.
Функция interpolateNewtonAndPlot использует поточечный расчет значений полинома Ньютона, обращаясяь к вспомогательной функции interpNewton.
В результате работы модуля сформируется новое окно с графиком такого вида:
LINK: Решение на Matlab
UPD: Решение на Python
Задание: (интерполяция полиномом Ньютона)
В папке несколько функциональных блоков. Расчет коэффициентов полинома Ньютона реализован в блоках:
- coefPolyNewton1.m - вычисление коэффициентов cпособом решения системы линейных алгебраических уравнений;
- coefPolyNewton2.m - вычисление коэффициентов cпособом составления таблицы разделенных разностей;
- coefPolyNewton3.m - вычисление коэффициентов способом, основанным на использовании формулы через сумму обратных произведений.
Чтобы вызвать расчет коэффициентов интерполяционного полинома по одному из способов, необходимо в командной строке матлаба ввести и выполнить:
coefPolyNewton1(X, Y)
coefPolyNewton2(X, Y)
coefPolyNewton3(X, Y)
где X и Y - соответсвенно матрицы координат х и у для узловых точек.
Кроме того, есть и базовая функция в файле coefPolyNewtonBase.m, в которую передается одним из параметров номер способа расчета, а также границы отрезка и степень полинома
[D, X] = coefPolyNewtonBase(a, b, n, number)
Это основная функция расчета коэффициентов полинома Ньютона тремя разными способами, номер метода передается последним параметром (1, 2 или 3), а первые три параметра (a, b, n) - границы отрезка и степень полинома.
Функция возвращает матрицу коэффициентов D и матрицу узловых точек X, чтобы потом можно было рассчитать значение полинома Ньютона в любой точке по формуле через разности (x-x0) и т.д.
Для использования полученных на предыдущих шагах коэффициентов есть модуль pointNewton.m, в него нужно передавать матрицу коэффициентов D, матрицу узловых точек X и значение xx, для которого надо посчитать P(xx):
pointNewton(D, X, xx)
Функция вернет значение полинома Ньютона в точке xx.
Есть еще пара модулей для вывода графиков - это модуль plotNewton.m, который выводит одиночный график конкретного полинома, совмещенный с графиком функции и узловыми точками, а также модуль plotNewtonFull.m, выводящий совмещенные графики полиномов, коэффициенты которых посчитаны всеми тремя способами (для сравнения). Вызываются эти функции следующим образом:
plotNewton(a, b, n, number)
plotNewtonFull(a, b, n)
где a и b - границы отрезка, n - степень полинома, number - номер способа расчета коэффициентов полинома Ньютона (см. выше coefPolyNewtonBase)
В результате работы модуля plotNewtonFull.m сформируется новое окно с совмещенными графиками такого вида (пример):
UPD: Решение на Matlab
UPD: добавил решение лабораторной №2 (C#) с выводом графиков.
Вывод графиков реализовал на основе WinForms и свободной библиотеки ZedGraph. Окошко имеет вид:
На кнопки повешены обработчики с тремя разными методами расчета коэффициентов полинома Ньютона:
- cпособом решения системы линейных алгебраических уравнений:
List<double> coefPolyNewton1(List<double> X, List<double> Y)
- способом составления таблицы разделенных разностей:
List<double> coefPolyNewton2(List<double> X, List<double> Y)
- способом, основанным на использовании формулы через сумму обратных произведений:
List<double> coefPolyNewton2(List<double> X, List<double> Y)
Все они дают разную погрешность расчета. Отдельно есть методы расчета ошибки, построения всех графиков и пр. Подробнее по ссылке:
UPD: Решение на C#
Добавил модуль расчета средней абсолютной ошибки интерполяции deltaNewton.m, которая считает погрешность для 10000 равноотстоящих точек на исследуемом отрезке [a, b], а также модуль построения зависимостей значения ошибки от степени полинома для всех трех вычислительных алгоритмов plotDeltaNewton.m (сводные графики).
Чтобы вызвать расчет средней ошибки, необходимо в командной строке матлаба ввести и выполнить:
deltaNewton(Y1, Y2)
где Y1 и Y2 - соответсвенно матрицы значений для функции f и для полинома P (размеры должны совпадать).
А чтобы вывести построение сравнительных графиков, отображающих поведение ошибки при изменении степени полинома, необходимо в командной строке матлаба ввести и выполнить:
plotDeltaNewton(a, b, size1, size2)
где a и b - соответсвенно начало и конец отрезка [a, b], size1 b size2 - начальная и конечная степени полинома, например, 2 и 100.
В результате работы модуля plotDeltaNewton.m сформируется новое окно с совмещенными графиками ошибок (пример):
UPD: Решение на Matlab