You are on page 1of 8

Алгоритми та числові методи

Лабораторна робота №1
Звіт
Оніщенко Анни КІ-1

1. Варіант 11
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
y 'i ≈
i=[0 , n]

y−y
 Ліва різницева похідна: y 'i ≈ i h i−1 i=[0 , n]
y −y
 Центральна різницева похідна: y 'i ≈ i +12 h i−1 i=[0 , n]
3. Код програми:
import matplotlib.pyplot as plt
import numpy

x = [1.00000, 1.23000, 1.37000, 1.44000, 1.5000, 1.57000, 1.63000, 1.76000, 1.79000,


1.86000, 2.16000, 2.27000, 2.35000,
2.4000, 2.55000]
y = [0.94630, 0.47828, -0.00531, -0.26867, -0.48679, -0.71268, -0.86508, -0.99898, -
0.98354, -0.87410, 0.42812, 0.86226,
0.99668, 0.97885, 0.45492]
point2 = numpy.arange(1.1, 2.55, 0.1)
funkpoint = numpy.arange(1, 2.55, 0.001)
funkpoint1 = numpy.arange(1, 2.4, 0.001)
xlag = [] # масив х для лагранджа
ylag = [] # масив у для лагранджа
yfunk = [] # масив у для функции синуса
yfunk1 = [] # масив у для функции синуса
ylag_kus = [] # масив у для квадратичной
xlag_kus_p = [1] # х для производной
ylag_kus_p = [] # у для производной
yfp = [] # у 1 производной чм
yfp1 = [] # у 1 производной
yfp2 = [] # у 2 производной чм
yfp12 = [] # у 2 производной

m = 0
m1 = len(x)
while m < m1:
xlag.append(x[m])
m = m + 1
p = 0
p1 = len(point2)
while p < p1:
xlag.append(point2[p])
xlag_kus_p.append(point2[p])
p = p + 1
xlag.sort()

def funk(point1):
return numpy.sin(point1 * point1 + point1 - 0.1)

