You are on page 1of 12

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ

ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ БІЗНЕС-КОЛЕДЖ

Циклова комісія програмування

Робочий план
з курсу «Алгоритми, методи обчислень та структури даних»

Бєлан Нікіта Володимирович


ПІБ студента

студента групи 2П-20

Вид роботи Дата Оцінка


Пром. контроль
Залік
Викладач Марченко С. В.

Черкаси-2023
ПРАКТИЧНА РОБОТА 02
Чисельні методи теорії наближень
Система оцінювання
Завдання на практичну роботу

Практичні завдання

Варіанти 1-3
Виміряна напруга як функція від часу на клемах з опором 5 Ом для різних типів
батарейок з номінальним значенням 1.5 В описана в таблиці
Таблиця 1. Вольтаж та час, що витрачається на перезарядку
t , години v, вольти
Варіант 1 Варіант 2 Варіант 3
Батарейка Ni-Cd, Лужна батарейка, Лужна батарейка,
перша перезарядка Перша перезарядка друга перезарядка
0 1.40 1.40 1.35
1 1.30 1.17 1.15
2 1.00 1.10 1.05
3 0.40 1.05 1.00
4 0.05 0.90 0.40

ІНДЗ
1. Виконайте в зошиті обчислення, які виведуть інтерполяційні поліноми Лагранжа 2, 3
порядків для Вашої задачі з практичної роботи.
2. Виконайте в зошиті обчислення, які виведуть інтерполяційні поліноми Ньютона 2-4
порядків для Вашої задачі з практичної роботи.
3. Виконайте в зошиті обчислення, які виведуть набори лінійних та квадратичних сплайнів
для Вашої задачі з практичної роботи.
1. Інтерполяційний поліном Лагранжа 4го порядку

import numpy as np
from scipy.interpolate import lagrange

def main():
x = np.array([0, 1, 2, 3, 4])
y = np.array([1.35, 1.15, 1.05, 1.00, 0.40])
poly = lagrange(x, y)

print(poly)
main()
2. Інтерполяційний поліном Ньютона 4го порядку
import numpy as np
from numpy import zeros
from sympy import simplify
from sympy import symbols
from numpy import diagonal

def expression(a, x):

size = len(a)
x_ = symbols('x')
xs = [1 for i in range(size)]
res = [a[0] for i in range(size)]
for i, x_i in enumerate(x[:-1], start=1):
xs[i] = xs[i-1] * (x_ - x_i)
res[i] = a[i] * xs[i]

return simplify(sum(res))

def coeffs(x, y):

size = len(x)
res = zeros((size, size))
res[:, 0] = y
for col in range(1, size):
res[col:, col] = ((res[col:, col-1] - res[col-1:-1, col-1])/ (x[col:] - x[:-col]))

return diagonal(res)

def newton(x, y):


a = coeffs(x, y)

return expression(a, x)

x = np.array((0, 1, 2, 3, 4))
y = np.array((1.35, 1.15, 1.05, 1.00, 0.40))
p = newton(x, y)
print(p)

3. Лінійний сплайн

На другому інтервалі від x=1 до x=2 функція має вигляд

S2(x)=1.15+((1.05-1.15)/(2-1))*(x-1)
Значення в точці 1.5
S2(1.5)= 1.15+((1.05-1.15)/(2-1))*(1.5-1) = 1.1

from scipy.interpolate import interp1d


import matplotlib.pyplot as plt

def main():

x = [0, 1, 2, 3, 4]
y = [1.35, 1.15, 1.05, 1.00, 0.40]

f = interp1d(x, y, kind='slinear')
y_hat = f(1)

plt.plot(x, y, '-ob')
plt.plot(1.5, y_hat, 'ro')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

main()
4. Квадратичний сплайн

import numpy as np
from matplotlib import pyplot as plt
from scipy.interpolate import interp1d

def main():
x = [0, 1, 2, 3, 4]
y = [1.35, 1.15, 1.05, 1.00, 0.40]

xx = np.linspace(0, 4, 10)
f = interp1d(x, y, kind='quadratic', fill_value='extrapolate')
yy = f(xx)
plt.plot(xx, yy, '-ob')
plt.show()
main()
5. Кубічний сплайн
from scipy.interpolate import CubicSpline
import matplotlib.pyplot as plt
import numpy as np

def main():

x = [0, 1, 2, 3, 4]
y = [1.35, 1.15, 1.05, 1.00, 0.40]

f = CubicSpline(x, y, bc_type='natural')
x_new = np.linspace(0, 4, 1000)
y_new = f(x_new)
plt.figure(figsize = (10,8))
plt.plot(x_new, y_new, 'b')
plt.plot(x, y, 'ro')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

main()
ІНДЗ
1. Виконайте в зошиті обчислення, які виведуть інтерполяційні поліноми Лагранжа 2, 3
порядків для Вашої задачі з практичної роботи.

1.1

0 1.35
1 1.15
2 1.05
1.2
0 1.35
1 1.15
2 1.05
3 1.00
2. Виконайте в зошиті обчислення, які виведуть інтерполяційні поліноми Ньютона 2-4 порядків
для Вашої задачі з практичної роботи

2.1

0 1.35
1 1.15
2 1.05

2.2
0 1.35
1 1.15
2 1.05
3 1.00

2.3

You might also like