import numpy as np
import matplotlib.pyplot as plt

# Определим функции
def f(x):
    return x**2

def g(x):
    return x**3

def u(x):
    return x**4

def v(x):
    return x**5

# Создадим массив значений x на интервале [-1, 1] с 500 точками
x = np.linspace(-1, 1, 500)

# Создадим первую фигуру для вывода всех графиков на одной оси

# 1. Все функции на одном графике
plt.figure(figsize=(10, 6))  # Задаем размер фигуры

# Строим график f(x)
plt.plot(x, f(x), label="f(x) = x^2", color="blue", linestyle="--", marker='o')

# Строим график g(x)
plt.plot(x, g(x), label="g(x) = x^3", color="red", linestyle=":", marker='x')

# Строим график u(x)
plt.plot(x, u(x), label="u(x) = x^4", color="green", linestyle="-.", marker='s')

# Строим график v(x)
plt.plot(x, v(x), label="v(x) = x^5", color="purple", linestyle="-", marker='d')

# Добавляем заголовок и подписи к осям
plt.title("Графики функций f(x), g(x), u(x) и v(x) на одной оси")
plt.xlabel("x")  # Подпись оси x
plt.ylabel("y")  # Подпись оси y

# Добавляем легенду для обозначения функций
plt.legend()

# Включаем сетку
plt.grid(True)

# Показываем первый график
plt.show()

# 2. Разные функции на отдельных графиках (разделение на 2x2 подграфика)
fig, axs = plt.subplots(2, 2, figsize=(10, 10))  # Создаем фигуру с 4 подграфиками

# Первый подграфик: f(x)
axs[0, 0].plot(x, f(x), label="f(x) = x^2", color="blue", linestyle="--", marker='o')
axs[0, 0].set_title("f(x) = x^2")  # Заголовок для первого подграфика
axs[0, 0].set_xlabel("x")  # Подпись оси x
axs[0, 0].set_ylabel("y")  # Подпись оси y
axs[0, 0].grid(True)  # Включаем сетку

# Второй подграфик: g(x)
axs[0, 1].plot(x, g(x), label="g(x) = x^3", color="red", linestyle=":", marker='x')
axs[0, 1].set_title("g(x) = x^3")  # Заголовок для второго подграфика
axs[0, 1].set_xlabel("x")  # Подпись оси x
axs[0, 1].set_ylabel("y")  # Подпись оси y
axs[0, 1].grid(True)  # Включаем сетку

# Третий подграфик: u(x)
axs[1, 0].plot(x, u(x), label="u(x) = x^4", color="green", linestyle="-.", marker='s')
axs[1, 0].set_title("u(x) = x^4")  # Заголовок для третьего подграфика
axs[1, 0].set_xlabel("x")  # Подпись оси x
axs[1, 0].set_ylabel("y")  # Подпись оси y
axs[1, 0].grid(True)  # Включаем сетку

# Четвертый подграфик: v(x)
axs[1, 1].plot(x, v(x), label="v(x) = x^5", color="purple", linestyle="-", marker='d')
axs[1, 1].set_title("v(x) = x^5")  # Заголовок для четвертого подграфика
axs[1, 1].set_xlabel("x")  # Подпись оси x
axs[1, 1].set_ylabel("y")  # Подпись оси y
axs[1, 1].grid(True)  # Включаем сетку

# Корректируем расположение графиков для лучшего отображения
plt.tight_layout()

# Показываем второй набор графиков
plt.show()