def lag(point):
return ((y[0] * (point - x[1]) * (point - x[2]) * (point - x[3]) * (point -
x[4]) * (point - x[5]) * (point - x[6])
* (point - x[7]) * (point - x[8]) * (point - x[9]) * (point - x[10]) * (point -
x[11]) * (point - x[12])
* (point - x[13]) * (point - x[14])) / ((x[0] - x[1]) * (x[0] - x[2]) * (x[0] -
x[3]) * (x[0] - x[4])
* (x[0] - x[5]) * (x[0] - x[6]) * (x[0]
- x[7]) * (x[0] - x[8])
* (x[0] - x[9]) * (x[0] - x[10]) *
(x[0] - x[11]) * (x[0] - x[12])
* (x[0] - x[13]) * (x[0] - x[14]))) \
+ ((y[1] * (point - x[0]) * (point - x[2]) * (point - x[3]) * (point - x[4]) *
(point - x[5]) * (point - x[6])
* (point - x[7]) * (point - x[8]) * (point - x[9]) * (point - x[10]) * (point -
x[11]) * (point - x[12])
* (point - x[13]) * (point - x[14])) / ((x[1] - x[0]) * (x[1] - x[2]) * (x[1] -
x[3]) * (x[1] - x[4])
* (x[1] - x[5]) * (x[1] - x[6]) * (x[1]
- x[7]) * (x[1] - x[8])
* (x[1] - x[9]) * (x[1] - x[10]) *
(x[1] - x[11]) * (x[1] - x[12])
* (x[1] - x[13]) * (x[1] - x[14]))) \
+ ((y[2] * (point - x[1]) * (point - x[0]) * (point - x[3]) * (point - x[4]) *
(point - x[5]) * (point - x[6])
* (point - x[7]) * (point - x[8]) * (point - x[9]) * (point - x[10]) * (point -
x[11]) * (point - x[12])
* (point - x[13]) * (point - x[14])) / ((x[2] - x[1]) * (x[2] - x[0]) * (x[2] -
x[3]) * (x[2] - x[4])
* (x[2] - x[5]) * (x[2] - x[6]) * (x[2]
- x[7]) * (x[2] - x[8])
* (x[2] - x[9]) * (x[2] - x[10]) *
(x[2] - x[11]) * (x[2] - x[12])
* (x[2] - x[13]) * (x[2] - x[14]))) \
+ ((y[3] * (point - x[1]) * (point - x[2]) * (point - x[0]) * (point - x[4]) *
(point - x[5]) * (point - x[6])
* (point - x[7]) * (point - x[8]) * (point - x[9]) * (point - x[10]) * (point -
x[11]) * (point - x[12])
* (point - x[13]) * (point - x[14])) / ((x[3] - x[1]) * (x[3] - x[2]) * (x[3] -
x[0]) * (x[3] - x[4])
* (x[3] - x[5]) * (x[3] - x[6]) * (x[3]
- x[7]) * (x[3] - x[8])
* (x[3] - x[9]) * (x[3] - x[10]) *
(x[3] - x[11]) * (x[3] - x[12])
* (x[3] - x[13]) * (x[3] - x[14]))) \
+ ((y[4] * (point - x[1]) * (point - x[2]) * (point - x[3]) * (point - x[0]) *
(point - x[5]) * (point - x[6])
* (point - x[7]) * (point - x[8]) * (point - x[9]) * (point - x[10]) * (point -
x[11]) * (point - x[12])
* (point - x[13]) * (point - x[14])) / ((x[4] - x[1]) * (x[4] - x[2]) * (x[4] -
x[3]) * (x[4] - x[0])
* (x[4] - x[5]) * (x[4] - x[6]) * (x[4]
- x[7]) * (x[4] - x[8])
* (x[4] - x[9]) * (x[4] - x[10]) *
(x[4] - x[11]) * (x[4] - x[12])
* (x[4] - x[13]) * (x[4] - x[14]))) \
+ ((y[5] * (point - x[1]) * (point - x[2]) * (point - x[3]) * (point - x[4]) *
(point - x[0]) * (point - x[6])
* (point - x[7]) * (point - x[8]) * (point - x[9]) * (point - x[10]) * (point -
x[11]) * (point - x[12])
* (point - x[13]) * (point - x[14])) / ((x[5] - x[1]) * (x[5] - x[2]) * (x[5] -
x[3]) * (x[5] - x[4])
* (x[5] - x[0]) * (x[5] - x[6]) * (x[5]
- x[7]) * (x[5] - x[8])
* (x[5] - x[9]) * (x[5] - x[10]) *
(x[5] - x[11]) * (x[5] - x[12])
* (x[5] - x[13]) * (x[5] - x[14]))) \
+ ((y[6] * (point - x[1]) * (point - x[2]) * (point - x[3]) * (point - x[4]) *
(point - x[5]) * (point - x[0])
* (point - x[7]) * (point - x[8]) * (point - x[9]) * (point - x[10]) * (point -
x[11]) * (point - x[12])
* (point - x[13]) * (point - x[14])) / ((x[6] - x[1]) * (x[6] - x[2]) * (x[6] -
x[3]) * (x[6] - x[4])
* (x[6] - x[5]) * (x[6] - x[0]) * (x[6]
- x[7]) * (x[6] - x[8])
* (x[6] - x[9]) * (x[6] - x[10]) *
(x[6] - x[11]) * (x[6] - x[12])
* (x[6] - x[13]) * (x[6] - x[14]))) \
+ ((y[7] * (point - x[1]) * (point - x[2]) * (point - x[3]) * (point - x[4]) *
(point - x[5]) * (point - x[6])
* (point - x[0]) * (point - x[8]) * (point - x[9]) * (point - x[10]) * (point -
x[11]) * (point - x[12])
* (point - x[13]) * (point - x[14])) / ((x[7] - x[1]) * (x[7] - x[2]) * (x[7] -
x[3]) * (x[7] - x[4])
* (x[7] - x[5]) * (x[7] - x[6]) * (x[7]
- x[0]) * (x[7] - x[8])
* (x[7] - x[9]) * (x[7] - x[10]) *
(x[7] - x[11]) * (x[7] - x[12])
* (x[7] - x[13]) * (x[7] - x[14]))) \
+ ((y[8] * (point - x[1]) * (point - x[2]) * (point - x[3]) * (point - x[4]) *
(point - x[5]) * (point - x[6])
* (point - x[7]) * (point - x[0]) * (point - x[9]) * (point - x[10]) * (point -
x[11]) * (point - x[12])
* (point - x[13]) * (point - x[14])) / ((x[8] - x[1]) * (x[8] - x[2]) * (x[8] -
x[3]) * (x[8] - x[4])
* (x[8] - x[5]) * (x[8] - x[6]) * (x[8]
- x[7]) * (x[8] - x[0])
* (x[8] - x[9]) * (x[8] - x[10]) *
(x[8] - x[11]) * (x[8] - x[12])
* (x[8] - x[13]) * (x[8] - x[14]))) \
+ ((y[9] * (point - x[1]) * (point - x[2]) * (point - x[3]) * (point - x[4]) *
(point - x[5]) * (point - x[6])
* (point - x[7]) * (point - x[8]) * (point - x[0]) * (point - x[10]) * (point -
x[11]) * (point - x[12])
* (point - x[13]) * (point - x[14])) / ((x[9] - x[1]) * (x[9] - x[2]) * (x[9] -
x[3]) * (x[9] - x[4])
* (x[9] - x[5]) * (x[9] - x[6]) * (x[9]
- x[7]) * (x[9] - x[8])
* (x[9] - x[0]) * (x[9] - x[10]) *
(x[9] - x[11]) * (x[9] - x[12])
* (x[9] - x[13]) * (x[9] - x[14]))) \
+ ((y[10] * (point - x[1]) * (point - x[2]) * (point - x[3]) * (point - x[4]) *
(point - x[5]) * (point - x[6])
* (point - x[7]) * (point - x[8]) * (point - x[9]) * (point - x[0]) * (point -
x[11]) * (point - x[12])
* (point - x[13]) * (point - x[14])) / ((x[10] - x[1]) * (x[10] - x[2]) *
(x[10] - x[3]) * (x[10] - x[4])
* (x[10] - x[5]) * (x[10] - x[6]) *
(x[10] - x[7]) * (x[10] - x[8])
* (x[10] - x[9]) * (x[10] - x[0]) *
(x[10] - x[11]) * (x[10] - x[12])
* (x[10] - x[13]) * (x[10] -
x[14]))) \
+ ((y[11] * (point - x[1]) * (point - x[2]) * (point - x[3]) * (point - x[4]) *
(point - x[5]) * (point - x[6])
* (point - x[7]) * (point - x[8]) * (point - x[9]) * (point - x[10]) * (point -
x[0]) * (point - x[12])
* (point - x[13]) * (point - x[14])) / ((x[11] - x[1]) * (x[11] - x[2]) *
(x[11] - x[3]) * (x[11] - x[4])
* (x[11] - x[5]) * (x[11] - x[6]) *
(x[11] - x[7]) * (x[11] - x[8])
* (x[11] - x[9]) * (x[11] - x[10]) *
(x[11] - x[0]) * (x[11] - x[12])
* (x[11] - x[13]) * (x[11] -
x[14]))) \
+ ((y[12] * (point - x[1]) * (point - x[2]) * (point - x[3]) * (point - x[4]) *
(point - x[5]) * (point - x[6])
* (point - x[7]) * (point - x[8]) * (point - x[9]) * (point - x[10]) * (point -
x[11]) * (point - x[0])
* (point - x[13]) * (point - x[14])) / ((x[12] - x[1]) * (x[12] - x[2]) *
(x[12] - x[3]) * (x[12] - x[4])
* (x[12] - x[5]) * (x[12] - x[6]) *
(x[12] - x[7]) * (x[12] - x[8])
* (x[12] - x[9]) * (x[12] - x[10]) *
(x[12] - x[11]) * (x[12] - x[0])
* (x[12] - x[13]) * (x[12] -
x[14]))) \
+ ((y[13] * (point - x[1]) * (point - x[2]) * (point - x[3]) * (point - x[4]) *
(point - x[5]) * (point - x[6])
* (point - x[7]) * (point - x[8]) * (point - x[9]) * (point - x[10]) * (point -
x[11]) * (point - x[12])
* (point - x[0]) * (point - x[14])) / ((x[13] - x[1]) * (x[13] - x[2]) * (x[13]
- x[3]) * (x[13] - x[4])
* (x[13] - x[5]) * (x[13] - x[6]) *
(x[13] - x[7]) * (x[13] - x[8])
* (x[13] - x[9]) * (x[13] - x[10]) *
(x[13] - x[11]) * (x[13] - x[12])
* (x[13] - x[0]) * (x[13] - x[14]))) \
+ ((y[14] * (point - x[1]) * (point - x[2]) * (point - x[3]) * (point - x[4]) *
(point - x[5]) * (point - x[6])
* (point - x[7]) * (point - x[8]) * (point - x[9]) * (point - x[10]) * (point -
x[11]) * (point - x[12])
* (point - x[13]) * (point - x[0])) / ((x[14] - x[1]) * (x[14] - x[2]) * (x[14]
- x[3]) * (x[14] - x[4])
* (x[14] - x[5]) * (x[14] - x[6]) *
(x[14] - x[7]) * (x[14] - x[8])
* (x[14] - x[9]) * (x[14] - x[10]) *
(x[14] - x[11]) * (x[14] - x[12])
* (x[14] - x[13]) * (x[14] - x[0])))

