Лаба 2. Вариант 13
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное
бюджетное образовательное учреждение высшего образования
МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ
Кафедра информатики
Отчет по лабораторной работе №2
По дисциплине «Численные методы»
На тему:
«Интерполяция функций»
Вариант №13
Выполнила студент группы:
Вечный студент
Проверил:
Москва 2024 г
Содержание
1.Задание 2
2. Индивидуальное задание 2
3. Ручной расчет по 1–й формуле Ньютона 3
3.1. Точка интерполяции для формулы Ньютона a = 0.17 3
3.2. Вывод 4
4. Рассчёт на компьютере методом Лагранжа x =b=0.64 5
4.1 Код 5
5. Вывод 7
1.Задание
Выбрать из таблицы 2–1 индивидуальное задание для интерполяции:
точку интерполяции x=a для интерполяции многочленом Ньютона;
точку интерполяции x=b для интерполяции многочленом Лагранжа;
Для интерполяции в точке x=a выбрать из таблицы 2–2 с интерполируемой функцией 4 подходящих узла для построения многочленов 1, 2 и 3-ей степени.
Перенумеровать узлы интерполяции для каждого из методов интерполяции. Занести перенумерованные узлы в таблицы вида 2–3.
Выполнить вручную интерполяцию по заданной формуле в заданной точке x=a или x=b многочленами 1–й, 2–й и 3–й степени:
заполнить таблицу конечных разностей (для интерполяционной формулы Ньютона);
записать интерполяционные формулы для 1, 2 и 3-ей степени многочлена;
выполнить расчеты по интерполяционным формулам для каждой степени многочлена; все промежуточные вычисления производить с сохранением всех значащих цифр, окончательные результаты округлять до 4 знаков после десятичной точки.
занести полученные результаты в таблицу вида 2–4;для многочленов 1–й и 2–й степени вычислить и занести в таблицы 2-4 и 2-5 оценки погрешности интерполяции: модули разности между текущим Pk(x) (Lk(x)) и следующим Pk+1(x) (Lk+1(x)) значением многочлена.
5 Решить задачу интерполяции в точке на компьютере. Вычислять модули разности между текущим Pk(x) (Lk(x)) и следующим Pk+1(x) (Lk+1(x)) значением многочлена в т. Х до тех пор, пока эта разность не станет <=0.001.
Примечание. Для функции, заданной в таблице 2-1, четырех узлов будет достаточно для решения данной задачи. В общем случае, для решения задачи интерполяции в точке, может понадобится добавить большее количество узлов, хотя и это не гарантирует решение.
2. Индивидуальное задание
1.
Точка интерполяции x=a для интерполяции многочленом Ньютона:
0.17(ручной расчет)
Точка интерполяции x=b для интерполяции многочленом Лагранжа:
0.64(на компьютере)
для вычисления значения интерполирующей функции в точке x=a=0.17 методом Ньютона выберем узлы интерполяции х0=0.15, х1=0.20, х2=0.25, х3=0.30 (x0=0.15– ближайший к точкех=а=0.17узел слева);
для вычисления значения интерполирующей функции в точке x=b=0.64 методом Лагранжа выберем номера узлов интерполяции 1, 2, 3, 4, что соответствует значениям узлов х0=0.60, х1=0.65, х2=0.70, х3=0.75(из указанного диапазона узлов).
3. Ручной расчет по 1–й формуле Ньютона
3.1. Точка интерполяции для формулы Ньютона a = 0.17
Выбор и нумерация узлов.
Для ручной интерполяции в точке x = a = 0.17 по 1 формуле Ньютона
выбираем 4 узла из таблицы 2–2 так, чтобы точка a = 0.17 оказалась между
узлами с номерами с 1 по 2 и добавляем узлы вправо:
№ узла-i |
0 |
1 |
2 |
3 |
xi |
0.15 |
0.20 |
0.25 |
0.30 |
y=f(xi) |
-4.0845 |
-4.0240 |
-3.9500 |
-3.8610 |
Выбор точек определяется тем, чтобы при решении интерполяции в точке по 1 формуле Ньютона, с заданной точностью, добавлять узлы вправо относительно точки x=a. Изменим нумерацию узлом интерполяции для использования их в интерполяционных формулах и занесем в таблицы вида 2–3.
Заполним таблицу конечных разностей:
-
x
y
Δy
Δ2y
Δ3y
0.15
-4.0845
-0.0605
0.0135
-0.0015
0.20
-4.0240
-0.074
0.015
0.25
-3.9500
-0.089
0.30
-3.8610
Запишем 1–ю интерполяционную формулу Ньютона:
Для многочленов 1–й, 2–й и 3–й степени и выполним расчеты по ним.
Определим значение q:
Значение многочлена 1-й степени в т. x=0.17:
P1(x) = y0 + y0q = -4.0845 + (-0.0605)*0.4 =-4.1087
Значение многочлена 2-й степени в т. x=0.17:
P2 (x) = y0 +y0q +2y0*((q(q-1))/2) = -4.0845+ (-0.0605)*0.4+0.0135*(-0.12) =
-4.11032
Значение многочлена 3-й степени в т. x=0.17:
= -4.0845+ (-0.0605)*0.4+0.0135*(-0.12)+ -0.0015*0.064=-4.110416
Выражения для многочленов 1, 2 и 3 степени могут быть
получены после соответствующих преобразований формулы:
В нашем случае они будут иметь вид:
P1 =-4.1087
P2 = -4.11032
P3 = -4.110416
Занесем результаты в таблицу и вычислим оценки погрешности
полученных значений для многочленов 1–й и 2–й степени:
-
Степень многочлена k
Pk(x)
Оценки
погрешности
1
-4.1087
0.00162
2
-4.11032
0.000096
3
-4.110416
-
3.2. Вывод
Получены выражения для интерполяционных многочленов 1, 2
и 3-ей степени и их значения в т. а. Оценку погрешности проведём в
соответствии с неравенством:
Можно утверждать, что разность между точным значением функции и
значением функции в т.x=0.17 после 3-х итераций не превышает 0.0001.
4. Рассчёт на компьютере методом Лагранжа x =b=0.64
№ узла-i |
0 |
1 |
2 |
3 |
xi |
0.60 |
0.65 |
0.70 |
0.75 |
y=f(xi) |
-2.9280 |
-2.6920 |
-2.4290 |
-2.1375 |
4.1 Код
import sympy, math
a=0.12
x=[0.6,0.65,0.70,0.75]
y=[-2.9280,-2.6920,-2.4290,-2.1375]
q=round((a-x[0])/(x[1]-x[0]),2)
h=round(x[1]-x[0],2)
print(q)
print(h)
def delt_Y(y):
dy = []
dy.append(y)
for i in range(len(dy[0])-1):
dy.append([])
for g in range(len(dy[i])-1):
dy[i+1].append(round(dy[i][g+1]-dy[i][g],4))
dy.pop(0)
return dy
def znsch_f(dy,n,y,q):
otv=[]
for i in range(n):
promezh=(dy[i][0])/math.factorial(i+1)
for g in range(i+1):
promezh*=(q-g)
otv.append(promezh)
otv[0]+=y[0]
for i in range(1,len(otv)):
otv[i]=round(otv[i]+otv[i-1],4)
for i in range(len(otv)-1):
print(round(otv[i+1]-otv[i],4))
return otv
def funkc(dy,n,y,h,x):
otv=[]
for i in range(n):
promezh = (dy[i][0]) / ((math.factorial(i + 1))*(h**(i+1)))
promezh = str(round(promezh,7))
for g in range(i + 1):
promezh+=f'*(a-{x[g]})'
otv.append(promezh)
otv[0] += str(y[0])
otv[0]=sympy.simplify(otv[0])
for i in range(1, len(otv)):
otv[i] = f'{otv[i]} + {otv[i - 1]}'
otv[i]=sympy.simplify(otv[i])
return otv
print(delt_Y(y))
print(znsch_f(delt_Y(y),3,y,q))
print(funkc(delt_Y(y),3,y,h,x))
5. Вывод
Полученные выражения многочленов 1, 2 и 3-ей степени, а также их
значения в заданной точке, совпадают до 4 знака после десятичной точки с ручным расчетом.