лаба3
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра «Информатика»
Лабораторная работа №3
«Аппроксимация функций. Метод наименьших квадратов»
Выполнил: ---------------------------------------------
Проверил:
Москва, 2023 г.
Индивидуальное задание к работе
-
N варианта
Функция из табл. 3-2
Номера узлов из табл. 3-2
8
10,12,14,16,18,20
-
-номер узла
10
-0.6
-1,06
12
-0.4
-1.406
14
-0.2
-0.386
16
0.0
1
18
0.2
1.386
20
0.4
0.406
Линейная аппроксимация
Вычислим и запишем в таблицу элементы матрицы Грамма и столбец свободных членов.
|
|
|
|
|
0 |
-0.6 |
-1,06 |
0,636 |
0,36 |
1 |
-0.4 |
-1.406 |
0,5624 |
0,16 |
2 |
-0.2 |
-0.386 |
0,0772 |
0,04 |
3 |
0.0 |
1 |
0 |
0 |
4 |
0.2 |
1.386 |
0,2772 |
0,04 |
5 |
0.4 |
0.406 |
0,1624 |
0,16 |
|
-0.6 |
-0,06 |
1,7152 |
0,76 |
Составим системы нормальных уравнений (Матрицу Грамма). Для линейной функции система нормальных уравнений примет вид (линейная аппроксимация):
решить систему уравнений: получим коэффициенты А0 = 0,1999 и А1 = 2.099, тогда полином первой степени будет таким:
P1(x) = 0,1999 +2.099*x
-
-0.6
-0,4
-0.2
0.0
0.2
0.4
-1,06
-1.406
-0.386
1
1.386
0.406
-1.0595
-0.6397
-0.2199
0.1999
0.6197
1.0395
-0.0005
-0.7663
0.199
0.8001
0.7663
-0.6335
0.558248
1.25122
2.2201
3.46488
4.98557
6.78217
1.92405
3.40248
0.732736
0.334755
1.195
0.103517
В таблице представлена исходная функция и результаты аппроксимации в узловых точках.
Среднеквадратичное отклонение
Проведем оценку погрешностей и посчитаем среднеквадратичное отклонение.
Решение задачи аппроксимации при помощи матпакета
import numpy as np
import matplotlib.pyplot as plt
# Таблично заданные данные
x = np.array([0.6, 0.8, 1.0, 1.2, 1.4, 1.6])
y = np.array([-0.64, -0.726, 0.634, 2.44, 3.326, 2.926])
# Аппроксимация многочленами первой, второй, третьей, четвертой и пятой степени
p1 = np.polyfit(x, y, 1)
p2 = np.polyfit(x, y, 2)
p3 = np.polyfit(x, y, 3)
p4 = np.polyfit(x, y, 4)
p5 = np.polyfit(x, y, 5)
# Графическое представление результатов аппроксимации
xp = np.linspace(0.5, 1.7, 100)
plt.plot(x, y, '.', xp, np.polyval(p1, xp), '-', xp, np.polyval(p2, xp), '--', xp, np.polyval(p3, xp), '-.', xp, np.polyval(p4, xp), ':', xp, np.polyval(p5, xp), '-.')
plt.legend(['Табличные данные', '1-й степени', '2-й степени', '3-й степени', '4-й степени', '5-й степени'])
plt.title('Аппроксимация многочленами различных степеней')
plt.show()
[-1.54732143 7.94582143 -5.36095714]
(среднеквадратическая погрешность): 0.2956142523809522
Аппроксимация многочленом 3-й степени:
[-20.55324074 66.27837302 -62.51068783 17.42847619]
(среднеквадратическая погрешность): 0.003626693121693024
Аппроксимация многочленом 4-й степени:
[ 8.25520833 -56.87615741 123.97048 611 -101.53187831 26.87054762]
(среднеквадратическая погрешность): 0.0012340978835976063
[Finished in 719ms]
Среднеквадратическая погрешность аппроксимации функции полиномом n-ой степени на заданном интервале зависит от свойств функции и распределения узлов интерполяции
В частности, если функция является достаточно гладкой и узлы интерполяции равномерно распределены на заданном интервале, то среднеквадратическая погрешность может быть близка к нулю при увеличении степени полинома. Однако, если функция имеет разрывы или особенности, то даже высокостепенный полином может не дать достаточно точного приближения.
Таким образом, среднеквадратическая погрешность аппроксимации полиномом 5-ой степени зависит от свойств функции и распределения узлов интерполяции, и не всегда бывает близка к нулю. В общем случае необходимо оценивать погрешность для конкретной функции и распределения узлов интерполяции.