def lag_k(point3, k):


return ((y[k] * (point3 - x[k + 1]) * (point3 - x[k + 2])) / ((x[k] - x[k + 1])
* (x[k] - x[k + 2]))) \
+ ((y[k + 1] * (point3 - x[k]) * (point3 - x[k + 2])) / ((x[k +
1] - x[k]) * (x[k + 1] - x[k + 2]))) \
+ ((y[k + 2] * (point3 - x[k + 1]) * (point3 - x[k])) / ((x[k +
2] - x[k + 1]) * (x[k + 2] - x[k])))

def lag_kus(ourx):
if ourx <= 1.37:
return lag_k(ourx, 0)
elif (ourx >= 1.37 and ourx <= 1.5):
return lag_k(ourx, 2)
elif (ourx >= 1.5 and ourx <= 1.63):
return lag_k(ourx, 4)
elif (ourx >= 1.63 and ourx <= 1.79):
return lag_k(ourx, 6)
elif (ourx >= 1.79 and ourx <= 2.16):
return lag_k(ourx, 8)
elif (ourx >= 2.16 and ourx <= 2.35):
return lag_k(ourx, 10)
elif ourx >= 2.35 :
return lag_k(ourx, 12)

n = 0
n1 = len(xlag)
while n < n1:
print("%-30.15g %-30.15g %-30.15g %-30.15g" % (lag(xlag[n]), lag_kus(xlag[n]),
funk(xlag[n]), xlag[n]))
ylag.append(lag(xlag[n]))
ylag_kus.append(lag_kus(xlag[n]))
n = n + 1
print(" ")

