2024-10-14 22:56:34 +03:00
|
|
|
|
import numpy as np
|
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
|
|
|
|
class zadacha1:
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
pass # Конструктор пока пустой, при необходимости можно добавить параметры
|
|
|
|
|
|
|
|
|
|
# Метод для генерации линейного массива данных
|
|
|
|
|
def create_lin_array(self, b0=2, b1=4, N=500, noise_std=10):
|
|
|
|
|
"""
|
|
|
|
|
Генерация массива данных по линейной зависимости Y = b0 + b1 * X + error
|
|
|
|
|
:param b0: свободный коэффициент
|
|
|
|
|
:param b1: коэффициент при X
|
|
|
|
|
:param N: количество точек данных
|
|
|
|
|
:param noise_std: стандартное отклонение для случайной ошибки
|
|
|
|
|
:return: массивы X и Y
|
|
|
|
|
"""
|
|
|
|
|
X = np.linspace(1, 500, N) # создаем массив X с равномерным шагом
|
|
|
|
|
error = np.random.normal(0, noise_std, N) # генерируем шум
|
|
|
|
|
Y = b0 + b1 * X + error # генерируем Y по линейному закону
|
|
|
|
|
return X, Y
|
|
|
|
|
|
|
|
|
|
# Метод для генерации квадратичного массива данных
|
|
|
|
|
def create_sqr_array(self, a=1, b=3, c=2, N=500, noise_std=10):
|
|
|
|
|
"""
|
|
|
|
|
Генерация массива данных по квадратичной зависимости Y = a * X^2 + b * X + c + error
|
|
|
|
|
:param a: коэффициент при X^2
|
|
|
|
|
:param b: коэффициент при X
|
|
|
|
|
:param c: свободный коэффициент
|
|
|
|
|
:param N: количество точек данных
|
|
|
|
|
:param noise_std: стандартное отклонение для случайной ошибки
|
|
|
|
|
:return: массивы X и Y
|
|
|
|
|
"""
|
|
|
|
|
X = np.linspace(1, 500, N) # создаем массив X
|
|
|
|
|
error = np.random.normal(0, noise_std, N) # генерируем шум
|
|
|
|
|
Y = a * X**2 + b * X + c + error # генерируем Y по квадратичному закону
|
|
|
|
|
return X, Y
|
|
|
|
|
|
|
|
|
|
# Метод для отображения графика линейных данных
|
|
|
|
|
def plot_lin_data(self, b0=2, b1=4, N=500, noise_std=10):
|
|
|
|
|
"""
|
|
|
|
|
Отображение сгенерированных линейных данных и теоретической линии
|
|
|
|
|
"""
|
|
|
|
|
X, Y = self.create_lin_array(b0, b1, N, noise_std) # Генерация данных
|
|
|
|
|
plt.scatter(X, Y) # График рассеяния
|
|
|
|
|
plt.plot(X, b0 + b1 * X, color='red') # Линейная функция без шума
|
|
|
|
|
plt.title("Линейная зависимость с шумом")
|
|
|
|
|
plt.show()
|
|
|
|
|
|
|
|
|
|
# Метод для отображения графика квадратичных данных
|
|
|
|
|
def plot_sqr_data(self, a=1, b=3, c=2, N=500, noise_std=10):
|
|
|
|
|
"""
|
|
|
|
|
Отображение сгенерированных квадратичных данных и теоретической кривой
|
|
|
|
|
"""
|
|
|
|
|
X, Y = self.create_sqr_array(a, b, c, N, noise_std) # Генерация данных
|
|
|
|
|
plt.scatter(X, Y) # График рассеяния
|
|
|
|
|
plt.plot(X, a * X**2 + b * X + c, color='red') # Квадратичная функция без шума
|
|
|
|
|
plt.title("Квадратичная зависимость с шумом")
|
|
|
|
|
plt.show()
|