You are on page 1of 3

Звіт.

Алгоритми та методи обчислень


Лабораторна робота №1
Бурби Миколи КІ-2

1. Варіант 3
2. Математичний апарат:
- Поліном Лагранжа:
n
( x−x 0 ) ( x−x 1 ) … ( x−x i−1 )( x−xi +1 ) …( x−x n )
Ln ( x ) =∑ y i
i=0 ( x i−x 0 ) ( x i−x 1 ) … ( xi −xi−1 ) ( x i−x i+1 ) …(x i−x n )
y i +1− y i
- Права різницева похідна: h
ẏ i ≈
i=[0 , n]
y−y
- Ліва різницева похідна: ẏ i ≈ i h i −1 i=[0 , n]
y −y
- Центральна різницева похідна: ẏ i ≈ i +12 h i−1 i=[0 , n]
y i +1+ yi −2 y i
- Друга похідна: ÿ i ≈ 2
i=[ 0 ,n ]
h
3. Код програми - Python:
import numpy as np

Xc = [-2.1, -1.9, -1.6, -0.99, -0.23, 0.4, 0.6, 0.9, 1.4]


Yc = [0.05360, 0.09766, 0.19790, 0.36781, 0.05017, 0.13634, 0.25006, 0.36034, 0.27608]

xnew = list()
y_interp = list() #функцфя
y_localinterp = list() #локальна інтерполяція
y_globalinterp = list() #глобальнаа інтерполяція
differentiated_first = list() #перша похідна
differentiated_second = list() #друга похідна
differentiated_chisl_first = list() #числова перша
differentiated_chisl_second = list() #числова друга

for i in range(10, 100, 1):


xnew.append(i / 10)

def function(arg): #функція


r1 = arg * arg
r2 = np.exp(-r1)
resp = r1 * r2
return resp

def interpolacia(arr_x, arr_y, tochka):


retr = 0
for j in range(len(arr_y)):
p1 = 1
p2 = 1
for i in range(len(arr_x)):
if i != j:
p1 = p1 * (tochka - arr_x[i])
p2 = p2 * (arr_x[j] - arr_x[i])
retr = retr + arr_y[j] * p1 / p2
return retr

def localPolinom(x, y, t):


f=0
k1 = 0
k2 = 1
q=9
for i in range(q):
if x[k1] <= t <= x[k2]:
f = interpolacia(x[:k2 + 1], y[:k2 + 1], t)
k1 = k2
k2 += 1
return f

def differ_1(arg):
return (2 * arg * (np.e ** (-(arg ** 2)))) - 2 * (arg ** 3) * (np.e ** (-(arg ** 2)))

def differ_2(arg):
return (2 * np.e ** (-arg ** 2)) - (10 * (arg ** 2) * np.e ** (-(arg ** 2))) + 4 * (arg ** 4) * np.e ** (-(arg **
2))

def derivative_chisl(x_plt,y_plt, h):


print(len(x_plt))
deriv_list = []
for i in range(len(x_plt)):
if i == 0:
left = (y_plt[i+1] - y_plt[i])/h
deriv_list.append(left)
elif i > 0 and i < len(x_plt)-1:
center = (y_plt[i+1] - y_plt[i-1]) /(2*h)
deriv_list.append(center)
elif i == len(x_plt)-1:
right = (y_plt[i]-y_plt[i-1])/h
deriv_list.append(right)
return deriv_list

border_l = -2 #границя знизу


border_v = 0.5 #границя знизу
step = 0.1 #крок

# завдання 2а
for i in range(0, len(xnew)):
y_interp.append(function(xnew[i]))
# завдання 2б
y_localinterp = [localPolinom(Xc, Yc, t) for t in xnew]
# завдання 2в
y_globalinterp = [interpolacia(Xc, Yc, i) for i in xnew]
# завдання 3а
for j in range(0, len(xnew)):
differentiated_first.append(differ_1(xnew[j]))
differentiated_second.append(differ_2(xnew[j]))
# завдання 3Б
differentiated_chisl_first = derivative_chisl(xnew, y_globalinterp, step)
differentiated_chisl_second = derivative_chisl(xnew, differentiated_chisl_first, step)

# таблиця
print("\n x f(x) f(x) localinterp f(x) interp")
for i in range(0, len(xnew)):
print(xnew[i], ' ', y_interp[i], ' ', y_localinterp[i], ' ', y_globalinterp[i])

print("\n x похідна похідна по числ диф")


for i in range(0, len(xnew)):
print(xnew[i], ' ', differentiated_first[i], ' ', differentiated_chisl_first[i])

print("\n x похідна^2 похідна^2 по числ диф")


for i in range(0, len(xnew)):
print(xnew[i], ' ', differentiated_second[i], ' ', differentiated_chisl_second[i])

4. Виконання програми:

5. Висновок:
Під час виконання лабораторної роботи було вивчено
формули полінома Лагранжа, формули числового
диференціювання першого та другого порядку. Було
апроксимовано функцію, використовуючи кускову та та
глобальну інтерполяцію на заданих вузлах інтерполяції.
Було здобуто навички приблизного знаходження першої та
другої похідних функції. Були покращені навички
програмування мовою програмування Python

You might also like