o = 0
while o < p1:
ylag_kus_p.append(lag_kus(xlag_kus_p[o]))
o = o + 1

def fp(point4):
if point4 == 0:
return (ylag_kus_p[point4 + 1] - ylag_kus_p[point4]) / 0.1
elif point4 > 0:
return (ylag_kus_p[point4 + 1] - ylag_kus_p[point4 - 1]) / 0.2
elif point4 == -1:
return (ylag_kus_p[point4] - ylag_kus_p[point4 - 1]) / 0.1

def fp2(point6):
if point6 == 0:
return (yfp1[point6 + 1] - yfp1[point6]) / 0.1
elif point6 > 0:
return (yfp1[point6 + 1] - yfp1[point6 - 1]) / 0.2
elif point6 == -1:
return (yfp1[point6] - yfp1[point6 - 1]) / 0.1

def fp1(point5):
return (2 * xlag_kus_p[point5] + 1) * (numpy.cos(xlag_kus_p[point5] *
xlag_kus_p[point5] + xlag_kus_p[point5] - 0.1))

def fp12(point7):
return ((2 * numpy.cos(xlag_kus_p[point7] * xlag_kus_p[point7] +
xlag_kus_p[point7] - 0.1)) - ((2 * xlag_kus_p[point7] + 1) ** 2)
* numpy.sin(xlag_kus_p[point7] * xlag_kus_p[point7] +
xlag_kus_p[point7] - 0.1))

