You are on page 1of 5

Лабораторна робота №1

Звіт Рябчук Марії


Варіант 1

1. Математичний апарат:
 Поліном Лагранжа:
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
 Права різницева похідна: ẏ i ≈
h
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 ≈ h
2
i=[ 0 ,n ]

2. Код програми:
from math import exp

import numpy

'''

pohidna1= 6 * (exp(2 * (x 3) + 3 * (x 2) -5)) * x * (1 + x)

pohidna2= 6 * (exp(2 * (x 3) + 3 * (x 2) -5)) * (6 * (x 4) + 12 * (x 3) + 6 * (x 2) +


2 * x + 1)

'''

xl = [-2.11, -1.8, -1.5, -1.15, -0.95, -0.22, -0.1, 0.34, 0.7, 1.0]

fl = [0.00003, 0.00096, 0.00674, 0.01700, 0.01818, 0.00763, 0.00693, 0.01031, 0.05819, 1.0]

a = -2.0

b = 1.0

h = 0.1
#Вспомогательная функция, которая считает полином Лагранжа максимального сетепеня на всех
масивах значений х и у

def polinom(x, lx, ly):

ln1 = 1

ln = 0

for k in range(len(ly)):

for j in range(len(lx)):

if j != k:

ln1 = ln1 * (x - lx[j]) / (lx[k] - lx[j])

ln = ln + ly[k] * ln1

ln1 = 1

return ln

#Считает полином Лагранжа указаного степеня п из указаных списков значений х и у

def polinom1(x, lx, ly, n):

y = 0

t = 0

for i1 in range(0, len(lx) - 1, n):

if (x >= lx[i1]) and (x <= lx[i1 + n]):

listx = []

listy = []

for k in range(0, n):

listx.append(lx[t + k]), listy.append(ly[t + k])

y += polinom(x, listx, listy)

t += n

return round(y, 6)

def func(x):

y = 0

y = exp(2 * x 3 + 3 * x 2 - 5)

return y

def diff1(x):

y = 0

y = round(6 * exp(2 * x 3 + 3 * x 2 - 5) * x * (1 + x), 5)

return y
def diff1int(x):

y = 0

if x == a:

y = round((func(a + h) - func(a)) / h, 5)

return y

if x == b:

y = round((func(b) - func(b - h)) / h, 5)

return y

for i in numpy.arange(a, b + h, h):

if x == i:

y = round((func(i + h) - func(i - h)) / (2 * h), 5)

return y

def diff2(x):

y = 0

y = round(6 * exp(2 * x 3 + 3 * x 2 - 5) * (6 * x 4 + 12 * x 3 + 6 * x 2 + 2 * x +
1), 5)

return y

def diff2int(x):

y = 0

y = round((func(x + h) + func(x - h) - 2 * func(x)) / (h ** 2), 5)

return y

list_2a_x = []

list_2a_y = []

list_2b = []

list_2c = []

list_3a1 = []

list_3b1 = []

list_3a2 = []

list_3b2 = []
for i in numpy.arange(a, b + h, h):

list_2a_x.append(round(i, 1))

list_2a_y.append(round(func(i), 5))

list_2b.append(polinom1(i, xl, fl, 1))

list_2c.append(polinom1(i, xl, fl, 9))

list_3a1.append(diff1(i))

list_3b1.append(diff1int(i))

list_3a2.append(diff2(i))

list_3b2.append(diff2int(i))

print(' x, f(y), kusk.int., glob.int., poh1, pohint1, poh2,


pohint2')

for i in range(len(list_2a_x)):

print(list_2a_x[i], ' ' + ' ' * (4 - len(str(list_2a_x[i]))),

list_2a_y[i], ' ' + ' ' * (10 - len(str(list_2a_y[i]))),

list_2b[i], ' ' + ' ' * (10 - len(str(list_2b[i]))),

list_2c[i], ' ' + ' ' * (10 - len(str(list_2c[i]))),

list_3a1[i], ' ' + ' ' * (10 - len(str(list_3a1[i]))),

list_3b1[i], ' ' + ' ' * (10 - len(str(list_3b1[i]))),

list_3a2[i], ' ' + ' ' * (10 - len(str(list_3a2[i]))),

list_3b2[i], ' ' + ' ' * (10 - len(str(list_3b2[i]))))

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

You might also like