Skip to content

Latest commit

 

History

History
189 lines (118 loc) · 12.5 KB

NM_02.md

File metadata and controls

189 lines (118 loc) · 12.5 KB

Численные методы

Лабораторная работа № 2

"Численные исследования сходимости многочлена Ньютона к приближаемой функции при увеличении степени многочлена"

Задание:

  1. Написать программу, исходные данные: дан отрезок [a, b] - вводим с клавиатеры, и функция f = (1-x) / (1 + x^2), по которой будем считать значения в узлах. Используем многочлен n степени (n+1 узла), и они равноотстощие на отрезке [a, b]. Запрограммировать вычисление многочлена Ньютона тремя известными способами в произволной точке x:
  • cпособом решения системы линейных алгебраических уравнений;
  • способом составления таблицы разделенных разностей;
  • способом, основанным на использовании формулы через сумму обратных произведений.
  1. Построить графики и сравнить с графиком функции и между собой, сделать выводы, написать отчет.

UPD: Решение на Matlab UPD: Старое решение на Matlab UPD: Решение на Python UPD: Решение на C#

Отчет л.р. №2 Word и PDF


Трекинг и описание

2017-09-28 !!! УСТАРЕЛО!!! См. UPD 2017-10-06

UPD: добавил решение лабораторной №2 (Matlab) с выводом графиков.

Задание: (интерполяция полиномом Ньютона)

В папке две основные функции: interpNewton.m (вычисление интерполяционного полинома Ньютона в точке) и interpolateNewtonAndPlot.m (вычисление полинома Ньютона для отрезка и построение графика совместно с графиком функции). Сама исходная функция, по которой рассчитываются узлы, в файле f.m. Чтобы вызвать расчет интерполяции и вывод графика интерполяционного полинома, необходимо в командной строке матлаба ввести и выполнить:

interpolateNewtonAndPlot(-1, 2, 3)

где -1 и 2 - границы отрезка, 3 - задаваемая степень полинома Ньютона.

Функция interpolateNewtonAndPlot использует поточечный расчет значений полинома Ньютона, обращаясяь к вспомогательной функции interpNewton.

В результате работы модуля сформируется новое окно с графиком такого вида:

Пример графика

LINK: Решение на Matlab


2017-09-28

UPD: добавил решение лабораторной №2 на Python (Jupyter Notebook) с выводом графиков.

UPD: Решение на Python


2017-10-06 ОБНОВЛЕННОЕ

UPD: обновил решение лабораторной №2 (Matlab) с выводом графиков.

Задание: (интерполяция полиномом Ньютона)

В папке несколько функциональных блоков. Расчет коэффициентов полинома Ньютона реализован в блоках:

  • 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


2017-10-07

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#


2017-10-08

UPD: обновил решение лабораторной №2 (Matlab) с выводом графиков.

Добавил модуль расчета средней абсолютной ошибки интерполяции 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


2017-10-08

UPD: добавил отчет л.р. №2 Word PDF