b = 0
b1 = len(ylag_kus_p)
while b < (b1 - 1):
print("%-30.15g %-30.15g" % (fp(b), fp1(b)))
yfp.append(fp(b))
yfp1.append(fp1(b))
b = b + 1
print("%-30.15g %-30.15g" % (fp(-1), fp1(-2)))
yfp.append(fp(-1))
yfp1.append(fp1(-2))
print(" ")

h = 0
h1 = len(yfp1)
while h < (h1 - 2):
print("%-30.15g %-30.15g" % (fp2(h), fp12(h)))
yfp2.append(fp2(h))
yfp12.append(fp12(h))
h = h + 1
print("%-30.15g %-30.15g" % (fp2(-2+1), fp12(-2)))
yfp2.append(fp2(-1))
yfp12.append(fp12(-2))
print(" ")

yfunk.append(funk(funkpoint))
yfunk1.append(funk(funkpoint1))
xlag_kus_p.pop()

col = ["antiquewhite"]
col1 = ["red"]
col2 = ["orange"]
col3 = ["maroon"]
plt.grid()
plt.scatter(funkpoint, yfunk, color=col)
plt.scatter(xlag, ylag, color=col1)
plt.scatter(xlag, ylag_kus, color=col2)
plt.scatter(x, y, color=col3)
plt.legend(("sin(x^(2) + x - 0.1", "інтерполяція", "квадратична інтерполяція", "заданні
точки"))
plt.show()

col0 = ["lavender"]
col01 = ["hotpink"]
col02 = ["midnightblue"]
plt.grid()
plt.scatter(funkpoint1, yfunk1, color=col0)
plt.scatter(xlag_kus_p, yfp, color=col01)
plt.scatter(xlag_kus_p, yfp1, color=col02)
xlag_kus_p.pop()
plt.legend(("sin(x^(2) + x - 0.1", "f'(числовий метод)", "f'"))
plt.show()

col_1 = ["peachpuff"]
col_2= ["darkorange"]
col_3 = ["maroon"]
plt.grid()
plt.scatter(funkpoint1, yfunk1, color=col_1)
plt.scatter(xlag_kus_p, yfp2, color=col_2)
plt.scatter(xlag_kus_p, yfp12, color=col_3)
plt.legend(("sin(x^(2) + x - 0.1", "f''(числовий метод)", "f''"))
plt.show()
4. Виконання програми:
5. Висновок:
В цій лабораторній роботі було використано на практиці такі
метод: інтерполяція з допомогою поліному Лагранжа, кускова
інтерполяція (той самий метод), числове диференціювання для
першої та другої похідної. У результаті виконання поставленого
завдання, було отримано необхідні навички. Результатом слугують
три таблиці виводу значень функцій та похідних, а також три
графіки, що ілюструють, як виглядають отриманні значення на осях
Х та Y. Лабораторна робота була виконана на мові програмування
Python.

You might also like