Kernel: Python 3 (old Anaconda 3)
In [1]:
5.1.14 Функция задана таблицей значений в точках . Используя метод наименьших квадратов (МНК), найти многочлен наилучшего среднеквадратичного приближения оптимальной степени
In [2]:
In [15]:
21.968437500000075
In [26]:
array([ 0.25423477, 0.84044289, 0.1959152 ])
In [24]:
24.403275
In [27]:
2.4496369447741504
In [16]:
In [29]:
σ = [2.6079532748927208, 2.4006760692116944, 2.4496369447741504, 2.4883048183313612, 1.2215766095523011, 0.29825441266303832, 0.30025682280195148, 0.32276731477495541, 0.35357323557163983, 0.38377246097987855, 0.40664855493958713]
In [30]:
In [32]:
m* = 5
In [56]:
In [46]:
Определитель матрицы: 1.40080884594e+12
Матрица не сингулярная.
In [47]:
array([[ 1.30000000e+01, -3.90000000e+00, 3.80250000e+01,
-3.35205000e+01, 2.06585438e+02, -2.89850096e+02],
[ -3.90000000e+00, 3.80250000e+01, -3.35205000e+01,
2.06585438e+02, -2.89850096e+02, 1.37191273e+03],
[ 3.80250000e+01, -3.35205000e+01, 2.06585438e+02,
-2.89850096e+02, 1.37191273e+03, -2.52084359e+03],
[ -3.35205000e+01, 2.06585438e+02, -2.89850096e+02,
1.37191273e+03, -2.52084359e+03, 1.01233159e+04],
[ 2.06585438e+02, -2.89850096e+02, 1.37191273e+03,
-2.52084359e+03, 1.01233159e+04, -2.20425938e+04],
[ -2.89850096e+02, 1.37191273e+03, -2.52084359e+03,
1.01233159e+04, -2.20425938e+04, 7.96926407e+04]])
In [48]:
a = [ 2.67145287 0.43911563 -3.30940372 -0.56670697 0.59464492 0.14331733]
In [49]:
Погрешность при использовании QR-разложения матрицы по сравнению с обычным методом: 1.31006316906e-13
5.3.7 Зависимость между величинами и описывается функцией , где и – неизвестные параметры. Найти эти параметры, сведя исходную задачу к линейной задаче метода наименьших квадратов.
In [50]:
In [55]:
-8.0
-1.728
-0.064
0.064
1.728
8.0
21.952
46.656
85.184
140.608
216.0
In [12]:
a = -2.30999861625 , b = 0.519999970178
5.7.7 Дана кусочно-гладкая функция . Сравнить качество приближения функции кусочно-линейной и глобальной интерполяциями
In [2]:
x = [-5. -4.8 -4.6 -4.4 -4.2 -4. -3.8 -3.6 -3.4 -3.2 -3. -2.8 -2.6 -2.4 -2.2
-2. -1.8 -1.6 -1.4 -1.2 -1. -0.8 -0.6 -0.4 -0.2 0. 0.2 0.4 0.6 0.8
1. 1.2 1.4 1.6 1.8 2. 2.2 2.4 2.6 2.8 3. 3.2 3.4 3.6 3.8
4. 4.2 4.4 4.6 4.8 5. ]
y = [-5. -3.84 -2.76 -1.76 -0.84 -0. 0.76 1.44 2.04 2.56 3. 3.36
3.64 3.84 3.96 4. 3.96 3.84 3.64 3.36 3. 2.56 2.04 1.44
0.76 -0. -0.76 -1.44 -2.04 -2.56 -3. -3.36 -3.64 -3.84 -3.96 -4.
-3.96 -3.84 -3.64 -3.36 -3. -2.56 -2.04 -1.44 -0.76 0. 0.84 1.76
2.76 3.84 5. ]
In [3]:
In [4]:
In [5]:
In [16]:
In [32]:
/projects/anaconda3/lib/python3.5/site-packages/matplotlib/figure.py:402: UserWarning: matplotlib is currently using a non-GUI backend, so cannot show the figure
"matplotlib is currently using a non-GUI backend, "
Как видно по графикам, линейная интерполяция даёт лучшее приближение для заданной функции. Глобальная интерполяция в некоторых точках даёт большую погрешность, но в некоторых точках приближение имеет погрешность меньше, чем при линейной интерполяции. Такая погрешность в глобальной интерполяции объясняется неправильным выбором узлов интерполяции для данной функции.
Вывод: глобальную интерполяцию выгодно использовать при определенных видах функций, к тому же, нужно правильно выбирать узлы интерполяции. При хорошем подборе параметров глобальная интерполяция даёт лучшее приближение функции на точках, не лежащих в исходном отрезке интерполяции, чем линейная.
5.9.7 Дана функция . Приблизить на отрезке методом глобальной интерполяции и указанным в индивидуальном варианте сплайном (с отсутствием узла). На одном чертеже построить графики приближающей функции и функции . Сравнить качество приближения при разном количестве узлов интерполяции.
In [17]:
In [18]:
In [22]:
In [23]:
In [24]:
При 5 узлах интерполяции построенная функция плохо приближает настоящую, в то время как 20-ти узлов хватает для хорошего приближения.
In [26]:
In [30]: