Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР5. 3.1. Интерполирование и экстраполирование данных. Интерполяционный многочлен Ньютона

.docx
Скачиваний:
6
Добавлен:
19.06.2023
Размер:
25.46 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В. И. Ульянова (Ленина)

Кафедра ИС

отчет

по лабораторной работе №5

по дисциплине «Конструирование программ»

Тема: Интерполирование и экстраполирование данных. Интерполяционный многочлен Ньютона.

Студент гр. 93—

Преподаватель

Копыльцов А. В.

Санкт-Петербург

2021

Цель работы.

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

Основные теоретические сведения.

Интерполяционный многочлен Ньютона является другой формой записи единого интерполяционного многочлена. Применение многочлена Ньютона имеет практические преимущества по сравнению с формулой Лагранжа и в случае не равноотстоящих, и особенно в случае равноотстоящих узлов.

Интерполяционные многочлены Ньютона нужных степеней строятся по формулам (2.7.1) или (2.10.1) и (2.10.2).

Если интерполируемая функция задана на таблице с постоянным шагом , то можно использовать связь между конечными и разделёнными разностями: В этом случае многочлен Ньютона можно записать несколько в ином виде:

Пусть

Преобразуем разделённые разности в конечные: тогда

и так далее.

Тогда многочлен Ньютона можно переписать в следующем виде:

Эту формулу называют интерполяционным многочленом Ньютона с конечными разностями для интерполяции вперёд. В ней используются только конечные разности, расположенные в верхней косой строке таблицы конечных разностей. Если использовать разности нижней косой строки, то аналогично получим многочлен Ньютона с конечными разностями для интерполяции назад:

Экспериментальные результаты.

Задание № 1.

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

0.01

9.9182

0.11

9.5194

0.16

9.1365

0.23

8.8769

0.28

8.4164

0.39

8.0779

0.46

7.7530

0.50

7.4412

Обработка результатов эксперимента.

Задание 1

9.055614424929281

Выводы.

Были получены навыки находить приближенное значение интерполируемой функции при значении аргумента.

Приложение 1. Код программы

package j.softwareconstruction.lab3; import j.math.types.Fraction; import j.math.types.Polynomial; public class Main { public static void main(String[] args) { task1(); } private static String fraction(double value, int precision) { return (int) (value * Math.pow(10, precision)) + "/" + (int) Math.pow(10, precision); } private static Polynomial xPolynomial(double x) { if (x < 0) return Polynomial.parse("x + " + fraction(-x, 2)); return Polynomial.parse("x - " + fraction(x, 2)); } private static void task1() { System.out.println("Задание 1"); double xT = 0.195; double[] x = {0.01, 0.11, 0.16, 0.23, 0.28, 0.39, 0.46, 0.50}; double[] y = {9.9182, 9.5194, 9.1365, 8.8769, 8.4164, 8.0779, 7.7530, 7.4412}; double[][] f = new double[y.length][]; f[0] = y; for (int j = 1; j < y.length; j++) { f[j] = new double[y.length - j]; for (int i = 0; i < f[j].length; i++) { f[j][i] = (f[j - 1][i + 1] - f[j - 1][i]) / (x[i + j] - x[i]); } } Polynomial[] w = new Polynomial[x.length + 1]; w[0] = Polynomial.ONE_VALUE; for (int i = 1; i < w.length; i++) { w[i] = w[i - 1].multiply(xPolynomial(x[i - 1])); } Polynomial P = Polynomial.ZERO_VALUE; for (int i = 0; i < f.length; i++) { P = P.add(Polynomial.parse(fraction(f[i][0], 3)).multiply(w[i])); } System.out.println("\t" + P.calculateWith(new Fraction(fraction(xT, 3))).toDouble()); } }